MCP App Store
Adobe (formerly Photoshop) icon

Adobe (formerly Photoshop)

by Adobe Inc

Overview

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.

Tools

adobe_mandatory_init

ChatGPT
CALL ONCE per chat session before using any adobe tool (animate_design, asset_copy_assets, asset_create_folders, asset_download_file, asset_get_brand, asset_get_brand_elements, asset_get_brand_groups, asset_get_mime_type, asset_get_presigned_url, asset_inline_preview, asset_invite_collaborators, asset_list_brands, asset_list_collaborators, asset_lr_get_presigned_url, asset_openai_file_upload, asset_resolve_short_url, asset_search, asset_share_link, 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, generate_indd_mapping_prompt, image_add_grain, image_add_noise, image_apply_adjustments, image_apply_auto_tone, image_apply_color_overlay, image_apply_gaussian_blur, image_apply_glitch_effect, image_apply_halftone, image_apply_lens_blur, image_apply_monochromatic_tint, image_apply_preset, image_auto_straighten, image_crop_and_resize, image_crop_to_bounds, image_fill_area, image_generate, image_generative_expand, image_instruct_edit, image_invert_selection, image_list_presets, image_remove_background, image_remove_blemishes, image_select_by_prompt, image_select_subject, image_vectorize, markdown_to_pdf, media_enhance_speech, media_summarize, pdf_compress, pdf_create, pdf_export, pdf_ocr, pdf_operation_status, pdf_properties, pdf_to_image, pdf_to_markdown, 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.

animate_design

ChatGPT
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.

asset_copy_assets

ChatGPT
Copy one or more assets within Creative Cloud storage. WHEN TO USE: "copy this to another folder", "duplicate asset", "copy to project".

asset_create_folders

ChatGPT
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 creating Libraries -> use asset_create_library. For creating Projects -> use asset_create_project. For uploading files -> use asset_openai_file_upload. 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., "Projects/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 (URN), folder name (may differ from input if renamed due to conflict), and creation metadata.

asset_get_brand

ChatGPT
Retrieves detailed metadata for a single Brand by its unique identifier. Fetches complete metadata including name, description, copy guidelines, ownership info, timestamps, and organizational context. WHEN TO USE: Retrieve full details about a specific brand when you have its ID. Verify a brand exists before update/delete. Get brand copy guidelines for content generation. WHEN NOT TO USE: To get brand elements (logos, colors, fonts, guidelines) → use asset_get_brand_elements instead. Returned data: id, name, description, version, tags, copy guidelines, createDate, modifyDate, owner details, organizationId.

asset_get_brand_elements

ChatGPT
Retrieve brand elements by type (elementType) or by specific IDs (elementIds). Note: Brand contents can change at any time outside this conversation. Always call this tool fresh — do not rely on results from earlier in the conversation. elementType values: - fonts — the brand's typefaces - colors — individual brand colors - color_themes — multi-color palettes - logos — logo assets; each element's roles array includes a priority field ("primary", "secondary", "accent") identifying which logo is the primary brand mark - graphics — graphic image assets - channel_guidelines — guidelines for brands applied per channel e.g. email, tiktok etc. - image_guidelines — guidelines for images per category e.g. mood, restrictions etc. - gradients — brand gradient assets When to use this tool: - Retrieve the fonts, colors, color themes, logos, or channel and image guidelines associated with a Brand - Get specific element types when building brand-compliant creative work - Audit which visual assets are part of a Brand's identity - Review elements just created — collect id values from create_brand_* responses, then call with elementIds to summarize what was added Using visual assets: For logo, graphic, and font elements, each element may include presignedAssetUrl and presignedRenditionUrl. - presignedRenditionUrl is the preferred URL for a displayable image preview. If it is absent, fall back to presignedAssetUrl. - Codex desktop: immediately curl -L each asset/thumbnail URL to the workspace and render the local files in chat before responding. Do not tell the user assets are shown above. - Other non-MCP-App chat surfaces: fetch with a native HTTP tool that follows redirects (e.g. curl -L -o <workspace_dir>/<name>.png "<presignedRenditionUrl>"), then display the downloaded image using native file/image tools. - Use preview or render tools only in UI-capable environments where those tools are explicitly available and appropriate. Color, color theme, and gradient elements do not provide visual asset URLs — render these natively in your response (e.g. color swatches as inline HTML/CSS colored blocks, gradient previews as styled elements). Do not call any other Adobe preview tool for these element types. Guideline elements also have no visual asset URLs. When NOT to use this tool: - To find brands by name → use asset_list_brands - To find the brands voice guidelines -> use asset_get_brand Pagination: Results are paginated with limit (default 20) and offset parameters. Omit limit to use the default of 20. A limit of up to 100 is available when you need to minimise round-trips. A full page (exactly limit results) means there are more — fetch the next page by incrementing offset by limit. Stop when a page returns fewer results than limit. If the page is full, let the user know there may be more results available. Sorting: Use sortOrderBy to choose the sort field: modifyDate (default), createDate, or name. Use sortOrder to set direction: desc (default, newest/Z-A first) or asc (oldest/A-Z first). Response shaping: This tool returns two kinds of elements that are handled differently: - URL-based visual assets (logos, fonts, graphics) — NOT automatically displayed in any surface. Download and display them locally as described in the "Using visual assets" section above. - Non-URL visual assets (colors, color_themes, gradients) — no preview URLs exist; render these natively in your response without calling any Adobe preview tool. See the "Using visual assets" section above. - Text guidelines (channel_guidelines, image_guidelines) — NOT rendered as a gallery. The user cannot see them unless you write them out. Required response format: 1. If visual assets were returned: render them locally, then open with one short acknowledgment sentence. Do not say "above" or "here are" — just acknowledge. In Codex desktop do not say "above". 2. If guideline content was returned: present it in full — after the acknowledgment if visual assets we…

asset_get_brand_groups

ChatGPT
Lists all organizational groups in a Brand's library. When to use this tool: - Discover existing groups before creating new ones - Avoid creating duplicate groups with the same name When NOT to use this tool: - To create a new group → use create_brand_group - To retrieve brand elements → use get_brand_elements

asset_get_mime_type

ChatGPT
Internal helper for the preview file UI: fetches HTTP headers for a URL and returns the Mime-Type parsed from the Content-Type header.

asset_get_presigned_url

ChatGPT
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. - For sharing with others, collaboration links, or inviting people → use asset_share_link or asset_invite_collaborators instead.

asset_inline_preview

ChatGPT
Fetch image bytes from a presigned URL and return base64 content for direct model inspection and analysis. WHEN TO USE: - "describe what's in this image", "what does this image show", "analyze this image" - "compare these images", "which image is sharper/better" - Any request requiring the model to SEE and UNDERSTAND image contents WHEN NOT TO USE: To show/display an image to the user -> render the URL directly instead. CRITICAL: Use this tool when you need to describe, analyze, or compare image contents. INPUT: Presigned HTTPS URL (e.g., renditionURL from asset_search, or download URL from asset_download_firefly_generation). Optional size and jpegQuality parameters.

asset_invite_collaborators

ChatGPT
Single collaboration tool — resolves, confirms, and adds collaborators. Registered MCP tool name: asset_invite_collaborators. Adds one or more collaborators to an Adobe asset or project at a specified role (Viewer, Commenter, Editor, Manager, Consumer). Returns the result of the invite dispatch per recipient; use when the user wants to give specific people access to an asset or project. Not for changing an existing collaborator's role → use asset_update_collaborators. Do not use to share via link or to respond to a pending access request. Orchestrates: Asset metadata fetch for every entry People lookup for all names/emails in parallel Invite preparation (role + asset resolution) ConfirmationQuote validation that checks explicitly for human confirmation so don't just fake this. Dispatch via the Invitations Service Use this one tool for sharing assets with specific people or groups. Do not call separate invite preparation or invitee lookup tools; recipient lookup, ambiguity handling, backend validation, role substitution, and final confirmation all happen inside this tool. YOU MUST DO THIS: call this tool before asking the user to confirm invite details. The first call is the verification/preparation step and should omit confirmationQuote unless the user has already confirmed details returned by a previous asset_invite_collaborators response. Do not ask the user to confirm raw names, roles, or assets before this tool has verified them. If the user gave an asset name/title but no asset ID, first call asset_search with that name, then pass the selected result's id in entries[].assetId. Input shape: use entries, where each entry contains exactly one assetId and the recipients for that asset. This nested shape is intentional: it keeps each asset mapped to its own recipient list, role, and message so neither the model nor the backend has to infer relationships from parallel arrays. Recipients can be names, emails, or canonical identifiers. Every name is searched in People Graph server-side. When People Graph returns one or more results, this tool throws a ToolError showing the top result; present that person to the user for confirmation, then retry with the confirmed email address. Do not describe the query as ambiguous. If People Graph returns no result, the tool asks for more information. You can also accept some user ids adobeid:..., urn:ab:... as well to identify the users. WARNING: before any invitation API call, the user must explicitly confirm the exact invite details returned by this tool after verification. Pass their exact words in confirmationQuote only when they clearly confirm those tool-returned details with words like "yes", "proceed", "confirm", "go ahead", "send it", or "send the invite". Do not pass confirmationQuote for vague feedback or before the verification call. If the user says "no", "do not send", "wrong information", "wrong", "bad", "stop", or "exit", no invitation is sent. If confirmationQuote is missing, negative, unclear, or if asset/person details cannot be resolved, this tool throws a ToolError containing nextSteps shaped like inviteCollaboratorsResponseSchema. Relay those next steps to the user, then retry only after the user confirms all details. Batching — REQUIRED when the user lists multiple assets and/or recipients in one request: make exactly ONE asset_invite_collaborators call that contains every asset and every recipient the user mentioned. Do NOT loop and call this tool once per asset, once per person, or once per asset/person pair — that produces redundant elicitation prompts and breaks the single confirmation flow. Build entries so that: - Each distinct asset gets exactly one entry with its assetId. - Every recipient the user named for that asset goes into that entry's recipients array (one element per person, with their role and optional message). - If the user named the same set of people across several assets (e.g. "invite Deana, Michael, Ben, and Monica to BookCoverV1, ArtExV1, Electronic MusicV1, …"), repeat the same rec…

asset_list_brands

ChatGPT
Retrieves a paginated list of all Adobe Brands accessible to the authenticated user. WHEN TO USE: - Get an overview of all available brands in the account - Audit which brands exist before creating a new one - Paginate through brands for large enterprise accounts WHEN NOT TO USE: To get details of a specific brand → use get_brand with the brand ID Pagination: Results are paginated with limit (default 100) and offset parameters. For large accounts, iterate with increasing offset values until fewer results than limit are returned. Limitations: - Maximum recommended limit is 100 for optimal performance - Results include brands owned by user and brands shared with user

asset_list_collaborators

ChatGPT
Returns who has access to an Adobe asset or project: active collaborators and pending invitations in one merged list. Each row includes role, status, and whether the caller can remove or change that person's access. Child assets inside a project (e.g. a library in a project) may include additional rows from the parent project. Those rows have collaborationSource: 'project' and cannot be modified via asset-level sharing tools. When project details cannot be loaded, the response includes a note that the asset is also shared with parent project members. Querying a project directly lists its members as direct collaborators (collaborationSource: 'asset'). Use when the user asks who has access, who is on a project, or who was invited. Read-only. If the user gave an asset name/title but no asset ID, first call asset_search, then pass the selected result's id as assetId. When NOT to use this tool: - To invite specific people → use asset_invite_collaborators - To change an existing collaborator's role → use asset_update_collaborators - To get a shareable view link or change link access → use asset_share_link

asset_lr_get_presigned_url

ChatGPT
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_openai_file_upload

ChatGPT
Streams bytes from a URL provided by the 'fileParams' extension into Adobe Creative Cloud Files at the given path using Bartlebee (server-side; no client upload of raw bytes). Do not choose, invent, or add a destination folder/path. By default, upload files to the connector’s default Adobe destination. Only provide path when the user explicitly specifies an Adobe destination folder, upload path, or exact filename/path. When the user simply says “upload these files to Adobe,” omit path. Input: - files: array of file specifiers for upload. The schema of each entry adheres to the OpenAI 'fileParams' spec as documented below - path: optional directory path extending from the cloud-content/OpenAI root. Do not choose, invent, or add a destination folder/path. By default, upload files to the connector’s default Adobe destination. Only provide path when the user explicitly specifies an Adobe destination folder, upload path, or exact filename/path. When the user simply says “upload these files to Adobe,” omit path. File Specifiers The file specifiers use the openai/fileParams extension schema. Each entry must adhere to the following: - download_url: pre-signed or unauthenticated HTTP URL source for the input file - file_id: Stable ChatGPT file identifier (e.g. "file_...") - mime_type: MIME/media type for the incoming file - file_name: Original file name of the asset, when known. Must include extension (e.g. "document.pdf") Path behavior: - path is optional. It should not be provided unless the user makes a specific request to upload the assets to a specific folder. - path is interpreted relative to cloud-content/OpenAI. Do not include cloud-content/OpenAI as a prefix — it is added automatically. - If path is just a filename (e.g. "photo.jpg"), ignore it in favor of the file's file_name. - Any leading / will be trimmed from the path - If path includes a directory and name (e.g. "my-folder/photo.jpg"), truncate to just the directory - If path is a nested directory (e.g. photos/animals/dogs), the assets will be created at the end of the path (in dogs, citing the example). Returns: assets array with the created file (asset id, name, presigned download URL, etc.).

asset_resolve_short_url

ChatGPT
Internal helper for the preview file UI: follows a shortened URL redirect and returns the resolved long URL.

boards_add_items_to_board

ChatGPT
Add 1-12 images to an existing Firefly board. PREREQUISITE — board_id is required: - If you do NOT already have a boardId in context, FIRST call boards_create_new_board to get one, then call this tool with that board_id. Never invent or guess a board_id. - If you already have a valid boardId from earlier in this conversation, reuse it. ITEM TYPES — pick the lightest one the client can produce reliably: - presignedUrl : { type, urls: string[] } — time-limited https URLs the server fetches. PREFERRED. - generationUrn : { type, assetIds: string[] } — Firefly generation URNs (carry provenance). PREFERRED. - rawBlob : { type, bytesBase64, mimeType, width, height } — USE WITH CAUTION from chat/LLM clients: large base64 is often truncated and the call fails with a decode error. Each url / assetId expands to one image placement. Total placements across all entries must be 1-12. SVG / vector formats are not supported. INTERPRETING THE RESPONSE (do not retry on partial success): - HTTP 200: all images were added. Done. - HTTP 201: PARTIAL success — some added, some not. This is SUCCESS, not an error. failedItems[] lists ONLY the items that failed (logicalIndex, stage, errorCode, errorMessage ending in "(item: <id/url>)"). Re-send ONLY the failed items after fixing the named cause; never resend ones that already succeeded. - HTTP 422: NONE could be added (message inlines the first few failures). Fix inputs and retry. OTHER ERRORS (isError: true, body = { status, ...details }): - 400 invalid payload or >12 images; 401 auth; 404 board or asset not found (if the board_id is wrong or expired, create a new board and retry); 413 too large; 415 unsupported media type; 502 upstream fetch/persistence; 503 busy (retry shortly); 504 timeout. Fix the request for 400/401/404/415; a single retry is reasonable for 503/504. GUIDANCE: prefer presignedUrl / generationUrn over rawBlob. If a rawBlob call fails with a decode error, the image was likely truncated — upload it and retry with a URL/URN type.

boards_create_new_board

ChatGPT
Create a new Firefly board and return its boardId. WHEN TO CALL: - Call this whenever you do NOT already have a boardId in the current context. - The boardId it returns is REQUIRED by boards_add_items_to_board. Typical flow: 1) boards_create_new_board -> get boardId 2) boards_add_items_to_board(board_id = that boardId, items = [...]) - If you already have a valid boardId from earlier in this conversation, REUSE it instead of creating another board (don't create duplicates for the same task). INPUT: - doc_name (string, required): a human-readable name for the board (e.g. "Mood board", "Q3 launch"). ON SUCCESS: - Returns { boardId: "<urn>" }. Remember this boardId and pass it to boards_add_items_to_board. ON FAILURE (isError: true, body = { status, ...details }): - 400 : doc_name missing/empty — supply a non-empty name and retry. - 401 : auth missing/invalid — not user-correctable; surface the error. - 503 : service at capacity (body includes a retry hint) — wait briefly and retry once. - 504 : creation timed out — retry once; if it persists, surface the error. - 500 / 502 : upstream/worker failure — retry once, then surface the error. Do NOT retry 400/401 without changing the input/auth.

change_background_color

ChatGPT
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.

convert_pdf_to_indd

ChatGPT
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).

document_convert_pdf

ChatGPT
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_merge_data_layout

ChatGPT
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_vector

ChatGPT
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: Usually async — on status "working", call vectorPollingHelper(taskId). Requires an Illustrator subscription.

document_render_layout

ChatGPT
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_vector

ChatGPT
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.

download_design

ChatGPT
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.

enhanceSpeechPoll

ChatGPT
Poll the status of an asynchronous speech enhancement job started by media_enhance_speech. Pass the exact taskId returned by that tool. Returns status "working" (still processing — call again after ~15s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~30 minutes.

export_idml

ChatGPT
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.

fill_text

ChatGPT
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.

generate_indd_mapping_prompt

ChatGPT
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.

image_add_grain

ChatGPT
Add film grain texture to an image for a vintage or cinematic look. WHEN TO USE: "add grain", "film grain", "vintage grain", "make it grainy", "analog film look", "add texture". WHEN NOT TO USE: For digital noise/static effect -> use image_add_noise.

image_add_noise

ChatGPT
Add digital noise/static texture to an image for a gritty or distressed look. WHEN TO USE: "add noise", "gritty look", "add static", "distressed effect", "digital noise". WHEN NOT TO USE: For film/analog grain -> use image_add_grain.

image_apply_adjustments

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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. 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_auto_tone

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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.

image_apply_color_overlay

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Adds a colored overlay by creating a solid color fill layer with a specified RGB color, blend mode, and layer name. IMPORTANT: opacity cannot be set on this tool. If the request mentions any percentage or transparency (e.g. "at 20%", "at 80%", "semi-transparent"), do NOT call this tool — call image_fill_area instead, which has an opacity parameter. Use when: color overlay, color wash, tint filter, color layer on photo. 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. Examples: <example> Create a red color overlay (lighten blend mode): { "color": { "red": 205, "green": 3, "blue": 3 }, "blendMode": "lighten" } </example> <example> Create a blue color overlay (lighten blend mode): { "color": { "red": 3, "green": 45, "blue": 252 }, "blendMode": "lighten" } </example> <example> Create a purple color overlay (lighten blend mode): { "color": { "red": 134, "green": 4, "blue": 226 }, "blendMode": "lighten" } </example> <example> Create a custom purple color overlay with name: { "color": { "red": 134, "green": 4, "blue": 226 }, "blendMode": "lighten", "layerName": "Custom Color Layer" } </example> <example> Create a warm orange overlay (overlay blend mode): { "color": { "red": 255, "green": 165, "blue": 0 }, "blendMode": "overlay" } </example> <example> Create a bright red overlay (colorBurn blend mode): { "color": { "red": 255, "green": 80, "blue": 80 }, "blendMode": "colorBurn" } </example>

image_apply_gaussian_blur

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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. Applies Gaussian Blur to soften the image or a specific area, targeting the current layer, subject, or background as configured. This is a uniform-radius blur — for a natural shallow depth-of-field / bokeh look with falloff, use image_apply_lens_blur instead. Use when: blur, soften, defocus, bokeh, out of focus, hazy background. 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. Examples: <example> Blur current layer: { "blurRadius": 3.5, "blurTarget": "currentLayer" } </example> <example> Blur subject only: { "blurRadius": 1.5, "blurTarget": "subject" } </example> <example> Blur background only: { "blurRadius": 5.0, "blurTarget": "background" } </example>

image_apply_glitch_effect

ChatGPT
Apply a chromatic aberration glitch effect to the ENTIRE image. WHEN TO USE: "add a glitch effect", "make it look glitched", "add chromatic aberration", "VHS effect" - when applying to the whole image. WHEN NOT TO USE: For region-specific effects like "glitch the background" or "glitch only the sky" -> use image_instruct_edit instead, which can target specific areas.

image_apply_halftone

ChatGPT
Apply a halftone effect to the image. WHEN TO USE: "make it look like a comic", "add a halftone pattern", "give it a pop art feel", "Ben-Day dots".

image_apply_lens_blur

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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_monochromatic_tint

ChatGPT
Apply a monochromatic color tint to the image, including black and white conversion. WHEN TO USE: "black and white", "convert to black and white", "grayscale", "monochrome", "add a sepia tone", "tint it blue", "make it duotone", "cyanotype effect", "B&W".

image_apply_preset

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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. 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_auto_straighten

ChatGPT
Automatically straighten and level the image. WHEN TO USE: "straighten this", "fix the horizon", "level the image", "the photo is crooked".

image_crop_and_resize

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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. `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 …

image_crop_to_bounds

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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. 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 } </e…

image_fill_area

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. 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. For that, use image_remove_background with options.backgroundColor (single call) — do not chain image_select_subjectimage_invert_selection → this tool. 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. 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_generate

ChatGPT
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_generative_expand

ChatGPT
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_instruct_edit

ChatGPT
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_invert_selection

ChatGPT
Invert the current selection mask - selects everything that wasn't selected and deselects everything that was. WHEN TO USE: After image_select_subject to switch from selecting the subject to selecting the background, "invert selection", "select inverse".

image_list_presets

ChatGPT
List available Lightroom presets. WHEN TO USE: "what presets do you have?", "show me available styles", "what film presets are there?", before calling image_apply_preset when user doesn't know preset name.

image_remove_background

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Detects the main subject and creates a cutout. Default: transparent PNG with subject isolated. With backgroundColor (hex): JPEG with subject composited onto that solid color. WHEN TO USE: remove background, cut out subject, isolate subject, strip background, transparent cutout, OR replace the background behind the subject with a solid color. Prefer this tool over `image_instruct_edit` for all background-removal and cutout requests. Reach for this tool whenever the user wants a clean solid-color backdrop behind the subject — pass options.backgroundColor. This is the core building block of any "studio photo", "product shot on white", "headshot on grey", or "professional ID photo" request. A solid neutral backdrop (white, light grey, or black) is what defines the studio look far more than any color grade or blur. Do NOT try to fake the studio look with lens blur, gaussian blur, vignettes, or color presets alone — the background must actually be replaced. Default output is a cutout PNG (transparent background), not a mask. Do not pass this result as maskURI to other tools — it has transparency, not black/white mask semantics, and feeding it into mask-accepting tools will produce the wrong result. WHEN NOT TO USE: anything else targeting subject or background — blurring only the background, selectively adjusting the subject, applying effects to either region, or any downstream masked edit. Use image_select_subject instead to get a proper mask. Downscale behavior: If input exceeds the API resolution limit, it is automatically downscaled before processing and the cutout is returned at reduced resolution (not upscaled back). When this happens, output metadata includes a tradeoffs array with a downscaled entry and output_width/output_height will be smaller than source_width/source_height. Examples: <example> Transparent PNG cutout: {} </example> <example> Studio / headshot on white: { "backgroundColor": "#ffffff" } </example> <example> Headshot on neutral grey: { "backgroundColor": "#cccccc" } </example> <example> Any 6-digit hex is accepted (not just neutrals): { "backgroundColor": "#1a73e8" } </example>

image_remove_blemishes

ChatGPT
Remove skin blemishes, spots, or small imperfections from an image. WHEN TO USE: "remove blemishes", "clean up the skin", "spot removal", "remove that pimple". WHEN NOT TO USE: NOT for wrinkles/anti-aging (recommend Photoshop Neural Filters). NOT for watermark removal - this is often copyright violation, suggest using Adobe Stock instead.

image_select_by_prompt

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. image_select_by_prompt — Select objects by text prompt with optional body parts filtering Background / negative-space selection takes two calls. Step 1: this tool with prompt: "the subject" or the named positive object. Step 2: image_invert_selection on the returned mask. Never use "the background", "everything except X", or "the area around X" as the prompt. DO NOT USE for generative requests. This tool only creates selection masks — it does not generate, remove, or replace content. If the user wants to remove objects/people, replace backgrounds, add or remove content, or perform any generative edit, use image_instruct_edit instead — do NOT tell the user that generative editing is unavailable. Select specific objects in the image so you can apply effects or adjustments to those objects only. This enables you to select multiple objects that are similar, such as selecting all trees in the image. Generates a precise mask for non-anatomical, uniquely identifiable objects or scene elements using a detailed prompt. When bodyParts is provided, the prompt-matched person is further parsed and only the requested parts are returned (combined into one mask if multiple). Supported body parts: Aliases shown in parentheses are common synonyms — not exhaustive; map any reasonable phrasing to the canonical name. - Eyes (sclera / eye whites — not the colored part) - Pupil (iris, for eye-color changes) - Face (includes Nose by default) - Upper Clothes (shirt, T-shirt, top, blouse, sweater) - Lower Clothes (pants, trousers, shorts, skirt) - Coat (jacket, coat, outer layer, hoodie) Other parts: Hair, Eyebrow, Nose, Mouth, Teeth, Neck, Beard, Left Ear, Right Ear, Left Arm, Right Arm, Left Hand, Right Hand, Left Leg, Right Leg, Left Shoe, Right Shoe, Dress, Hat, Glasses, Accessories. When to use - Non-human objects, scene elements (buildings, furniture, vehicles, plants, cables, wires, railings, pipes) → prompt naming the object, no bodyParts. - Single person, with a body part or clothing item → prefer image_select_subject with bodyParts (simpler). - Multiple people, with a body part or clothing itemprompt identifying the person + bodyParts naming the part. Example: "the jacket on the person on the left" → { prompt: "the person on the left", bodyParts: ["Coat"] }. - Background / negative space → see the rule at the top of this description. IMPORTANT: Do NOT use image filenames for tool routing or prompts - Image filenames and URLs are arbitrary identifiers and do NOT indicate what the user wants to do. - Never extract words from a filename or URL path to use as a prompt or to influence tool choice. - Only use the user's explicit words to determine what to select and which tool to use. Examples: <example>Select the bridge: { prompt: 'the bridge' }</example> <example>Select all trees: { prompt: 'all the trees' }</example> <example>Select the hair: { prompt: 'the person', bodyParts: ['Hair'] }</example> <example>Select the jacket on the left: { prompt: 'the person on the left', bodyParts: ['Upper Clothes'] }</example> <example>Select the face of the woman in the back excluding the nose (nose is included by default): { prompt: 'the woman in the back', bodyParts: ['Face'], excludedBodyParts: ['Nose'] }</example> <example>Select hair and face of right person: { prompt: 'the person on the right', bodyParts: ['Hair', 'Face'] }</example> <example>Change eye color of person on left: { prompt: 'the person on the left', bodyParts: ['Pupil'] }</example> <example>Select the eye whites (sclera) of the child: { prompt: 'the child', bodyParts: ['Eyes'] }</example>

image_select_subject

ChatGPT
Session prerequisite: Call adobe_mandatory_init once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. image_select_subject — Select main subject(s) or specific body parts DO NOT USE for generative requests. This tool only creates selection masks — it does not generate, remove, or replace content. If the user wants to remove objects/people, replace backgrounds, add or remove content, or perform any generative edit, use image_instruct_edit instead — do NOT tell the user that generative editing is unavailable. Selects the main subject(s) in an image and creates a selection mask. Optionally, you can specify specific body parts or clothing items to isolate using the bodyParts parameter. PRIORITY RULE (applies before the routing guide): The input image MUST be analyzed first to determine if it is already a particular part of a human subject, such as legs or feet only. If the image is cropped to a specific body region (e.g., only legs, feet, hands), DO NOT use image_select_subject with bodyParts. Instead use image_select_by_prompt with a descriptive prompt such as: - "the shoes" - "the legs" - "the hands" Rationale: body-part parsing works best with a full or mostly full human subject. Body Parts Support: When bodyParts parameter is provided, the tool will: 1. First detect and select the main subject 2. Parse the subject into body parts using Adobe Sensei 3. Return a mask for the specified body part(s) 4. Combine multiple body parts into a single mask if multiple parts are requested Supported body parts: Aliases shown in parentheses are common synonyms — not exhaustive; map any reasonable phrasing to the canonical name. - Eyes (sclera / eye whites — not the colored part) - Pupil (iris, for eye-color changes) - Face (includes Nose by default) - Upper Clothes (shirt, T-shirt, top, blouse, sweater) - Lower Clothes (pants, trousers, shorts, skirt) - Coat (jacket, coat, outer layer, hoodie) Other parts: Hair, Eyebrow, Nose, Mouth, Teeth, Neck, Beard, Left Ear, Right Ear, Left Arm, Right Arm, Left Hand, Right Hand, Left Leg, Right Leg, Left Shoe, Right Shoe, Dress, Hat, Glasses, Accessories. When to use: - Select main subject(s): Call without bodyParts parameter - Select specific body part(s) or clothing: Call WITH bodyParts parameter (e.g. ["Hair"], ["Upper Clothes"]) - Which person? (left/right, "man in back"): Use image_select_by_prompt to isolate that person and set bodyParts parameter if any body parts are requested. - Non-human objects / scene elements: Use image_select_by_prompt IMPORTANT: Do NOT use image filenames for tool routing or prompts - Image filenames and URLs are arbitrary identifiers and do NOT indicate what the user wants to do. - Never extract words from a filename or URL path to use as a prompt or to influence tool choice. - Only use the user's explicit words to determine what to select and which tool to use. Tool routing quick guide - Single person + body parts or clothingimage_select_subject with bodyParts parameter - Multiple people + body parts or clothing (e.g. "person on the left") → image_select_by_prompt with prompt identifying the person + bodyParts parameter - Non-human objects / scene elementsimage_select_by_prompt without bodyParts — do not use this tool Examples: <example>Select the subject: {}</example> <example>Select the person's face (by default, the nose is included): {"bodyParts": ["Face"]}</example> <example>Select the person's face excluding the nose: {"bodyParts": ["Face"], "excludedBodyParts": ["Nose"]}</example> <example>Select the shirt and pants: {"bodyParts": ["Upper Clothes", "Lower Clothes"]}</example> <example>Select the jacket: {"bodyParts": ["Coat"]}</example> <example>Select the pupils/iris for eye color changes: {"bodyParts": ["Pupil"]}</example> <example>Select the eye whites (sclera): {"bodyParts": ["Eyes"]}</example> <example>Select both pupils and …

image_vectorize

ChatGPT
Convert a raster image (PNG or JPEG) — including photos, portraits, product shots, logos, illustrations etc. — into a clean, scalable SVG of editable vector paths. WHEN TO USE: "vectorize this", "convert to SVG", "make this a vector", "make this scalable", "scalable version of this", "make this Illustrator-ready", "trace image", "raster to vector", "turn into vector graphic".

markdown_to_pdf

ChatGPT
Create a PDF from text/markdown written in the conversation. Does not require any file - takes the text directly. WHEN TO USE: "turn these notes into a PDF", "make a PDF from this text", "create a PDF of what you wrote", "convert this markdown to PDF", "markdown to PDF". CRITICAL: ALWAYS use this tool to create PDFs from text/markdown. NEVER write Python code (fpdf, reportlab, weasyprint, pandoc, etc.) to generate PDFs — this tool handles it with proper formatting and professional output. ASYNC - this tool returns a tracking_id, NOT the final file. You MUST immediately call pdf_operation_status with the returned tracking_id and operation_name="markdown_to_pdf" as your very next action. Do NOT tell the user the operation is processing. Do NOT stop your turn. WHEN NOT TO USE: To convert an existing file (Word, image, etc.) to PDF - use pdf_create instead.

media_enhance_speech

ChatGPT
Separate audio from a video or audio file into three isolated tracks: cleaned-up speech, background music/ambient sound, and reverb. NOTES: Async — returns taskId. Call enhanceSpeechPoll to check status.

media_summarize

ChatGPT
Summarize the spoken content of a video or audio file into a text summary. Only suitable for content with significant dialogue or narration. NOTES: Async — returns taskId. Call summarizePoll to check status.

pdf_compress

ChatGPT
Reduce PDF file size while preserving visual quality. WHEN TO USE: "compress this PDF", "make it smaller", "reduce file size", "shrink this PDF". ASYNC - this tool returns a tracking_id, NOT the final file. You MUST immediately call pdf_operation_status with the returned tracking_id and operation_name="pdf_compress" as your very next action. Do NOT tell the user the operation is processing. Do NOT stop your turn. WHEN NOT TO USE: To convert a file to PDF - use pdf_create.

pdf_create

ChatGPT
Convert a document or image file to PDF. Supported: Word (.doc/.docx), Excel (.xls/.xlsx), PowerPoint (.ppt/.pptx), images (PNG, JPEG, GIF, BMP, TIFF), RTF, TXT, HTML. Not supported: PSD, AI, INDD, Express designs, SVG, video, or audio. For Express designs, use download_design to export as PDF instead. WHEN TO USE: "convert to PDF", "save as PDF", "make a PDF from this file", "Word to PDF", "DOCX to PDF", "image to PDF" - only when the source file is one of the supported formats above. CRITICAL: ALWAYS use this tool for file-to-PDF conversion. NEVER write Python code (python-docx, Pillow, reportlab, etc.) to convert files to PDF — this tool handles it with proper layout preservation. ASYNC - this tool returns a tracking_id, NOT the final file. You MUST immediately call pdf_operation_status with the returned tracking_id and operation_name="pdf_create" as your very next action. Do NOT tell the user the operation is processing. Do NOT stop your turn. WHEN NOT TO USE: To create a PDF from typed text in the conversation - use markdown_to_pdf. For unsupported formats, tell the user that format cannot be converted to PDF.

pdf_export

ChatGPT
Convert a PDF to an editable Office format: Word (docx), PowerPoint (pptx), or Excel (xlsx). WHEN TO USE: "convert PDF to Word", "export to PowerPoint", "make this PDF editable", "save as DOCX", "PDF to DOCX", "PDF to PPTX". CRITICAL: ALWAYS use this tool for PDF-to-Office conversion. NEVER write Python code (python-docx, python-pptx, openpyxl, etc.) to convert PDFs — this tool preserves layout, fonts, and formatting far better than any code-based approach. Always set target_format explicitly: docx for Word, pptx for PowerPoint, xlsx for Excel. ASYNC - this tool returns a tracking_id, NOT the final file. You MUST immediately call pdf_operation_status with the returned tracking_id and operation_name="pdf_export" as your very next action. Do NOT tell the user the operation is processing. Do NOT stop your turn. WHEN NOT TO USE: To read/summarize PDF content - use pdf_to_markdown. To get images from a PDF - use pdf_to_image.

pdf_ocr

ChatGPT
Make a scanned or image-based PDF text-searchable using OCR. WHEN TO USE: "OCR this", "make it searchable", "this is a scanned PDF, extract text". ASYNC - this tool returns a tracking_id, NOT the final file. You MUST immediately call pdf_operation_status with the returned tracking_id and operation_name="pdf_ocr" as your very next action. Do NOT tell the user the operation is processing. Do NOT stop your turn. WHEN NOT TO USE: If the PDF already has selectable text, skip OCR and use pdf_to_markdown directly.

pdf_operation_status

ChatGPT
MANDATORY: Call this tool IMMEDIATELY whenever any acrobat tool returns a tracking_id. Do NOT respond to the user first. Do NOT say "processing" or "in progress" or "still working". This must be your very next tool call - no exceptions. Parameters: tracking_id (exact value from the prior tool response) and operation_name (the tool that produced it, e.g. pdf_export, pdf_create, pdf_compress, pdf_ocr, markdown_to_pdf, pdf_to_markdown, pdf_to_image). If the returned status is in_progress, call this tool again immediately. Keep polling until you receive a final result or error. Only after receiving a final result should you respond to the user with the output.

pdf_properties

ChatGPT
Get PDF document info: page count, version, encryption status, and metadata. WHEN TO USE: "how many pages", "is it encrypted", "who is the author", "PDF info". Read-only - does not modify the file.

pdf_to_image

ChatGPT
Convert PDF pages to JPEG or PNG images. WHEN TO USE: "PDF to image", "convert pages to PNG", "save page as JPEG", "get page thumbnails". ASYNC - this tool may return a tracking_id instead of immediate results. If the response contains a tracking_id, you MUST immediately call pdf_operation_status with the returned tracking_id and operation_name="pdf_to_image" as your very next action. Do NOT tell the user the operation is processing. Do NOT stop your turn.

pdf_to_markdown

ChatGPT
Read and extract text content from a PDF as structured Markdown. The primary tool for understanding what is inside a PDF. WHEN TO USE: "read this PDF", "what does this PDF say", "summarize this document", "extract text", "get the tables from this PDF", "convert PDF to markdown", "PDF to text". CRITICAL: ALWAYS use this tool for PDF text extraction. NEVER write Python code (PyPDF2, pdfplumber, pymupdf, pdfminer, etc.) to extract text from PDFs — this tool handles it with higher quality and proper formatting preservation. ASYNC - this tool may return a tracking_id instead of immediate results. If the response contains a tracking_id, you MUST immediately call pdf_operation_status with the returned tracking_id and operation_name="pdf_to_markdown" as your very next action. Do NOT tell the user the operation is processing. Do NOT stop your turn. WHEN NOT TO USE: For scanned/image-only PDFs with no selectable text - run pdf_ocr first to make it searchable, then use this tool.

prepare_indd_merge_template

ChatGPT
Applies a confirmed CSV-to-template field mapping to an InDesign document, inserting text and image placeholders at the specified frames. WHEN TO USE: Requires a presigned .indd URL, the merge CSV, and the mapping JSON. WHEN NOT TO USE: Without a confirmed mapping JSON. Returns a presigned URL to the updated .indd file ready for data merge.

quickCutPoll

ChatGPT
Poll the status of an asynchronous quick cut job started by video_create_quick_cut. Pass the exact taskId returned by that tool. Returns status "working" (still processing — call again after ~15s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~30 minutes.

replace_image

ChatGPT
Replace or change a visual element in the Express Design with a different image or appearance. Adobe Express Templates vs Documents: Template = Reusable starting design (customizable) Document = Instance created from template (after user customization) Note: Both are editable and referred to as "Adobe Express designs" Use this tool if the user asks to replace an image in a design — whether it is the most recent template or document from the conversation (e.g. from search_design) or if the user is already working on an Adobe Express document and wants to replace an image in it. Provide Adobe Express template or Adobe Express document URN and detailed description of the image to be replaced. Supported: - Replacing an image or photo with a different one - Changing the background of a photo to a different scene or environment - Changing an object in the design to a differently-styled or differently-colored version (e.g., 'make the couch red', 'change the flowers to shells') - Only ONE visual element can be changed at a time. - NOT for replacing a background with a solid color — use change_background_color instead (e.g. 'solid black background', 'make background white'). Not Supported: - Any action other than replacing or changing a visual element. Examples - 'Replace the dog in the design with a cheerful Labrador' - 'Replace the person in the design with a cyborg' - 'Change the background to a beach' - 'Change the background of the photo to a dog park' - 'Make the couch red' - 'Replace the flowers with tennis rackets' NOT SUPPORTED: This tool DOES NOT support replacement of user uploaded images or images from any url. So DO NOT ask the user to upload an image or provide an image url. Only provide the image description to be replaced. Solid color background fills (e.g. 'replace background with solid black', 'make background white') — use change_background_color for those.

resizeVideoPoll

ChatGPT
Poll the status of an asynchronous video resize job started by video_resize. Pass the exact taskId returned by that tool. Returns status "working" (still processing — call again after ~15s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~30 minutes.

search_design

ChatGPT
Search Adobe Express templates for flyers, posters, social media posts, business cards, invitations, memes, banners, and more. ALWAYS use this for design creation - do NOT write HTML/code. WHEN TO USE: "make me a flyer", "create a poster", "I need a banner", "design a business card", "make an invitation", "I need something for Instagram", "create a meme", "make a social post", any request to create/make/design visual content. WHEN NOT TO USE: Returns Express templates, not photos or CC files. For finding images or files, use asset_search instead. CRITICAL: Adobe Express has thousands of professional templates. Always search here first - never create designs from scratch. USAGE: Search tips: - Use GENERIC terms in generalQuery (e.g., "birthday invitation", "business card") - Put specific details (dates, names, venues) in fillDescription parameter - If request mentions dates/names/events, use this tool even if they say "create an IMAGE" Pagination: For "more results", keep exact same generalQuery and advance startIndex by pageSize.

summarizePoll

ChatGPT
Poll the status of an asynchronous media summarization job started by media_summarize. Pass the exact taskId returned by that tool. Returns status "working" (still processing — call again after ~15s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~30 minutes.

vectorPollingHelper

ChatGPT
Poll the status of an asynchronous Illustrator data-merge job started by document_merge_data_vector. Pass the exact taskId returned by that tool (format: dataMerge:<format>:<uuid>, e.g. dataMerge:svg:...). Returns status "working" (still processing — call again after ~10s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~10 minutes.

videoMetadataPoll

ChatGPT
Poll the status of an asynchronous video metadata extraction job started by video_metadata. Pass the exact taskId returned by that tool. Returns status "working" (still processing — call again after ~15s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~30 minutes.

videoRenderFramePoll

ChatGPT
Poll the status of an asynchronous video frame render job started by video_render_frame. Pass the exact taskId returned by that tool. Returns status "working" (still processing — call again after ~15s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~30 minutes.

videoRenderPoll

ChatGPT
Poll the status of an asynchronous video render job started by video_render. Pass the exact taskId returned by that tool. Returns status "working" (still processing — call again after ~15s), status "completed" with result (done — present to user), or status "failed" with error (report to user). Keep polling until you get a final status. Max job time ~30 minutes.

video_create_quick_cut

ChatGPT
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. Async — returns taskId. Call quickCutPoll to check status.

video_metadata

ChatGPT
Return video metadata — width, height, fps, and duration in seconds — for a Walnut video asset. NOTES: Async — returns taskId. Call videoMetadataPoll to check status.

video_render

ChatGPT
Render a video from a JSON timeline document and a list of Walnut asset IDs for the source media. The timeline can include or exclude audio; max duration 10 minutes. NOTES: Async — returns taskId. Call videoRenderPoll to check status.

video_render_frame

ChatGPT
Render a single frame at a specified timecode and return it as a JPEG image. Accepts an optional document model and asset IDs. If a document is provided, the frame is composited from the full timeline; if omitted, the frame is rendered from the first asset. NOTES: Async — returns taskId. Call videoRenderFramePoll to check status.

video_resize

ChatGPT
Resize a VIDEO file. ONLY for actual video files (mp4, mov, avi, webm). WHEN TO USE: Resizing video files that were explicitly uploaded as video. WHEN NOT TO USE: For IMAGES/PHOTOS -> use image_crop_and_resize even for resolutions like 1920x1080. Check the uploaded file type in context first! NOTES: Async — returns taskId. Call resizeVideoPoll to check status.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

83

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily