- Brand
- Adobe
- Category
- Content & Design
- Primary Subcategory
- Photo & Image Editing
Integration details
Description
Adobe unlocks more ways to create and get work done from the conversation. Previously available as Photoshop, the Adobe connector now brings creativity and productivity capabilities across Creative Cloud and Acrobat. Describe what you want to make or change, and Adobe can help turn ideas, images, videos, and documents into polished outputs — from editing photos and creating PDFs to designing social assets, resizing videos, searching Creative Cloud assets, and generating data-driven documents. Key capabilities: * Retouch portraits or edit photos in bulk: Drop in photos and describe the look you want — adjust color, lighting, and tone; remove distractions and generate new elements; apply Lightroom presets; remove backgrounds; blur, crop, resize, and expand images. * Design from template: Start from an Express template, update text and colors, and then animate for social media or convert to PDF. * Refine video for any platform: Upload a horizontal clip and ask to reformat it for YouTube Shorts, Instagram Reels, or any platform. You can also stitch clips into a single sequence. * Search and organize creative work: Describe what you're looking for and surface assets from your Creative Cloud library — by subject, style, mood, or content — without browsing folders. * Work with PDFs and documents: Create and convert polished PDFs and documents. * Create data-driven documents: Describe your output and provide your data — the connector turns raw data or content into formatted, shareable PDFs, including badges, cards, catalogs, and more. You can get started as a guest, and sign in with your Adobe account for more capabilities and tools, Creative Cloud storage, and saved work across sessions.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Photo & Image Editing
- Secondary Subcategories
- None listed
- Brand
- Adobe
- Access
- Account required
- First tracked
- 2026-09-28
- Tool count
- 104
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your Plugin is discoverable
ChatGPT now suggests Plugins on its own when they match a user's request.Adobe is being suggested, and your Discoverability Score is being created. It will show here as soon as it’s ready.
What discovery looks like

Get alerts for Adobe
Get updates when Adobe’s Discoverability Score or category rank changes.
Competing in ChatGPT Photo & Image Editing
View Category104 tools agents can invoke
Resolve a font identifier to a Typekit id (if not already known) and add exactly ONE font to the user's Creative Cloud library. There is no bulk/batch mode — call this tool once per font, even when adding several. Scope: this makes the font available inside Adobe apps (Photoshop, Illustrator, InDesign, Express, etc.) via Creative Cloud sync. It does NOT install the font as an OS-level/system font usable by non-Adobe apps, and it does not download a font file to the caller — there is only one persistence mode and it is not caller-configurable. `font_identifier` is required, e.g. `{"postscript_name": "...", "font_id": "..."}` from a recommended font's nested result returned by the font-recommendation tool. Supplying `font_identifier.font_id` when already known is used directly; when only `font_identifier.postscript_name` is given (font_id is None), it is resolved first. Successful JSON includes: **`success`** (bool), **`user_message`** (plain-language outcome for the end user—read this first), **`steps`** (variations + selections with `ok` per step), **`summary`** (technical flow), **`variation_step`**, **`selections_step`**, **`selections_result`**, and an **`error_code`** when something went wrong (`invalid_input`, `not_authenticated`, `not_entitled`, `not_found`, `upstream_error`, or `upstream_timeout` for a retryable transient failure — a timeout, connection error, or 5xx). On failure the response is `{success, error_code, user_message}` (plus `steps`/`summary` for context) — there is no `error` or `status_code` key in the response body. Re-adding a font the user already has does not create duplicates; the call is treated as a no-op and reflected in `user_message` ("added or was already present in your library"). Requires the caller to be authenticated (via OAuth, or the optional `bearer_token` arg for a caller that already holds a token). Anonymous adds are never allowed: when no usable token is available, this returns `error_code="not_authenticated"`. `not_authenticated` and `not_entitled` are kept distinct: an auth/scope problem (an expired or under-scoped token that a plan upgrade can't fix) is `error_code="not_authenticated"`, while a plan that doesn't include the font is `error_code="not_entitled"`, with an actionable `user_message` naming the plans (Fonts Standard or Fonts Pro) that unlock it. A PostScript name that matches no font is surfaced as `error_code="not_found"`, not `not_entitled`.
font_activate
Open the Adobe creative hub.
adobe_home
CALL ONCE per chat session before using any adobe tool (acrobat_proxy, acrobat_readonly_proxy, animate_design, asset_copy_assets, asset_create_folders, asset_finalize_file_upload, asset_get_mime_type, asset_get_presigned_url, asset_get_presigned_urls, asset_initialize_file_upload, asset_inline_preview, asset_license_and_download_stock, asset_lr_get_presigned_url, asset_migrate_guest_storage, asset_openai_file_upload, asset_preview_file, asset_resolve_short_url, asset_search, boards_add_items_to_board, boards_create_new_board, change_background_color, convert_pdf_to_indd, document_convert_pdf, document_merge_data_layout, document_merge_data_vector, document_render_layout, document_render_vector, download_design, enhanceSpeechPoll, export_idml, fill_text, font_activate, font_create_kit, font_details, font_preview, font_recommend, font_search, font_similar, font_styles, generate_indd_mapping_prompt, image_apply_adjustments, image_apply_auto_tone, image_apply_effects, image_apply_lens_blur, image_apply_preset, image_auto_straighten, image_crop_and_resize, image_crop_to_bounds, image_fill_area, image_generate, image_generative_expand, image_get_presigned_urls, image_get_task_status, image_instruct_edit, image_invert_selection, image_list_presets, image_open_file_app, image_remove_background, image_remove_blemishes, image_select_by_prompt, image_select_subject, image_vectorize, interactive_image_apply_adjustments_app, interactive_image_apply_effects_app, interactive_image_blur_background_app, interactive_image_edit_preview, interactive_image_get_context, interactive_image_get_options_for_adjustments_app, interactive_image_remove_background_app, interactive_image_undo_edits_app, interactive_image_uploader_app, log_analytics, markdown_to_pdf, media_enhance_speech, media_summarize, pdf_compress, pdf_create, pdf_edit_ui, pdf_export, pdf_file_open, pdf_highlight, pdf_ocr, pdf_operation_status, pdf_properties, pdf_to_image, pdf_to_markdown, pdf_viewer, prepare_indd_merge_template, quickCutPoll, replace_image, resizeVideoPoll, search_design, summarizePoll, vectorPollingHelper, videoMetadataPoll, videoRenderFramePoll, videoRenderPoll, video_create_quick_cut, video_metadata, video_render, video_render_frame, video_resize). Do NOT call again unless this tool's response is no longer in your context window. Returns file handling rules and tool routing guidance.
adobe_mandatory_init
Animate an Express design with motion effects. WHEN TO USE: "animate this", "make it move", "add animation to the design". WHEN NOT TO USE: Only works on Express designs.
animate_design
**Reusing a mask (only when the editing context with `actionHistory` is available):** the user can edit or remove masks in the editor, so a mask URL you passed earlier may be stale — the context's `actionHistory` lists each edit with its current mask. To carry a mask forward from an earlier edit, find that edit's most recent entry and pass its `mask.maskURI`, not the URL you originally passed; `isMaskUpdated` means the user edited it, so keep `maskDescription` / `toBeInverted` unchanged. If the entry has `userRemovedMaskURI` instead of `maskURI`, the user removed that mask: don't reuse it — call a selection tool if the request still targets that region, and pass `userRemovedMaskURI` only if the user explicitly asks for that mask again. To use the original AI selection instead of the user's edit, or after a crop, expand, straighten or undo-all, call a selection tool again. Use the attached context when present; call `interactive_image_get_context` only when none is attached. **ROUTING — `interactive_image_apply_adjustments_app` owns single-image tonal/color adjustments (exposure, contrast, hue/saturation, vibrance, color balance, B&W).** Count only the images this turn asks you to edit, not what the session holds. - **1 image this turn:** call `interactive_image_apply_adjustments_app`, not this tool. Never ask the user to choose; never offer a server-side edit. - **2+ images this turn:** THIS tool for the whole set — `interactive_image_apply_adjustments_app` has no batch form; never call or mention it. - **1-image exceptions, use THIS tool when:** the user explicitly asks you to do it for them ("just do it", "you pick") — an explicit ask only, never inferred from terseness, a stated value, or impatience; `interactive_image_apply_adjustments_app` is unavailable; the output feeds another tool, not the user. **MANDATORY PREREQUISITE — before every call to this tool, you must first call asset_inline_preview or read_image (whichever is available) on each input image, including intermediate outputs from prior tool calls, and inspect the returned visual.** Do not call this tool from the filename, the user's description, or prior assumptions alone. Do not proceed until the preview has returned and you have used it to judge the image's actual brightness, tonal balance, highlight/shadow state, and color cast. Without that visual grounding, parameter values are guesses. Adobe Photoshop and Lightroom professional image adjustments. **Use when:** brighten, darken, too dark, too bright, overexposed, underexposed, recover highlights, lift shadows, reveal shadow detail, crush blacks, boost contrast, boost saturation, muted colors, more colorful, desaturate, too yellow, too blue, warm up, cool down, white balance, color grade, hue shift, recolor an object, tone down a specific color, make it pop, looks dull, flat, lifeless, lacks contrast, professional look, polished, clean look — for specific, targeted adjustments where the direction or parameter is clear. For vague problem descriptions without a specified direction or amount, call `image_apply_auto_tone` first; use this tool only for follow-up fine-tuning. **Adjustment groups — set only the fields you need:** - Exposure: `exposure`, `gamma`, `exposureOffset` - Tonal regions: `highlights`, `lights`, `darks`, `shadows` - Brightness / contrast: `brightness`, `contrast` - Color temperature: `tempA` + `tempB` + `tempLuminance` (all three required) - Hue / sat / lightness: `hslHue` + `hslSaturation` + `hslLightness` (all three required; optionally add `colorize` or `targetColor`) - Vibrance / saturation: `vibrance`, `saturation` - Per-channel saturation: `channelTarget` + `channelSaturation` (both required) **Why this tool:** - CIELAB color temperature: precise warm/cool via Lab colorspace - Vibrance: smart saturation that protects skin tones - Camera Raw tone controls: exposure, gamma, offset, tonal regions - Deterministic single-pass pipeline: all adjustments applied in optimal fixed order in one call To target a specific object or area in the image: 1. If the user provides a mask URL, use it to limit the effect to that region. 2. If no mask URL is provided but the user wants to target a specific area, first use available masking tools to create a mask based on their description, then apply the effect. 3. If no mask is specified and no targeting is requested, apply the effect to the entire image. **Output Format:** ALWAYS use `outputFileType: "png"`. PNG is required — it preserves lossless quality and transparency through multi-step edits and selection-mask chains. Only use `"jpeg"` when the user has explicitly requested JPEG format for the final result. **Pipeline order (fixed, applied server-side):** exposure → highlights → lights → darks/shadows → brightness/contrast → colorTemperature → hsl → vibrance/saturation → channelSaturation. To enforce a different effective order, call this tool multiple times, chaining each results[].outputUrl into the next call's imageURIs. **Long-running batches:** A batch may take longer than a single call can wait. If the response is a single result with `status: "working"`, NO images are ready yet — call `image_get_task_status` with its `taskId` to collect them all at once. Do NOT call `image_apply_adjustments` again, which would redo the work and bill for it twice. Examples: <example> Too dark / dull / flat: { "exposure": 0.5, "gamma": 1.2, "contrast": 20 } </example> <example> Too bright: { "exposure": -1.0, "highlights": -50 } </example> <example> Warmer: { "tempA": 20, "tempB": 100, "tempLuminance": 55 } </example> <example> Natural color boost (skin-safe): { "vibrance": 30 } </example> <example> Recover shadow detail: { "darks": 40, "shadows": 25 } </example> <example> Recolor a neutral or white object to blue: { "hslHue": 220, "hslSaturation": 60, "hslLightness": 0, "colorize": true } </example> <example> Tone down reds only: { "channelTarget": "red", "channelSaturation": -40 } </example>
image_apply_adjustments
**Choosing the image to edit:** pick the source image URL by the first rule that applies — if the user uploaded a new image with this request (a new conversation, or a switch to a different image to edit), use that uploaded image's URL; otherwise, if the previous tool returned an image output, use that output URL; otherwise, read the latest context and use `currentInputImage`, the flattened current image (when multiple contexts are present, use the one with the most recent `updateTimestamp`); otherwise, fall back to the last known image URL. **After editing:** once this tool returns an edited image, you MUST call `interactive_image_edit_preview` with that output URL to display the result to the user. Automatically corrects the tonal balance of the images in one step by adjusting exposure, contrast, highlights, shadows, whites, and blacks. No prior image analysis or preview is needed — call this tool directly. **Use when:** the user describes a tonal or visual problem without specifying exact values or a direction — e.g., "improve", "fix the lighting", "I can't see the subject", "looks flat". Always call this tool first; use `image_apply_adjustments` afterward only if finer manual control is still needed. **Not for:** adjustments where the user specifies a clear direction or amount (e.g., "make shadows warmer", "boost saturation") — use `image_apply_adjustments` directly for those. **Long-running batches:** A batch may take longer than a single call can wait. If the response is a single result with `status: "working"`, NO images are ready yet — call `image_get_task_status` with its `taskId` to collect them all at once. Do NOT call `image_apply_auto_tone` again, which would redo the work and bill for it twice.
image_apply_auto_tone
**Reusing a mask (only when the editing context with `actionHistory` is available):** the user can edit or remove masks in the editor, so a mask URL you passed earlier may be stale — the context's `actionHistory` lists each edit with its current mask. To carry a mask forward from an earlier edit, find that edit's most recent entry and pass its `mask.maskURI`, not the URL you originally passed; `isMaskUpdated` means the user edited it, so keep `maskDescription` / `toBeInverted` unchanged. If the entry has `userRemovedMaskURI` instead of `maskURI`, the user removed that mask: don't reuse it — call a selection tool if the request still targets that region, and pass `userRemovedMaskURI` only if the user explicitly asks for that mask again. To use the original AI selection instead of the user's edit, or after a crop, expand, straighten or undo-all, call a selection tool again. Use the attached context when present; call `interactive_image_get_context` only when none is attached. **ROUTING — `interactive_image_apply_effects_app` owns single-image artistic effects and filters.** Count only the images this turn asks you to edit, not what the session holds. - **1 image this turn:** call `interactive_image_apply_effects_app`, not this tool. Never ask the user to choose; never offer a server-side edit. - **2+ images this turn:** THIS tool for the whole set — `interactive_image_apply_effects_app` has no batch form; never call or mention it. - **1-image exceptions, use THIS tool when:** the user explicitly asks you to do it for them ("just do it", "you pick") — an explicit ask only, never inferred from terseness, a stated value, or impatience; `options.effect` is `colorOverlay` — not in the widget; `interactive_image_apply_effects_app` is unavailable; the output feeds another tool, not the user. Applies a single Photoshop filter/style effect to the image or an area, chosen via `options.effect`. **Effects — set `options.effect` to one of:** - `grain`: film grain, analog grain, add grain, cinematic texture, grainy photo, shot on film. - `noise`: add noise, digital noise, pixel noise, noisy image, uniform noise, digital texture. - `colorOverlay`: color overlay, color wash, tint filter, color layer on photo. Adds a new flat-color layer on top — a graphic/stylized tint. For a natural-looking global warm/cool or color-cast shift that preserves existing lighting, shadows, and detail, use `image_apply_adjustments`'s color temperature or HSL params instead. **Cannot set opacity** — for "at 20%"/semi-transparent requests use `image_fill_area`. Without a mask covers the whole canvas. **Do not use** to fill or replace a background behind a subject (even a transparent cutout); use `image_remove_background` with `options.backgroundColor` instead. - `gaussianBlur`: blur, soften, defocus, bokeh, out of focus, hazy background. Uniform-radius; for falloff/shallow depth-of-field use `image_apply_lens_blur`. To blur the background behind a subject, the `interactive_image_blur_background_app` routing rule above applies. - `glitch`: glitch, chromatic aberration, broken screen, VHS distortion, cyberpunk. Larger absolute offset = more intense. - `halftone`: halftone, dot pattern, comic book, newspaper, screen printing, risograph. - `monochromaticTint`: black and white, grayscale, sepia, duotone, faded, washed out, single color wash. **One effect per call** — to layer several, call once per effect, chaining each result's `outputUrl` into the next call's `imageURIs`. To target a specific object or area in the image: 1. If the user provides a mask URL, use it to limit the effect to that region. 2. If no mask URL is provided but the user wants to target a specific area, first use available masking tools to create a mask based on their description, then apply the effect. 3. If no mask is specified and no targeting is requested, apply the effect to the entire image. **Long-running batches:** A batch may take longer than a single call can wait. If the response is a single result with `status: "working"`, NO images are ready yet — call `image_get_task_status` with its `taskId` to collect them all at once. Do NOT call `image_apply_effects` again, which would redo the work and bill for it twice. Examples: - Noise via preset: { "effect": "noise", "preset": "stronglyAddMoreNoise" } - Red overlay, lighten blend: { "effect": "colorOverlay", "color": { "red": 205, "green": 3, "blue": 3 }, "blendMode": "lighten" } - Blur the background: { "effect": "gaussianBlur", "blurRadius": 5, "blurTarget": "background" } - Subtle glitch (negative offset): { "effect": "glitch", "horizontalOffset": -10 } - Sepia tint: { "effect": "monochromaticTint", "hue": 50, "saturation": 25, "lightness": 0 }
image_apply_effects
**ROUTING — `interactive_image_blur_background_app` owns single-image background blur behind a subject.** Count only the images this turn asks you to edit, not what the session holds. - **1 image this turn:** call `interactive_image_blur_background_app`, not this tool. Never ask the user to choose; never offer a server-side edit. - **2+ images this turn:** THIS tool for the whole set — `interactive_image_blur_background_app` has no batch form; never call or mention it. - **1-image exceptions, use THIS tool when:** the user explicitly asks you to do it for them ("just do it", "you pick") — an explicit ask only, never inferred from terseness, a stated value, or impatience; no subject mask is available or obtainable (the widget requires one); `interactive_image_blur_background_app` is unavailable; the output feeds another tool, not the user. Blurs the background with depth-of-field falloff (bokeh) while keeping the subject sharp. Auto-detects the primary subject and progressively blurs the background — no manual masking. **Output Format:** ALWAYS use `outputFileType: "png"`. PNG is required — it preserves lossless quality and transparency through multi-step edits and selection-mask chains. Only use `"jpeg"` when the user has explicitly requested JPEG format for the final result. **Use ONLY when the user explicitly asks for blur, bokeh, depth-of-field, or out-of-focus background. Takes no mask and ignores selection state — do not chain `image_select_subject` / `image_invert_selection` ahead of it; subject masking is built in. For a uniform-radius blur instead of DoF falloff/bokeh, use `image_apply_gaussian_blur`: either `blurTarget: 'background'` (auto subject detection), or pass a `maskURI` from `image_select_subject` or `image_select_by_prompt` + `image_invert_selection` when you need a custom region or a sharper mask boundary. Example: <example> Apply lens blur: {} </example>
image_apply_lens_blur
**Choosing the image to edit:** pick the source image URL by the first rule that applies — if the user uploaded a new image with this request (a new conversation, or a switch to a different image to edit), use that uploaded image's URL; otherwise, if the previous tool returned an image output, use that output URL; otherwise, read the latest context and use `currentInputImage`, the flattened current image (when multiple contexts are present, use the one with the most recent `updateTimestamp`); otherwise, fall back to the last known image URL. **After editing:** once this tool returns an edited image, you MUST call `interactive_image_edit_preview` with that output URL to display the result to the user. Applies named Lightroom preset(s) to one or more images in a single batched call, transforming each image's look in one step. A preset adjusts tone, color, contrast, grain, and sharpening together as a unified look. Group the work into `edits`: each entry pairs one `presetName` with the `images` it applies to. Use multiple entries to apply different presets to different images in the same call. WHEN TO USE: the user's request is about **color/tone/mood only** — preset, color grade, film look, vintage, black and white conversion, matte finish, warm tone, cool tone, skin tone edit, vignette, cinematic grade, dramatic sky, sharpen, add grain, subject pop. WHEN NOT TO USE: composed-look requests that imply a different background, subject/background separation, or relighting — e.g. "studio photo", "product shot", "clean white backdrop", "magazine cover", "headshot on grey", "professional portrait". Those require structural changes that presets cannot produce. In those cases, build the composition first (isolate subject, replace background, relight) using the subject-selection / fill / blur / exposure tools, and only then apply a preset as the final color pass if needed. **One look per result:** Presets are a complete look, not additive filters. Apply a single preset as the final color/tone step for any given output, and do NOT re-run this tool on an image that already has a preset baked in — chaining presets on the same pixels compounds the effect and looks unnatural. Listing the *same* source image under *different* presets is fine: each preset is applied independently to the original image and produces a separate variant. 100+ presets across 14 categories: B&W (10), Color (6), Creative (13), Curve (4), Defaults (4 profiles with optional lens correction / noise reduction), Grain (3), Optics (3), Portraits (13: light/medium/deep skin variants), Sharpening (3), Vignetting (3), Adaptive (19: portrait, sky, subject, background blur), Auto+ (3: retro), Style (12: futuristic, cinematic II, film-inspired, vintage, B&W), Subject (8: travel, food, lifestyle). The catalog also includes a handful of curated **custom** presets that apply as a complete look exactly like the built-in ones. **Important:** The categories above are summaries, not exact preset names. You MUST call `image_list_presets` first to get the exact display names — preset names have specific formatting (e.g. "B&W - B&W High Contrast", not "B&W High Contrast"). Do not guess preset names. Returns one result per (preset, image) pair, each carrying the applied `presetName` in its metadata. **Long-running preset applications:** A batch may take longer than a single call can wait. If the response is a single result with `status: "working"`, NO images are ready yet — call `image_get_task_status` with its `taskId` to collect them all at once. Do NOT call this tool again, which would re-apply the presets and bill for them twice. Examples: <example> One preset on two photos: { "edits": [ { "presetName": "B&W - B&W High Contrast", "images": [ "https://example.com/a.jpg", "https://example.com/b.jpg" ] } ] } </example> <example> A different preset per photo: { "edits": [ { "presetName": "B&W - B&W High Contrast", "images": [ "https://example.com/a.jpg" ] }, { "presetName": "Style: Vintage - VN07", "images": [ "https://example.com/b.jpg" ] } ] } </example> <example> Two looks of one photo (independent variants): { "edits": [ { "presetName": "B&W - B&W High Contrast", "images": [ "https://example.com/a.jpg" ] }, { "presetName": "Style: Vintage - VN07", "images": [ "https://example.com/a.jpg" ] } ] } </example>
image_apply_preset
**Session handle:** each source image (`originalUploadedImage`) has its own `sessionId`, minted on demand — it is not one handle for the whole conversation. The **first** call for a given source image must pass `sessionId: -1`; wait for the `sessionId` it returns and reuse that value for every later call on that same image. When `originalUploadedImage` changes to a different image, pass `-1` again to start that image's session, and keep a per-image mapping so returning to an earlier image reuses its `sessionId`. Apply artistic effects and filters to a whole image or a masked region. Each effect is applied with default parameter values; see the available effects listed below. **ROUTING — this widget owns every single-image request for artistic effects and filters.** Count only the images this turn asks you to edit, not what the session holds. - **1 image this turn:** call THIS tool. Never ask widget-vs-server-side; never offer the direct tools (`image_apply_effects`, `image_add_grain`, `image_add_noise`, `image_apply_glitch_effect`, `image_apply_halftone`, `image_apply_monochromatic_tint`, or `image_apply_color_overlay`). - **2+ images this turn:** NEVER this tool — no batch form; use those direct tools and do not mention this one. - **1-image exceptions, use those direct tools when:** the user explicitly asks you to do it for them ("just do it", "you pick") — an explicit ask only, never inferred from terseness, a stated value, or impatience; the request is a color overlay — not in this widget. - **STOP after calling.** It renders its own result and returns no asset URL — no `asset_inline_preview`, `asset_preview_file`, `interactive_image_edit_preview`, or any next step. - **Non-generative** — never widens what generative editing is permitted. **IMPORTANT – ASSISTANT BEHAVIOR CONSTRAINTS:** - This tool applies effects with default parameter values; it does NOT allow setting specific parameter values in the tool call. - The assistant MUST NOT claim to set or configure specific parameter values (e.g., "I'll set glitch intensity to 80%," "I've configured blur radius to 15px," "Grain amount is now at 50%"). The assistant MAY only: - Call this tool with effectIds to apply effects with their default parameters - Explain that users can manually adjust effect parameters using the interactive sliders in the widget after the effect is applied - Give directional guidance on adjusting parameters (e.g., "Use the Intensity slider to increase the glitch effect") When asked to "apply effects to xxx or give xxx effects" or something along those lines, you should use the "selectSubject" or "selectionByPrompt" tool to generate a mask first. See those selection tools' descriptions for more details. Forbidden phrasing: - "I'll set the glitch intensity to 80% for you." - "I've configured the blur radius to 15 pixels." - "Grain amount is now at 50%." - "I can apply the effect with specific parameter values." Allowed phrasing: - "I'll apply the glitch effect with default settings. You can adjust the intensity using the sliders in the widget." - "The blur effect has been applied. Use the Radius slider to control the blur amount." - "After the grain effect is applied, increase the Amount slider to make it more pronounced." - "The effect will start with default values. Click the settings icon to adjust the parameters." **EFFECT SELECTION STRATEGY:** If you want to suggest additional related effects, do NOT add them to this array. Instead, include suggestions in your response text as follow-up prompts for the user. 1. VAGUE REQUESTS (e.g., "apply effects to my image", "add some effects") → OMIT this parameter entirely to use the default set of effects 2. DESCRIPTIVE INTENT (e.g., "apply creative effects", "make me stand out", "make my image pop", "add artistic touches") → Analyze the intent and select up to 5 effects from the available list that best match the description → Consider image context: for portraits prioritize effects recommended for people, for landscapes use scene-appropriate effects 3. EXPLICIT SINGLE EFFECT (e.g., "apply glitch effect", "apply vintage effect", "add a duotone") → Find the single best matching effect and provide ONLY that one effect in this array 4. EXPLICIT MULTIPLE EFFECTS (e.g., "apply glitch and vintage effects", "show me duotone, tritone, and cartoon") → Provide only the specific effects requested (up to 5 maximum) 5. MORE OR ADDITIONAL EFFECTS REQUEST → Review conversation history to see which effects were already applied → Select NEW effects that haven't been shown yet, following the appropriate strategy above → Never repeat previously applied effects unless explicitly requested **CONSTRAINTS:** - Maximum 5 effects per request - If user requests more than 5, make suggestions for the remaining effects as part of the tool response - DO NOT automatically make multiple tool calls for remaining effects - Always WAIT for explicit user confirmation before applying additional batches - DO NOT use this tool to undo by passing an empty effectIds list. For undo, use the interactive_image_undo_edits_app tool instead **AVAILABLE EFFECTS:** When asked to list available effects, use only the effect name (not the ID), description, and recommended for fields. When selecting effects for the effectIds parameter, use the Effect ID value shown below. Effect ID: bloom - Name: Bloom - Description: Adds a soft glow making bright areas radiate light to create a dreamy, hazy atmosphere. - Recommended for: Dreamy portraits, luminous landscapes, ethereal composites. Effect ID: bokehBlur - Name: Bokeh blur - Description: Blurs highlights into soft, glowing shapes to mimic a shallow depth of field. - Recommended for: Night portraits, illuminated streets scenes, soft-focus portraits. Effect ID: cartoon - Name: Comic - Description: Simplifies details into outlines and flat color to give the appearance of a comic illustration. - Recommended for: Pop art scenes, character art, stylized portraits. Effect ID: colorhalftone - Name: Halftone color - Description: Transforms images into patterns that mimic classic printing colors, echoing the layered look of vintage. - Recommended for: Retro posters, pop-art portraits, vintage prints. Effect ID: dither - Name: Dither - Description: Creates patterns of colored squares to mimic retro arcade aesthetics. - Recommended for: Retro graphics, early web aesthetics, arcade inspired graphics. Effect ID: duotone - Name: Duotone - Description: Creates a vintage two-tone effect that gives images a nostalgic, retro aesthetic. Perfect for adding timeless character to portraits and people. - Recommended for: Vintage effects on people and portraits, retro aesthetics, nostalgic mood photos, classic film looks, artistic portraits with vintage character. Effect ID: glitch - Name: Glitch - Description: Separates and shifts color channels to produce a multi-color, stepped, displacement. - Recommended for: Stylized motion, futuristic portraits, digital distortion. Effect ID: grain - Name: Grain - Description: Applies a uniform, film-like texture for a vintage or cinematic feel. - Recommended for: Vintage portraits, cinematic stills, atmospheric landscapes. Effect ID: lensDistortion - Name: Lens Distortion - Description: Radiates chromatic color flares that amplify energy and motion. - Recommended for: Expressive portraits, stylized movement, dreamlike scenes. Effect ID: mosaic - Name: Mosaic - Description: Transforms the image into a pattern of colored cells to mimic the artistic style. - Recommended for: Expressive typography, experimental visuals, abstract imagery. Effect ID: motionBlur - Name: Motion Blur - Description: Adds directional streaks and blends details to give the impression of movement and speed. - Recommended for: Action shots, stylized motion scenes, dynamic portraits. Effect ID: noise - Name: noise - Description: Applies random, uneven texture to add grit and static and mimic digital artifacts. - Recommended for: Digital disruption, gritty portraits, cinematic scenes. Effect ID: pixelate - Name: Pixelate - Description: Transforms the image into a grid of visible squares, creating a low-resolution aesthetic. - Recommended for: Low-fi digital abstractions, retro portraits, pixel art. Effect ID: radialBlur - Name: Radial Blur - Description: Creates circular motion from a center point to give the impression of spinning. - Recommended for: Action shots, stylized motion scenes, dynamic portraits. Effect ID: threshold - Name: Photocopy - Description: Mimics the gritty, high-contrast style of a photocopy with bold shapes and texture. - Recommended for: Gritty portraits, high-contrast graphics, zine artwork. Effect ID: tritone - Name: Tritone - Description: Transforms the image into three colors, adding depth and richness for a stylized graphic finish. - Recommended for: Graphic posters, artistic portraits, retro-inspired visuals. Effect ID: tritoneSepia - Name: Tritone Sepia - Description: Transforms the image into three sepia tone colors, adding depth and richness for a stylized graphic finish. - Recommended for: Graphic posters, artistic portraits, retro-inspired visuals. Effect ID: twirl - Name: Twirl - Description: Swirls the image around a central point, creating a spiraling distortion. - Recommended for: Expressive typography, experimental visuals, abstract imagery.
interactive_image_apply_effects_app
Automatically straighten and level the image. WHEN TO USE: "straighten this", "fix the horizon", "level the image", "the photo is crooked".
image_auto_straighten
**Session handle:** each source image (`originalUploadedImage`) has its own `sessionId`, minted on demand — it is not one handle for the whole conversation. The **first** call for a given source image must pass `sessionId: -1`; wait for the `sessionId` it returns and reuse that value for every later call on that same image. When `originalUploadedImage` changes to a different image, pass `-1` again to start that image's session, and keep a per-image mapping so returning to an earlier image reuses its `sessionId`. Blur background of the image to make the main subject stand out. This tool uses the Gaussian Blur effect to blur the background. For other types of blur effects, use the interactive_image_apply_effects_app tool instead. **ROUTING — this widget owns every single-image request for background blur behind a subject.** Count only the images this turn asks you to edit, not what the session holds. - **1 image this turn:** call THIS tool. Never ask widget-vs-server-side; never offer the direct tools (`image_apply_lens_blur`, `image_apply_gaussian_blur`, or `image_apply_effects`). - **2+ images this turn:** NEVER this tool — no batch form; use those direct tools and do not mention this one. - **1-image exceptions, use those direct tools when:** the user explicitly asks you to do it for them ("just do it", "you pick") — an explicit ask only, never inferred from terseness, a stated value, or impatience; no subject mask is available or obtainable (this tool requires one). - **STOP after calling.** It renders its own result and returns no asset URL — no `asset_inline_preview`, `asset_preview_file`, `interactive_image_edit_preview`, or any next step. - **Non-generative** — never widens what generative editing is permitted. **Requires a mask:** - If no maskURI exists for this image, call image_select_subject_action_json tool first. - Verify the mask was generated from the same image being edited. - The mask required for this tool must be the background mask. → If the mask is the subject mask, set toBeInverted to true. → If the mask is the background mask, set toBeInverted to false.
interactive_image_blur_background_app
Update the background color of an Express design. WHEN TO USE: "change the background to blue", "make the background white", "use a darker background". WHEN NOT TO USE: Only works on Express designs.
change_background_color
Poll for Completion of videoRenderFrame tool
videoRenderFramePoll
Poll for Completion of quickCut tool
quickCutPoll
Poll for Completion of videoMetadata tool
videoMetadataPoll
Poll for Completion of videoRender tool
videoRenderPoll
Poll for Completion of resizeVideo tool
resizeVideoPoll
Poll for Completion of enhanceSpeech tool
enhanceSpeechPoll
Poll for Completion of summarize tool
summarizePoll
Convert a PDF to an editable InDesign file (INDD or IDML). WHEN TO USE: "convert PDF to InDesign", "edit this PDF layout", "make PDF editable in InDesign", "PDF to INDD". NOTES: Returns a ZIP containing the document and linked assets. Requires login.
document_convert_pdf
Converts a PDF into an InDesign (.indd) file for use as a variable-data merge template. WHEN TO USE: When the source template is a PDF that needs to be prepared for a data merge workflow. WHEN NOT TO USE: For general PDF-to-InDesign editing. Returns presigned .indd URL(s).
convert_pdf_to_indd
Copy one or more assets within Creative Cloud storage. WHEN TO USE: "copy this to another folder", "duplicate asset", "copy to project".
asset_copy_assets
Create one or more folders in Adobe Creative Cloud Files storage for organizing assets. WHEN TO USE: "create a folder", "make a new folder", "set up project folders", "organize my files", creating destination folders before copying/moving assets, setting up project directory hierarchies. WHEN NOT TO USE: For uploading files -> use asset_openai_file_upload for ChatGPT-native file uploads. USAGE: - Folders can be created at root level (home directory) or nested within existing folders. - Use forward slashes to create nested hierarchies in one call (e.g., "myAssets/2024/Q4-Campaign" creates three nested folders). - If a folder with the same name already exists, a numbered suffix is automatically added (e.g., "MyFolder", "MyFolder (1)"). LIMITATIONS: Cannot create folders in Libraries or Brands (only in Files storage). Folder names must follow Adobe naming conventions. OUTPUT: Returns folder ID (assetId), folder name (may differ from input if renamed due to conflict), and creation metadata.
asset_create_folders
Create and publish a real Adobe Fonts (Typekit) kit — a CSS/JS embed bundle — for one or more fonts, so they can be embedded on a website. The kit is created under the caller's own Adobe Fonts account and is visible/manageable at fonts.adobe.com, unlike the legacy "Instant Kit" mechanism (which Adobe's own guidance treats as deprecated for exactly this job). Scope: this is for embedding fonts on a website (a <link>/<script> embed via kit id), not for Adobe apps (see the library-add tool for that) and not for OS-level font install. Up to 10 fonts per call — a kit represents one site's font system, commonly 2-4 fonts, not a bulk-activation mechanism. `domains` is a list of site domains this kit will be used on — `localhost`, `file://...`, a bare dev hostname with a port, or a normal `https://example.com` are all accepted. Values are trimmed and blank entries dropped; there is no URL/hostname format validation beyond a basic length and safe-character check. All-or-nothing entitlement: every requested font must be found and entitled to the caller's current Adobe Fonts plan. If even one font fails either check, NO kit is created at all — the whole call is rejected with the specific failing font(s) named, rather than silently creating a kit with fewer fonts than asked for. `font_identifiers` is a list of `{"postscript_name": "...", "font_id": "..."}` (font_id optional, e.g. from a font-recommendation tool result). `kit_name` is optional; if omitted, a human-readable name is generated from the first font's family name, the font count, and the first domain, so the kit is recognizable when the caller looks it up later at fonts.adobe.com. `locale` (default `en_US`) selects the language the font family names are translated into, and affects only that auto-generated default kit name (when `kit_name` is omitted) — the kit's fonts, domains, and entitlement are unaffected, and an explicit `kit_name` ignores it entirely. Pass a region-qualified value (`en_US`, `ja_JP`); hyphen, bare-code, and region-mismatched variants are normalized to the closest supported locale, and an unsupported value falls back to `en_US` rather than being rejected. See this server's MCP instructions for the list of supported locales. Successful JSON includes: **`success`** (bool), **`user_message`** (plain-language outcome), **`steps`** (per-stage `ok`), **`summary`** (technical flow), and **`kit`** (the created/published kit: `id`, `name`, `domains`, `families`, and the embed snippets — `css_embed_code`, `embed_code`, `advanced_embed_code`). On an all-or-nothing rejection, **`kit`** is `null` and **`failures`** lists each rejected font as `{"postscript_name", "reason"}` where `reason` is `"not_found"`, `"not_entitled"`, or `"upstream_error"` (found and entitled, but missing data needed to add it to a kit). Requires a Bearer token with `tk_platform` OAuth scope (via OAuth, or the `bearer_token` arg) — the same requirement as the library-add tool. Anonymous callers are refused with `error_code="not_authenticated"`; the same code is used if the token is missing the `tk_platform` scope, since that is an authentication problem, not an entitlement one. `error_code` is `null` on success. Other values: `invalid_input`, `not_entitled`, `not_found`, `upstream_error`. If kit creation succeeds but publishing fails, the response still includes the created (unpublished) `kit.id` so the caller isn't left with an invisible orphaned kit. Suite-wide error contract, with one intentional exception: `error_code`, when non-null, is always one of the canonical codes shared by every tool in this server (invalid_input, not_found, forbidden, not_authenticated, not_entitled, upstream_error, upstream_timeout, response_too_large). Unlike the six failure-only read tools (details/styles/similar/recommendations/search/preview), which only carry `user_message` alongside `error_code` on a *failure*, this tool's response is a combined success/failure envelope — `user_message` is the human-readable outcome on *every* call, success included, not just failures. **Not safe to blindly retry on a network-level failure** (timeout, dropped connection): the kit may have already been created before the response was lost, and there is no confirmed idempotency-key support, so a naive retry risks creating a second, duplicate kit. It is recoverable (list the caller's kits and delete the extra), but on this specific failure mode the response carries no `kit.id` to identify which one is the duplicate without listing first — check fonts.adobe.com before retrying.
font_create_kit
Create an AI-generated highlight reel from a video by automatically selecting the most engaging moments. WHEN TO USE: "create highlights", "make a highlight reel", "quick cut", "summarize this video", "pick the best parts". NOT SUPPORTED (explain limitation to user): - Content-aware cutting based on speech analysis ("remove rambling", "cut where they repeat themselves") - Semantic understanding of what's being said - Trimming based on specific words or topics NOTES: Uses visual engagement metrics, not speech/content analysis. For content-based editing, suggest manual trimming or professional video editing software.
video_create_quick_cut
Export an InDesign document (.indd or .idml) as PDF, JPEG, or PNG with page range and resolution control. WHEN TO USE: "export InDesign", "publish this InDesign layout", "InDesign to PDF", "render INDD as JPEG", "convert InDesign file". INPUT: Requires an .indd or .idml source file URL.
document_render_layout
**Choosing the image to edit:** pick the source image URL by the first rule that applies — if the user uploaded a new image with this request (a new conversation, or a switch to a different image to edit), use that uploaded image's URL; otherwise, if the previous tool returned an image output, use that output URL; otherwise, read the latest context and use `currentInputImage`, the flattened current image (when multiple contexts are present, use the one with the most recent `updateTimestamp`); otherwise, fall back to the last known image URL. **After editing:** once this tool returns an edited image, you MUST call `interactive_image_edit_preview` with that output URL to display the result to the user. Smart crop and resize with subject-aware positioning. Automatically detects subjects and positions crops intelligently. **Preferred tool for tight subject / product / face crops** — uses server-side face/subject/prompt detection, which is far more reliable than estimating 0-1 bounds visually. If the user asks to "crop to only X", "tight crop on X", "isolate X", or frame any nameable subject, use this tool with fit: "extract" rather than image_crop_to_bounds. For geometric crops (halves, quarters, fixed percentages, letterbox bars) where no subject detection is needed, use image_crop_to_bounds directly. **Key capabilities:** - Crop to exact dimensions with subject-aware focus (face, upper_body, or custom point) - Focus on arbitrary objects by text prompt (e.g., "the red car", "the dog") - Crop to aspect ratio at source resolution ("16:9", "4:5", etc.) - Resize to a single dimension (proportional scaling) - Pad mode: fit entire image within target dimensions with transparent (PNG only) or white background (JPEG only) fill - Adjustable per-side margins around detected subjects (margin: 0.15 = 15% of subject size added to each side) - Custom alignment (rule of thirds, etc.) **align parameter** — controls where the focus point lands in the output frame (0=left/top, 0.5=center, 1=right/bottom). Only set the axis you want to shift; omit for centered crops. - "subject in the left third" → align: { x: 0.33 } - "subject in the right third" → align: { x: 0.67 } - "face in upper third" → align: { y: 0.33 } - "rule of thirds, upper-left" → align: { x: 0.33, y: 0.33 } - "leave space on the right for text" → align: { x: 0.3 } - "leave space above for a title" → align: { y: 0.6 } - "subject at the bottom" → align: { y: 0.75 } Values below 0.5 push the subject toward top-left; above 0.5 toward bottom-right. **Note:** align has no effect on an axis when the crop spans the full source dimension on that axis (e.g., cropping a landscape to portrait uses the full source height, so align.y cannot move the crop). When this happens, an "align_constrained" tradeoff is recorded in metadata. align may also be partially overridden to keep the detected subject visible in the crop. **Aspect compatibility & clipping:** `fit: "reframe"` cannot grow the crop; when source and target aspect differ sharply (portrait → landscape or vice versa) the subject **will** clip and no `focus`/`align`/`margin` can prevent it. On `focus: "subject"` the tool auto-retries with `focus: "face"` when the subject looks upright (tall bbox, a proxy for "person"); non-upright subjects (pets, produce, landscapes) skip this step. If still clipped (`visible_fraction < 0.7`), `onSubjectClipping` kicks in: `"expand"` (default — emits a `requires_expand_chain` tradeoff with pre-filled `image_generative_expand` args; baseline action is an extract crop) · `"extract"` (tight crop, may upscale) · `"pad"` (letterbox, no loss) · `"error"` (fail with guidance) · `"ignore"` (tradeoffs only). **`requires_expand_chain` tradeoff:** invoke the pre-filled `next_call` (image_generative_expand) exactly as given, then re-invoke image_crop_and_resize with the same arguments, replacing `imageURI` with the expand output URL. The baseline action returned alongside this tradeoff is an extract crop — usable as a fallback, but chaining yields the content-preserving result. Read `cause` to know which problem it is reporting: `"subject_clipping"` means the target aspect cuts the subject and the chain is the fix; `"heavy_padding"` means pad kept every pixel but `fill_fraction` of the canvas is image and the rest is bars — follow the chain for a filled frame, or report the padded output as-is if letterboxing is what the user asked for. On `"heavy_padding"`, `severity` says how much this matters: `"severe"` (over half the canvas is bars) should not be delivered as a finished asset unless bars were requested, `"moderate"` (15–50%) is worth raising with the user, `"minor"` (under 15%) is usually fine to deliver as-is. `importantNote` repeats this guidance for every case except `"minor"`. **`recommend_visual_verify` tradeoff:** the single-region anchor may have clipped content a human would consider essential (most commonly headline text on ads/posters/banners). Call `adobe_inline_preview` on the output. If text, logos, or a secondary region appear clipped, retry with the `suggested_retry` parameters (biasing `align` toward the clipped edge) or with `focus: 'prompt'` naming the clipped content. This signal fires on a geometric heuristic, not content detection, so false positives are expected on pure-photo inputs. **Intent → parameter mapping (use this to pick the right parameters):** - "crop to X" / "isolate X" / "extract just X" / "only the X" → fit: "extract", omit output, margin: 0.02 - "crop around X" / "frame X nicely" → fit: "extract", output: aspect ratio, margin: 0.1–0.2 - "crop for X" / "X in frame" / social media crop → fit: "reframe", output: dimensions, focus on X - "resize for social media" / "make it fit Instagram/TikTok/X" / cross-aspect conversion from one source → use defaults. `onSubjectClipping: "expand"` (default) emits a `requires_expand_chain` tradeoff when the source/target aspects differ sharply; follow the pre-filled `next_call` → `then_retry` sequence to preserve all content. - "chest up" / "waist up" / "from the shoulders" → fit: "extract", focus: "upper_body", margin: 0.02. Works for both single-person and group photos. - "head and hair" / "above the shoulders" / "keep the whole head" / "don't cut off hair/ears" → fit: "extract", focus: "head", margin: 0.05–0.1 **fit modes:** - **"reframe"** (default) — takes the largest possible crop at the target aspect ratio from the source, then positions it using focus/align. Preserves as much of the image as possible. Use for social media crops, aspect ratio changes, and general-purpose resizing where you want broad scene context with the subject kept in frame. - **"extract"** — crops tightly to the detected region (face, upper_body, subject, or prompt match) + margin, then resizes to output if specified. **Important: setting output expands the crop to fit the target aspect ratio, which may pull in content beyond the detected region.** For tight isolation, omit output — the crop auto-sizes to the detected region + margin at source resolution, giving the tightest possible crop around the focus target. Use extract for: headshots, product close-ups, isolating a specific person or object from a group. - **"pad"** — scales the entire image to fit inside the target dimensions without cropping, fills remaining space with transparent (PNG) or white (JPEG) background. Nothing is clipped, but a large aspect gap leaves most of the canvas empty: a 2:3 source into 16:9 puts a 450×675 image in a 1200×675 frame. Whenever the source and target aspects differ, the response carries a `requires_expand_chain` tradeoff with `cause: "heavy_padding"`, the measured `fill_fraction`, and a `severity` of `"severe"` / `"moderate"` / `"minor"` — check `severity` before deciding whether to deliver the padded output or follow the chain. **focus values for people:** - **"subject"** — detects the full body. In reframe: keeps the whole person in frame. In extract: crops to the full body. - **"face"** — detects only the face region (jawline up, no hair or ears). Best with extract mode for headshots and passport photos. In reframe: centers the crop on the face but the crop is still wide. Use margin to control how much beyond the face to include (e.g., margin: { bottom: 1.5 } extends 1.5× face height below). - **"head"** — detects the whole head above the neck: face + beard + hair + ears. Tighter than "upper_body", wider than "face". Use when hair or ears must stay in frame (big hair, hats, earrings, profile shots) without including shoulders. The crop centers on the face; margin extends outward from the head bounds. - **"upper_body"** — detects head + hair + torso + hands as a combined region. Best with extract mode for chest-up portraits and profile photos. Works for both single-person and group photos — in groups, crops to the chest-up region of all detected people. **focus: { prompt }** — for non-human objects, specific items among many, or when you need to name what to focus on (e.g., "the red car", "the golden retriever", "the flowers"). Unions all matching objects — { prompt: "the cats" } will frame all cats, not just one. **When to use reframe (default):** - Resize images to a target resolution - Crop images to social media dimensions (Instagram square, Twitter header, etc.) - Broad scene crops that keep faces/subjects visible - Crop around specific objects by description (prompt focus) **When to use extract (with output — framed crop):** - Headshots, passport photos, profile pictures (face or upper_body focus + aspect ratio) - Product photos cropped to a specific format **When to use extract (without output — tight isolation):** - Isolating a specific person from a group photo ("crop to the middle person") - Extracting just one object from a busy scene ("just the dog", "only the red car") - Product cutouts from wider shots - Any request implying "only", "just", or "isolate" **When to use pad:** - Letterbox/pillarbox when content must not be cropped **NOT supported** (do not attempt — no parameters exist for these): - Circle or shape crops — only rectangular crops - Blurred background fill — pad mode uses solid color (transparent for PNG, white for JPEG) - Color adjustments, filters, or effects — use dedicated editing tools instead - Batch/multi-image crop in one call — call this tool once per image **Common social media dimensions:** - 1080x1350 for Instagram post portrait (4:5) — most common crop - 1080x1080 for Instagram post (square) - 1080x1920 for Instagram/TikTok story (9:16 vertical) - 1200x675 for X (Twitter) post - 1280x720 for YouTube thumbnail - 1200x630 for Facebook post Examples: <example> Resize to 800px wide, maintain aspect ratio: { output: { width: 800 } } </example> <example> Crop to Instagram square, focus on face: { output: { width: 1080, height: 1080 }, focus: "face" } </example> <example> Crop to 16:9 at source resolution: { output: "16:9" } </example> <example> Crop with face in left third: { output: { width: 1280, height: 720 }, focus: "face", align: { x: 0.33 } } </example> <example> Pad to IG story with transparent or white background: { output: { width: 1080, height: 1920 }, fit: "pad" } </example> <example> Crop to 4:5 with 30% total breathing room around subject (15% per side): { output: "4:5", focus: "subject", margin: 0.15 } </example> <example> IG portrait, leave space above for text: { output: { width: 1080, height: 1350 }, focus: "subject", align: { y: 0.6 } } </example> <example> Place subject in the right third: { output: { width: 1500, height: 1350 }, focus: "subject", align: { x: 0.66 } } </example> <example> Square crop around the dog: { output: { width: 1080, height: 1080 }, focus: { prompt: "the dog" } } </example> <example> Crop to 16:9 focused on the red car: { output: "16:9", focus: { prompt: "the red car" } } </example> <example> Crop around the flowers with breathing room: { output: { width: 1200, height: 630 }, focus: { prompt: "the flowers" }, margin: 0.2 } </example> <example> Product on the left, space for text on right: { output: { width: 1200, height: 675 }, focus: { prompt: "the sneaker" }, align: { x: 0.3 } } </example> <example> Extra space below subject for caption: { output: { width: 1080, height: 1080 }, focus: "subject", margin: { bottom: 0.3 } } </example> <example> More headroom above face, tight sides: { fit: "extract", output: "4:5", focus: "face", margin: { top: 0.5, left: 0.3, right: 0.3 } } </example> <example> Passport photo (head + shoulders, square): { fit: "extract", output: "1:1", focus: "face", margin: { top: 0.3, bottom: 1.5, left: 0.8, right: 0.8 } } </example> <example> Professional headshot (chest up): { fit: "extract", output: "4:5", focus: "upper_body" } </example> <example> LinkedIn profile photo (upper body, square): { fit: "extract", output: { width: 800, height: 800 }, focus: "upper_body", margin: 0.1 } </example> <example> Group photo chest-up crop: { fit: "extract", focus: "upper_body", margin: 0.02 } </example> <example> Isolate the middle person from a group photo: { fit: "extract", focus: { prompt: "the middle person" }, margin: 0.02 } </example> <example> Crop to just the dog: { fit: "extract", focus: { prompt: "the dog" }, margin: 0.02 } </example> <example> Extract the cat tightly (auto-sized from detection): { fit: "extract", focus: { prompt: "the cat" } } </example> <example> Extract subject with breathing room (auto-sized): { fit: "extract", focus: "subject", margin: 0.2 } </example> **Fallback to image_crop_to_bounds if available:** - **Detection miss (silent):** preview shows wrong region, empty match (`prompt_no_match` tradeoff), or subject in an unexpected position → switch to image_crop_to_bounds with explicit 0-1 coordinates. Legitimate use of geometric bounds — the subject is already visually located in the preview. - **Hard error:** retry once. If it still fails with a detection error (no match), fall back to image_crop_to_bounds. If it's infrastructural (auth, rate limit, unsupported format), surface to the user. - **When falling back for a subject crop, pad the bounds by 5–8% outward (not inward).** Visual estimates of a subject's extent tend to clip limbs / edges; a little extra background is imperceptible, a clipped hand or ear is not. This is the opposite of image_crop_to_bounds' border-removal guidance — for borders you overshoot inward; for subjects you overshoot outward.
image_crop_and_resize
**Choosing the image to edit:** pick the source image URL by the first rule that applies — if the user uploaded a new image with this request (a new conversation, or a switch to a different image to edit), use that uploaded image's URL; otherwise, if the previous tool returned an image output, use that output URL; otherwise, read the latest context and use `currentInputImage`, the flattened current image (when multiple contexts are present, use the one with the most recent `updateTimestamp`); otherwise, fall back to the last known image URL. **After editing:** once this tool returns an edited image, you MUST call `interactive_image_edit_preview` with that output URL to display the result to the user. **PREREQUISITE: call asset_inline_preview or read_image (whichever is available) on the input image first.** Choosing bounds without a current visual can clip subjects, miss borders or crop the wrong region. If the only information you have is the filename or a description, you do NOT have enough grounding; preview first, then choose bounds from what you see. Crop images to exact geometric bounds using normalized coordinates (0-1). Each coordinate is a fraction of the image dimension: 0 = top/left edge, 1 = bottom/right edge. The same normalized bounds are applied to every image — since coordinates are relative, images of different sizes produce proportionally equivalent crops. **Use ONLY for geometric / compositional crops** where the region is specified by position, not by subject: - "the left half", "center 50%", "top-right quarter" - "remove 10% from all edges", "trim the black letterbox bars" - "16:9 letterbox from the center" - Fast, deterministic crops with no detection overhead needed. **Do NOT use this tool as the first choice for subject / product / face crops** — even if you can see the subject clearly. Visual coordinate estimation is unreliable for tight framing and frequently leaves empty regions on one side or clips the subject on the other (a recurring failure mode). For any of these, use image_crop_and_resize first: - "crop to only the product", "crop to the tube / bottle / box", "isolate X", "just the dog" → image_crop_and_resize with fit: "extract" + focus + margin - "crop this to 16:9 keeping the subject in frame", social media crops with a subject → image_crop_and_resize with default fit: "reframe" + focus - Any request to frame a nameable subject — server-side face/subject/prompt detection is far more reliable than eyeballing 0-1 coordinates from a preview. - **Decorative frame / ornate border / rotated-subject-on-background** (e.g. a framed document, certificate, photo on a desk, scanned paper that isn't axis-aligned): the inner content is a subject, not a geometric crop — the frame edges don't align with the image edges. Use image_crop_and_resize with fit: "extract" and focus: { prompt: "<the subject>" }. **Use this tool as a fallback when image_crop_and_resize detection misses** (empty match, wrong region, or subject in an unexpected position). In that case the subject is already visually located in the preview, so explicit coordinates are the right escape hatch — pad bounds by 5–8% outward around the subject to avoid clipping limbs / edges that are easy to under-estimate visually. **Border / letterbox / frame removal — overshoot, single call.** Rule: if the visible border is V% on a side, set the inner bound to **at least V + 5** on that side. Never equal, never less. Measure each side independently — for asymmetric frames (e.g. Polaroid with a thicker bottom), do NOT default to symmetric bounds. If a sliver survives, jump by another 5–10% — do not nudge by 1%. After the call, follow the `importantNote` on the result to verify the output visually before reporting success. **Long-running batches:** A batch may take longer than a single call can wait. If the response is a single result with `status: "working"`, NO images are ready yet — call `image_get_task_status` with its `taskId` to collect them all at once. Do NOT call `image_crop_to_bounds` again, which would redo the work and bill for it twice. Examples (all geometric — no subject estimation): <example> Center 50%: { top: 0.25, left: 0.25, bottom: 0.75, right: 0.75 } </example> <example> Left half: { top: 0, left: 0, bottom: 1, right: 0.5 } </example> <example> Top-right quarter: { top: 0, left: 0.5, bottom: 0.5, right: 1 } </example> <example> Remove 10% from all edges: { top: 0.1, left: 0.1, bottom: 0.9, right: 0.9 } </example> <example> Thin border ≈3% per side, overshoot to 8%: { top: 0.08, left: 0.08, bottom: 0.92, right: 0.92 } </example> <example> Symmetric border ≈5% per side, overshoot to 10%: { top: 0.10, left: 0.10, bottom: 0.90, right: 0.90 } </example> <example> Asymmetric frame — 3% top/sides and 15% bottom, overshoot each side independently (8%/8%/20%/8%): { top: 0.08, left: 0.08, bottom: 0.80, right: 0.92 } </example> <example> Letterbox ~12% top/bottom, +5% overshoot: { top: 0.17, left: 0, bottom: 0.83, right: 1 } </example>
image_crop_to_bounds
Batch-produce multiple InDesign documents by merging CSV rows into an .indd template, then export as PNG, JPEG, or PDF. WHEN TO USE: "generate personalized documents", "data merge InDesign", "batch create from CSV", "variable data publishing", "merge data into template". NOTES: One output file per CSV row. Requires an InDesign subscription.
document_merge_data_layout
**Session handle:** each source image (`originalUploadedImage`) has its own `sessionId`, minted on demand — it is not one handle for the whole conversation. The **first** call for a given source image must pass `sessionId: -1`; wait for the `sessionId` it returns and reuse that value for every later call on that same image. When `originalUploadedImage` changes to a different image, pass `-1` again to start that image's session, and keep a per-image mapping so returning to an earlier image reuses its `sessionId`. Apply adjustments for brightness, contrast, hue, saturation, vibrance, exposure, color balance, or black and white conversion. These adjustments can be applied to an entire image or parts of the image by manually adjusting sliders in the widget. Based on the user's intent, configure specific parameter values for each adjustment or let them start at defaults for manual adjustment. **ROUTING — this widget owns every single-image request for tonal/color adjustments (exposure, contrast, hue/saturation, vibrance, color balance, B&W).** Count only the images this turn asks you to edit, not what the session holds. - **1 image this turn:** call THIS tool. Never ask widget-vs-server-side; never offer the direct tools (`image_apply_adjustments`). - **2+ images this turn:** NEVER this tool — no batch form; use those direct tools and do not mention this one. - **1-image exceptions, use those direct tools when:** the user explicitly asks you to do it for them ("just do it", "you pick") — an explicit ask only, never inferred from terseness, a stated value, or impatience. - **STOP after calling.** It renders its own result and returns no asset URL — no `asset_inline_preview`, `asset_preview_file`, `interactive_image_edit_preview`, or any next step. - **Non-generative** — never widens what generative editing is permitted. **DEFAULT IMAGE VIEWER:** For generic requests to open, view, show, or edit a file, image, or photo (including "in Photoshop") without a specific edit, call THIS tool with no `adjustments`. Do NOT use interactive_image_edit_preview for this — it only previews server-side tool results. **IMPORTANT:** This tool does NOT analyze the image or apply image-context-aware logic. Default values are fixed schema values (e.g., exposure: 0), not computed from image content. **HOW TO USE THIS TOOL:** 1. **Basic usage** - Display adjustments with default starting values: - Call with adjustments array: [{"id": "hueSat"}, {"id": "exposure"}] - All parameters start at their default values; user adjusts manually via sliders 2. **Advanced usage** - Pre-configure specific parameter values: - Call with adjustments array including params: [{"id": "hueSat", "params": {"hue": 15, "saturation": 20}}, {"id": "exposure", "params": {"exposure": 0.5}}] - Adjustment sliders will start at your specified values instead of defaults - **IMPORTANT: Only include parameters related to the user's intent** - omit other parameters that would stay at defaults 3. User can click on the settings icon on each image to reveal adjustment sliders for real-time refinement **MANDATORY PARAMETER DISCOVERY (ENFORCED):** If any entry in the adjustments array includes a params object, you must use correct parameter names and constraints for that adjustment. If you do not already have the specific details (parameter names, ranges, defaults) for the adjustment in question, call interactive_image_get_options_for_adjustments_app (no input) first to get them. When you receive results from interactive_image_get_options_for_adjustments_app, you MUST follow the "instruction" for each parameter when configuring adjustment parameters—the instruction describes valid ranges, units, and how to interpret values. **ENFORCEMENT RULES:** 1. For each adjustments[i].id where adjustments[i].params is present: a. Use specific details (parameter names, ranges, defaults) for the adjustment in question when you already have them; otherwise call interactive_image_get_options_for_adjustments_app (no input) to get all adjustments and their parameters b. All keys in adjustments[i].params must exactly match parameter names returned by interactive_image_get_options_for_adjustments_app c. All parameter values must meet the constraints provided by interactive_image_get_options_for_adjustments_app d. **ONLY include parameters that differ from their default values** - omit any parameter already at its default 2. If no params objects are provided, discovery is optional and the tool uses default starting values. **Note:** Omitting params is NOT a way to reset an adjustment back to default. To reset, explicitly provide the default values in params (call interactive_image_get_options_for_adjustments_app with no input to get defaults). 3. This discovery requirement applies to conceptual (e.g., "make the cat pink"), explicit (e.g., "set hue to +30"), and "auto"/"balance"/"fix" requests (e.g., "auto apply exposure", "balance the highlights") Rationale: Prevents guesswork about parameter names and ranges, ensures consistent behavior across schema changes, protects users from invalid configurations. **ADJUSTMENT SELECTION STRATEGY:** 1. VAGUE OR OPEN/VIEW REQUESTS (e.g., "apply adjustments") - Call this tool with no adjustments to show the default set of adjustments 2. SPECIFIC INTENT (descriptive, explicit names, "auto"/"balance"/"fix" requests, conceptual/visual, or numeric values) - Includes: "improve lighting", "enhance colors", "adjust exposure", "auto apply exposure", "auto balance the highlights", "fix the shadows", "balance the image" - **Color Changes** - Unless hue or saturation adjustments are explicitly requested: use InstructEditV5 Generative features for color or tone changes. - A request for an image to be black and white should be handled by the grey adjustment tool. - If you do not have the specific details (parameter names, ranges, defaults) for the adjustment in question, **call interactive_image_get_options_for_adjustments_app** (no input) to get them. Never assume parameter names or ranges. - **Selection:** For descriptive intent, select up to 5 relevant adjustments (lighting: exposure, brightness, contrast; colors: saturation, vibrance, hueSat). For explicit name or "auto X" requests, provide ONLY that adjustment in the array and suggest related ones in response text. - **Parameters:** Start with defaults unless the user specifies amounts. For conceptual/visual (e.g., "make cat pink", "warmer tones"), numeric (e.g., "set hue to +30"), or "auto"/"balance"/"fix" requests (e.g., "auto apply exposure", "balance the highlights"), configure reasonable starting values from discovered options - the tool does not compute values from image content. - **Response:** For configured values, acknowledge them in your reply (e.g., "I've set the hue to +30 and saturation to +40. The adjustment controls are now displayed - you can further refine these using the sliders if needed."). 3. MORE ADJUSTMENTS REQUEST (applies after any of the above) - User asks for more adjustments: pick additional adjustments based on image context and intent, without repeating any already shown, until all are shown or limit reached - Never repeat an adjustment unless the user explicitly requests it again **CONSTRAINTS:** - Maximum 5 adjustments per request - If user requests more than 5, suggest remaining adjustments in the tool response - DO NOT automatically make multiple tool calls for remaining adjustments - Always WAIT for explicit user confirmation before displaying additional batches - DO NOT use this tool to undo by passing an empty adjustments list. For undo, use the interactive_image_undo_edits_app tool instead **AVAILABLE ADJUSTMENTS:** When asked to list available adjustments, use only the adjustment name (not the ID), description, and recommended for fields. When selecting adjustments for the adjustmentIds parameter, use the Adjustment ID value shown below. Adjustment ID: brightnessContrast - Name: Brightness & contrast - Description: Changes the brightness and contrast of an image. - Recommended for: Any image. Adjustment ID: contrast - Name: Contrast - Description: Adjusts the overall intensity of colors. - Recommended for: Any color image with low contrast. Adjustment ID: exposure - Name: Exposure - Description: Brightens or darkens your image to make you properly lit and visible. Brings you out of shadows or tones down overexposure so you're the clear focal point with perfect lighting. - Recommended for: Making yourself stand out by fixing underexposure, bringing yourself out of dark shadows, ensuring you're properly lit and visible in photos, balancing lighting so you're prominent, making sure you're not lost in dim or overly bright areas Adjustment ID: gray - Name: Gray (Black / White) - Description: Converts your color image to black-and-white by desaturating it. - Recommended for: Any color image. Adjustment ID: highlightsShadows - Name: Highlights & Shadows - Description: Adjusts tonal highlights or shadows. - Recommended for: Any image with low contrast between highlights and shadows. Adjustment ID: hueSat - Name: Hue & saturation - Description: Changes the hue, saturation, and lightness of an image. - Recommended for: Any color image Adjustment ID: saturation - Name: Saturation - Description: Dramatically enhances color vibrancy to make you or your subject pop from the background. Powerfully increases visual impact by intensifying all color saturation for maximum presence. - Recommended for: Making yourself stand out in photos, dramatically emphasizing people and subjects in a scene, drawing maximum attention to the main subject, increasing visual presence and impact, making yourself the vibrant focal point of any image Adjustment ID: vibrance - Name: Vibrance - Description: Intelligently enhances color vibrancy to make you pop from the background while preserving natural skin tones. Selectively boosts muted colors for a flattering, eye-catching look. - Recommended for: Making yourself stand out in photos, portraits where you want to be the focal point, enhancing your presence without oversaturating skin tones, drawing attention to people in group shots, creating vibrant but natural-looking portraits Adjustment ID: whiteBalance - Name: White Balance - Description: Changes the color temperature and tint of an image, changing all colors in the image. - Recommended for: Any color image
interactive_image_apply_adjustments_app
Batch-produce multiple AI/PNG/SVG/JPEG/PDF files by merging CSV rows into an .ai template — e.g. personalized certificates, product labels, or localized assets. WHEN TO USE: "data merge Illustrator", "batch create certificates", "generate product labels from CSV", "variable data in Illustrator". NOTES: Requires an Illustrator subscription.
document_merge_data_vector
Export one or more Illustrator (.ai) files as PNG, JPEG, SVG, PDF, AI, or EPS with artboard and resolution control. WHEN TO USE: "export Illustrator file", "save .ai files as PNGs", "convert Illustrator to PDF", "render AI files", "export this Illustrator file as PNG", "Illustrator to PNG", "AI to JPEG". CRITICAL: When the user has uploaded an .ai file and asks to export/convert/render it, use THIS tool immediately. Do not open the file picker again. NOTES: Requires an Illustrator subscription.
document_render_vector
Export (download) an Adobe Express design as PDF. Use this tool when the user asks to download/export the current design. Notes: - Only PDF format is supported. - The tool returns pre-signed URLs for each exported page.
download_design
Edit an image using a natural language instruction. Powered by Adobe Firefly. WHEN TO USE: - Remove objects/text/logos/people from image ("remove the text", "remove the logo", "remove the person") - Add objects/elements to image ("add sunglasses", "add wings", "add text saying X") - Replace/change background ("change background to sunset", "studio backdrop") - Change color of SPECIFIC NAMED OBJECT ("make the car blue", "make shirt green") - Style transformations ("anime style", "cartoonize", "sketch effect", "make it look like a painting", "oil painting style", "Y2K style", "retro style", "80s style", "90s style", "vaporwave", "pop art") - Edit/change text in an image ("change the text to say X", "edit the text", "replace SALE with CLEARANCE") - Face/body modifications ("add makeup", "change hairstyle", "make them smile") - Retouching ("whiten teeth", "brighten eyes", "smooth skin") - Convert film negative to positive ("negative to positive", "invert negative") - Region-specific effects ("glitch the background", "blur only the sky", "add grain to the background") WHEN NOT TO USE: Global color adjustments -> use adjust_* tools. Exposure/brightness -> use image_adjust_exposure. Cropping/resizing -> use image_crop_and_resize. Background blur -> use image_apply_lens_blur. NEVER for watermark removal (copyright violation). NOT SUPPORTED (explain to user and suggest Photoshop): - Flip/mirror image horizontally or vertically - Rotate image by specific degrees - Geometric transformations (skew, warp, perspective) CRITICAL RULES: 1. This is the PRIMARY tool for any content modification. When in doubt, use this tool. 2. For text removal: ALWAYS use this tool, NOT image_fill_area (which just fills with color). 3. For style changes (anime, cartoon, sketch, Y2K, retro, etc.): ALWAYS use this tool on the uploaded image. 4. For retouching (teeth whitening, eye brightening): ALWAYS use this tool - it's simpler than select+adjust. 5. For region-specific effects ("X the background", "X only the Y"): use this tool - it understands regions. 6. If user mentions a style with an uploaded image, apply the style - don't ask for clarification. 7. For flip/rotate requests: explain this is not supported and suggest Photoshop. 8. For editing text in images: ALWAYS use this tool - it can read and modify text content. NOTES: Requires login.
image_instruct_edit
Separate audio from a video or audio file into three isolated tracks: cleaned-up speech, background music/ambient sound, and reverb.
media_enhance_speech
Exports an InDesign (.indd) document to IDML format for document structure analysis. WHEN TO USE: When a presigned .indd URL needs to be analyzed for frame layout and field mapping before creating placeholders. WHEN NOT TO USE: For publishing or rendering the document as PDF/image. Returns a presigned IDML download URL.
export_idml
**Choosing the image to edit:** pick the source image URL by the first rule that applies — if the user uploaded a new image with this request (a new conversation, or a switch to a different image to edit), use that uploaded image's URL; otherwise, if the previous tool returned an image output, use that output URL; otherwise, read the latest context and use `currentInputImage`, the flattened current image (when multiple contexts are present, use the one with the most recent `updateTimestamp`); otherwise, fall back to the last known image URL. **After editing:** once this tool returns an edited image, you MUST call `interactive_image_edit_preview` with that output URL to display the result to the user. **Reusing a mask (only when the editing context with `actionHistory` is available):** the user can edit or remove masks in the editor, so a mask URL you passed earlier may be stale — the context's `actionHistory` lists each edit with its current mask. To carry a mask forward from an earlier edit, find that edit's most recent entry and pass its `mask.maskURI`, not the URL you originally passed; `isMaskUpdated` means the user edited it, so keep `maskDescription` / `toBeInverted` unchanged. If the entry has `userRemovedMaskURI` instead of `maskURI`, the user removed that mask: don't reuse it — call a selection tool if the request still targets that region, and pass `userRemovedMaskURI` only if the user explicitly asks for that mask again. To use the original AI selection instead of the user's edit, or after a crop, expand, straighten or undo-all, call a selection tool again. Use the attached context when present; call `interactive_image_get_context` only when none is attached. Fills a masked area of the image with a solid color at a specified opacity. The mask's white pixels are filled; black pixels are preserved. WHEN TO USE: filling a specific masked region (not the whole background-behind-the-subject) with a solid color. Typical cases: a sub-region selected by prompt (e.g. "the sky", "the wall"), a user-supplied mask, a region from `image_select_by_prompt`, or compositing flat color into part of a layout. WHEN NOT TO USE: replacing the entire background behind a subject with a solid color — however phrased (e.g. "fill the background with green", "make the background white", "give it a red background", "put a solid <color> behind the subject"). Use `image_remove_background` with `options.backgroundColor` instead (single call) — it detects the subject and composites it onto the color in one step. Do not use a generative tool such as `image_instruct_edit` for this, and do not chain `image_select_subject` → `image_invert_selection` → this tool — either mistake fills the subject instead of the background. Do not feed the transparent PNG output of `image_remove_background` into this tool as a mask — it has alpha, not black/white mask semantics, and will produce wrong polarity. **Long-running batches:** A batch may take longer than a single call can wait. If the response is a single result with `status: "working"`, NO images are ready yet — call `image_get_task_status` with its `taskId` to collect them all at once. Do NOT call `image_fill_area` again, which would redo the work and bill for it twice. Examples: <example> Create solid white fill layer: { preset: 'white' } </example> <example> Create 50% opacity white fill layer: { preset: 'white', opacity: 50 } </example> <example> Create custom RGB color fill layer: { color: { red: 255, green: 128, blue: 0 }, opacity: 75 } </example> <example> Create gray fill layer with multiply blend mode: { preset: 'gray', blendMode: 'multiply' } </example>
image_fill_area
Fill placeholder text fields in an Adobe Express design template with specific content. WHEN TO USE: "put my company name here", "add the date to this invite", "update the headline" - ONLY when working with an Express design template (from search_design). WHEN NOT TO USE: - Only works on Express designs opened via search_design LIMITATIONS: Replaces text content ONLY. Does NOT support: font color, font size, font family, bold/italic styling, or text alignment changes.
fill_text
Completes a block upload and creates the file asset after chunk transfer finishes. **What this tool does:** Sends the completed transfer document to RAPI to confirm all blocks were received and create the asset. Handles asynchronous finalization automatically (polls the monitor URL until the asset is ready). **When to call this:** After all blocks have been successfully PUT to their block transfer URLs from `asset_initialize_file_upload`. Pass the `transfer_document` from init, updated so `_links["http://ns.adobe.com/adobecloud/rel/block/transfer"]` lists only the block links you actually used (same objects or `{ href }` entries). Keep the finalize link from the init response. Optionally set `repo:md5` for integrity verification. **Returns:** - `assets`: array containing the created asset (currently one asset per finalized upload) - Each asset includes ID, name, media type, and presigned URLs when available **Important:** - This is a mutating operation and should be called once per initialized upload session - For retries after uncertain network failures, expect backend conflict handling (for example filename renaming)
asset_finalize_file_upload
Look up authoritative Adobe Fonts metadata for one or more fonts — text only, no image; this does not show what a font looks like — if a font-preview tool is available on this surface, use it instead for a visual specimen (its own docstring links back here for the reverse case). Args: font_identifiers: Fonts to look up. Each requires postscript_name; font_id is optional. The lookup has no combined-key mode — it resolves by exactly one identifier per request — so when both are given, font_id is tried first (it's the more precise identifier when valid), and postscript_name is tried as a fallback only if that specific font_id lookup fails. Either one resolving is enough; they are not cross-validated against each other, so if both are given and disagree, the result silently reflects whichever one succeeded — check the returned resolved_via if you need to know which. A malformed postscript_name is only rejected as invalid_input when font_id is absent; when font_id is present, a malformed postscript_name is simply not attempted as a fallback candidate — no error is raised about it specifically, so a failure in that case doesn't distinguish "font_id failed, postscript_name was fine but didn't match" from "font_id failed, postscript_name was malformed and never tried." postscript_name must match exactly, including case — this lookup does not fuzzy-match or case-normalize (e.g. "myriadpro-regular" will not resolve "MyriadPro-Regular"). Use an exact value, such as one already returned by the font-recommendation tool, rather than guessing from a display name. locale: Language the returned font family/style names (and recommendation/search group names) are translated into, when a translation is available (default en_US). Hyphen, bare-code, and region-mismatched forms are all normalized to the closest supported locale (e.g. ja-JP and ja both become ja_JP; en_GB becomes en_US); an unsupported value falls back to en_US rather than being rejected. See this server's MCP instructions for the list of supported locales. Returns: JSON string with a `results` list, one entry per requested font, in the same order as the input. Each entry is either resolved metadata (family_name, style_name, full_name, designers, foundry, detail_url, preview_url, language_support, library_availability, weight, style, is_variable_font, axes, resolved_via, requested, and a font_identifier or bare postscript_name) or {"postscript_name": ..., "error_code": "<code>", "user_message": "...", "requested": {...}} where error_code is one of invalid_input, not_found, upstream_error, upstream_timeout, and user_message is human-readable text safe to show the caller as-is. weight is the numeric OpenType weight class (e.g. 400, 700); the same class can look visually different across different families. style is "normal" or "italic". Use these rather than inferring boldness or slant from style_name or postscript_name text. is_variable_font is always present (true/false). axes is present exactly when is_variable_font is true (and only then) -- always a list, though it may be empty ([]) for a variable font that exposes no usable named instances -- a list of axis tags (e.g. ["wght", "wdth"]) this font exposes — tags only, deliberately no min/max/default. This tool has no access to the font's true axis range, so it doesn't claim numeric ranges it can't verify — only that these axes exist. Do not guess at or state a specific min/max/default for an axis from this tool's output. resolved_via is "font_id" or "postscript_name" — whichever identifier actually produced this result. When only one was supplied it's that one; when both were supplied it tells you which one decided the outcome, since they aren't cross-validated against each other. requested ({postscript_name, font_id — font_id present only if you supplied one}) is always present, on every entry, success or error, echoing exactly what you sent for that entry (not the resolved identity) — use it to match a result back to its request after filtering, reordering, or merging results downstream, rather than relying on array position or re-deriving it from the resolved fields, which only coincidentally match what was requested and don't when font_id resolved to a different font than the postscript_name you sent. font_identifier (rather than a bare postscript_name) appears whenever a font_id could be resolved for that font — including when the input only supplied postscript_name — so a bare-postscript_name lookup doubles as a postscript_name-to-font_id resolver. invalid_input includes a client-side format check against the standard PostScript name character set (letters, digits, ".", "_", "-", 1-255 chars) and never reaches the network — retrying with the same value won't help. not_found means the format was fine but no font matched it exactly. language_support lists language codes (BCP 47/IANA subtags, e.g. "ja", "zh-Latn-pinyin") for which this font's glyph coverage satisfies Adobe's curated minimum-codepoint-set definition of that language (deliberately excluding common punctuation) — not raw font cmap coverage or a marketing claim. A missing code means the font doesn't meet that minimum, not that Adobe Fonts lacks support for the language generally. upstream_error means the lookup itself failed with a hard error. upstream_timeout means the lookup hit a transient failure — a timeout, a connection error, or a 5xx — so retrying may succeed. If the user wants to see the font rather than only read about it, and a font-preview tool is available on this surface, pass the returned font_identifier as the one entry in a font_identifiers list to it to show an inline specimen — this tool only returns metadata text, never a rendered preview. If the user wants other weights, widths, or italics in the same family instead of (or in addition to) this exact font, and a font-styles tool is available on this surface, use it instead — this tool only returns the single font(s) requested, never sibling styles.
font_details
Look up every style variant (weights, widths, italics) in a font's family. Args: font_identifiers: Fonts whose family styles to look up. Each requires postscript_name; font_id is optional, with the same font_id-first, postscript_name-fallback resolution as the font-details tool (either one resolving is enough; they are not cross-validated against each other). postscript_name must match exactly, including case. locale: Language the returned font family/style names (and recommendation/search group names) are translated into, when a translation is available (default en_US). Hyphen, bare-code, and region-mismatched forms are all normalized to the closest supported locale (e.g. ja-JP and ja both become ja_JP; en_GB becomes en_US); an unsupported value falls back to en_US rather than being rejected. See this server's MCP instructions for the list of supported locales. Returns: JSON string with a `results` list, one entry per requested font, in the same order as the input. Each entry is either {"resolved_via": "font_id" | "postscript_name", "requested": {...}, "family": {"name", "slug", "foundry", "designers", "detail_url", "language_support"}, "styles": [{"postscript_name", "style_name", "full_name", "weight", "style", "font_id", "preview_url", "language_support", "library_availability", "is_variable_font", "axis_values"}, ...]} or {"postscript_name": ..., "error_code": "<code>", "user_message": "...", "requested": {...}} where error_code is one of invalid_input, not_found, forbidden, upstream_error, upstream_timeout, and user_message is human-readable text safe to show the caller as-is. There is no top-level font_identifier on a success entry — use `requested` (below) to match a result back to its input, or find the input font's own entry inside `styles` by matching postscript_name (its resolved font_id is there too). resolved_via tells you which identifier decided the outcome when both font_id and postscript_name were supplied, since they aren't cross-validated against each other — same meaning as the font-details tool's resolved_via. requested ({postscript_name, font_id — font_id present only if you supplied one}) is always present on every entry, echoing exactly what you sent — same field and meaning as the font-details tool's requested. The requested postscript_name may not even appear in `styles` if font_id resolved to an unrelated family. family.language_support is present only when every style in the family shares the same language_support; a style then only carries its own language_support when its languages differ from that shared value. When styles disagree, family has no language_support at all and every style carries its own explicitly — there is no majority-vote default, so never assume a missing per-style language_support means it matches the family's unless family.language_support is actually present. invalid_input / not_found follow the font-details tool's exact semantics (same client-side format check; same "the font itself doesn't exist" meaning). forbidden means the font itself resolved fine but its family's style list is restricted for anonymous access — distinct from not_found. upstream_error means the lookup itself failed with a hard error. upstream_timeout means the lookup hit a transient failure — a timeout, a connection error, or a 5xx — so retrying may succeed. weight is the numeric OpenType weight class (e.g. 400, 700) — same field as the font-details tool — and the same class can look visually different across different families. is_variable_font (true/false) is present on every style — the same flag every font-returning tool exposes — so a variable style is never indistinguishable from a static one. axis_values (present only on a variable font's style, and only when that style's named instance carries concrete settings) is that specific named style's own variation-axis settings, e.g. {"wght": 400, "opsz": 12} — the exact values this style uses, not a min/max range (there's no reliable range data available; see the font-details tool's axes field for why). Where the font-level tools can only report axis tags (their `axes` field), this tool reports the actual per-instance values, so it gives axis_values instead of axes. If the user wants to see a specific style rather than only read about it, and a font-preview tool is available on this surface, pass that style's own font_identifier (from `styles`, not the input) to it to show an inline specimen — this tool only returns metadata text, never a rendered preview.
font_styles
Generate a NEW AI image from scratch using Adobe Firefly. WHEN TO USE: "generate an image of", "create a picture of", "create a product photo background", "imagine a scene", "text to image" - ONLY when NO image is uploaded in context. WHEN NOT TO USE: - If context shows an image is already uploaded -> use image_instruct_edit instead - Style requests with uploaded image ("anime style", "make it look like X") -> use image_instruct_edit - For flyers/posters/banners -> use design_search (Adobe Express templates) CRITICAL: Check context first! If user already uploaded an image and asks for a style, use image_instruct_edit to transform it - don't generate a new image. NOTES: Requires login. Uses Firefly credits. USAGE: Parameter constraints (mutually exclusive): - aspectRatio: Use for general terms ("portrait" -> "3:4", "landscape" -> "4:3", "widescreen" -> "16:9") - size: Use for exact pixel dimensions (e.g., "2688x1536"). Cannot combine with aspectRatio. - referenceImage: Provide URL to guide style/composition. Cannot combine with aspectRatio or size. If no dimension specified, omit aspectRatio (service uses default).
image_generate
Expand an image by adding content around it. Generates seamless context-aware borders without altering the original content. WHEN TO USE: "expand this image", "extend the canvas", "add more space", "make it wider", "add sky above", "outpaint", "extend in [direction]". WHEN NOT TO USE: For resizing/scaling existing content -> use image_crop_and_resize. For upscaling/super-resolution -> not available. **Requirements:** - Dimensions: If missing, retrieve via a dimension tool; if unavailable, infer from context/URL or ask the user. - Inset: Specify direction(s) for expansion. For horizontal/vertical expansion, distribute insets evenly. Examples: - Expand landscape images to make them wider: { width: 1200, height: 800, inset: { left: 200, right: 200 } } - Add sky space above portrait images: { width: 800, height: 1200, inset: { top: 300 } } - Create panoramic effect by extending images on all sides: { width: 1000, height: 750, inset: { top: 100, right: 200, bottom: 100, left: 200 } }
image_generative_expand
Resolve presigned S3 URLs for Lightroom/ACP assets by id. Fallback for when you have an asset id but no auth-free renditionURL — asset_search results already include auth-free renditionURLs, so use those directly. Pass the full array of LR/ACP assets — all are resolved in parallel in one call. WHEN TO USE: When you have a Lightroom or CCAsset id but no auth-free renditionURL (e.g. not from asset_search, or resolution failed) and need a usable URL for asset_preview_file, asset_inline_preview, or an edit tool. WHEN NOT TO USE: For StockAsset results — renditionURL is a public CDN URL, safe to use directly. For assets loaded via the file picker — presignedAssetUrl is already resolved. INPUT: assets array — each item needs id and sourceType from search results. Include renditionUrl and mediaType if present. OUTPUT: assets array in the same order as input — each item has id, renditionUrl, downloadUrl, previewUrl. Always use previewUrl for asset_preview_file, asset_inline_preview, and edit tool inputs. Items where resolution failed have null URLs. EXAMPLE: asset_get_presigned_urls({ assets: [ { id: "<id>", sourceType: "lightroom", renditionUrl: "<renditionURL from search>" }, { id: "<id>", sourceType: "acp", renditionUrl: "<renditionURL from search>" } ] }) → { assets: [{ id, renditionUrl, downloadUrl, previewUrl }, ...] }
asset_get_presigned_urls
Generates structured instructions for creating a CSV-to-template field mapping for InDesign placeholders. WHEN TO USE: Before assigning CSV columns to template frames — use this to obtain mapping guidance for reasoning out field assignments. WHEN NOT TO USE: This tool does not modify any document or call InDesign — it only returns instructions for the model to reason out the mapping JSON. Returns a prompt string with mapping structure requirements.
generate_indd_mapping_prompt
Internal helper: resolves presigned S3 URLs for one or more Lightroom assets via the Oz direct_links API. Returns presignedRenditionUrl (best available rendition) and presignedAssetUrl (master file) for each asset.
asset_lr_get_presigned_url
Retrieve all available adjustments and their configurable parameters. Call this tool when you need to know what adjustments exist and how to configure them (e.g. parameter names, types, defaults, min/max). **WHEN TO USE THIS TOOL:** Call this tool to get the full list of available adjustments and their configurable parameters before suggesting or applying adjustments.
interactive_image_get_options_for_adjustments_app
Retrieves presigned download URLs for PNG renditions of Adobe Creative Cloud assets. WHEN TO USE: "give me a download link", "get download URL" — only when context has a URN (urn:aaid:...) and no presigned URL is available. WHEN NOT TO USE: - If context already has a presigned URL (https://cc-api-storage.adobe.io/... or similar), use that URL directly.
asset_get_presigned_url
Return video metadata — width, height, fps, and duration in seconds — for a Walnut video asset.
video_metadata
Adobe ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Adobe's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Adobe alternatives on ChatGPT?
As of 2026-10-16, Adobe competes with Algorithmic Ink, Collage Easy, Immopix, Photo Metadata Remover in ChatGPT Photo & Image Editing, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.