adobe_mandatory_init
ChatGPTCALL 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, media_transcribe, 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, transcribePoll, 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
ChatGPTAnimate 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.
applyAdjustments
ChatGPTApply 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. See below for list of available adjustments. 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. The tool applies the adjustments to the image(s) with adjustment controls starting at configured or default values 4. User can click on the settings icon on each image to reveal adjustment sliders for real-time refinement 5. In your response, acknowledge any configured values and provide guidance on further adjustments if needed 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 getOptionsForAdjustments (no input) first to get them. When you receive results from getOptionsForAdjustments, 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 getOptionsForAdjustments (no input) to get all adjustments and their parameters b. All keys in adjustments[i].params must exactly match parameter names returned by getOptionsForAdjustments c. All parameter values must meet the constraints provided by getOptionsForAdjustments 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 getOptionsForAdjustments 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 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 getOptionsForAdjustments (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 undoEdits 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
applyEffects
ChatGPTApply artistic effects and filters to an image or parts of the image. Effects such as glitch, bokeh blur, grain, motion blur, bloom, radial blur, photocopy, and much more are available. Each effect is applied with default parameter values. See below for list of available effects. 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: 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 → 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 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) → 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 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 undoEdits 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.
asset_copy_assets
ChatGPTCopy one or more assets within Creative Cloud storage. WHEN TO USE: "copy this to another folder", "duplicate asset", "copy to project".
asset_create_folders
ChatGPTCreate 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
ChatGPTRetrieves 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
ChatGPTRetrieve 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
ChatGPTLists 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
ChatGPTInternal 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
ChatGPTRetrieves 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
ChatGPTFetch 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
ChatGPTSingle 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
ChatGPTRetrieves 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
ChatGPTReturns 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
ChatGPTInternal 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
ChatGPTStreams 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
ChatGPTInternal helper for the preview file UI: follows a shortened URL redirect and returns the resolved long URL.
asset_search
ChatGPTSearch for Adobe assets across multiple sources: Creative Cloud files (CCAsset), Document Cloud PDFs (DCAsset), Lightroom photos (LightroomAsset), or Firefly generations (GenAIAsset). Set entityScope to exactly one source per request. WHEN TO USE: "find my files", "search Creative Cloud", "find my Lightroom photos", "find my sunset photos", "find my X photos and edit them", "find my Firefly generations", "search my PDFs". CRITICAL: When user says "find my [description] photos", use this tool to search - do NOT open file picker. WHEN NOT TO USE: For design templates (flyers, posters, cards) -> use search_design instead. USAGE: entityScope-specific filters: - CCAsset: filters.mediaType, filters.directoryIds, filters.owner, filters.sharedWith. Sort by name, createDate, modifyDate. - LightroomAsset: query only (e.g., "sunset from last week"). No filters. - GenAIAsset: filters.mediaType, filters.assetClass, filters.owner. Next steps after search: - Show results -> list assets by name and type - Analyze image -> curl renditionURL to workspace, inspect local file
asset_share_link
ChatGPTReturns a shareable web URL for viewing an Adobe asset or project — the same link the sharing UI copies with "Copy link". If the user does not ask to change link settings, omit changeAccess and accessLevel; the tool returns the current share link without changing who can use it. 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 list people with access → use asset_list_collaborators If the user asks to change who has access but does not choose a setting, call with changeAccess: true and omit accessLevel. The tool returns link access options as a ToolError; show those options to the user, then call again with their selected accessLevel (e.g. private, public:editor, public:commenter, orgEverybody:editor). When the user has already chosen an access option, pass accessLevel. The tool applies that setting and returns the share link with a summary of the final link access.
blurBackground
ChatGPTBlur 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 applyEffects tool instead. Requires a mask: - If no maskURI exists for this image, call selectSubject 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.
change_background_color
ChatGPTUpdate 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
ChatGPTConverts 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).
create_firefly_board
ChatGPTCreate a Firefly Boards mood board from a collection of asset URNs. Use this tool at the end of a creative workflow (mood board, concept board, etc.) after gathering asset URNs. Constructs a deep-link URL that pre-populates the board with the provided assets and returns it to the user. Choosing the right parameter — use import_generation_ids for every Firefly AI–generated asset (Boards "import generated" flow), regardless of whether the URN looks like urn:ff:gen:... or a DCX asset id (e.g. urn:aaid:sc:US:...). - import_generation_ids: Always for Firefly generations — images or videos created in Firefly (including files saved under appassets/firefly-generations, names like .ffgenimg, mediaType application/vnd.adobe.firefly-generation-). CC asset search with entityScope CCAsset returns these as urn:aaid:sc:...; pass those URNs here, not import_cloud_doc_urns. Also: USS generation-history search and ACP list_firefly_generations. - import_cloud_doc_urns: Native Adobe cloud documents only — Photoshop (.psdc), Illustrator cloud, Fresco, etc. Not Firefly generation outputs (those use import_generation_ids even when the URN is urn:aaid:sc:US:...). - import_generic_assets: Use for any other Creative Cloud storage asset (CC Libraries items, regular cloud files). Boards resolves each via USS and handles type conversion automatically: images pass through, SVGs are rasterised to PNG, videos import with a thumbnail. Source: USS generic CC-storage search results. - import_local_id: Use for files surfaced in the Firefly Home opener window (local drag-and-drop context). Rarely needed in agentic workflows. - import_adobe_storage: Use for assets represented as presigned Adobe S3 HTTPS URLs (not URNs). Each value must start with 'https://'. Rarely needed in agentic workflows. - temp_uuid: A UUID v4 that keeps multiple calls on the same board canvas. Generate once per conversation and reuse on every subsequent call. Only generate a new UUID when the user explicitly asks for a separate board or new board.
document_convert_pdf
ChatGPTConvert 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
ChatGPTBatch-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
ChatGPTBatch-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
ChatGPTExport 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
ChatGPTExport 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
ChatGPTExport (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
ChatGPTPoll 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
ChatGPTExports 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
ChatGPTFill 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
ChatGPTGenerates 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.
getOptionsForAdjustments
ChatGPTRetrieve 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.
getPresignedUrls
ChatGPTInternal presigned url accessor tool for Adobe Photoshop custom UX widgets.
imageUploader
ChatGPTInternal helper upload tool for Adobe Photoshop custom UX widgets.
image_add_grain
ChatGPTAdd 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
ChatGPTAdd 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
ChatGPTSession 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
ChatGPTSession 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
ChatGPTSession 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
ChatGPTSession 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
ChatGPTApply 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
ChatGPTApply 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
ChatGPTSession 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
ChatGPTApply 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
ChatGPTSession 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
ChatGPTAutomatically straighten and level the image. WHEN TO USE: "straighten this", "fix the horizon", "level the image", "the photo is crooked".
image_crop_and_resize
ChatGPTSession 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
ChatGPTSession 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
ChatGPTSession 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_subject → image_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
ChatGPTGenerate 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
ChatGPTExpand 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
ChatGPTEdit 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
ChatGPTInvert 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
ChatGPTList 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
ChatGPTSession 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
ChatGPTRemove 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
ChatGPTSession 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 item → prompt 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
ChatGPTSession 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 clothing → image_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 elements → image_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
ChatGPTConvert 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".
instructEdit
ChatGPTApply instruction-based generative edits to images. PREQUISITE: When the user uploads a new image in this request, ALWAYS use that image (nativeImage) and ignore instructEditInputImage from widget state. When no new image was uploaded in this request, read the latest widget state and use the latest instructEditInputImage. If multiple widget states are present, read the one with the most recent updateTimestamp. PRIORITY RULE: If a request can be solved with the available non-generative Photoshop tools, you MUST prefer the non-generative tool over this tool. WHEN TO USE THIS TOOL: - Add an object to the scene - Remove an object from the scene - Replace an object with another object - Change the background of the scene - Change the color or tone of objects in the scene. WHEN NOT TO USE THIS TOOL: - To display a secondary generation before user input. DO NOT call this tool more than once per response. Provide the user a message in the response from the tool - Use applyAdjustments to apply adjustments to the image (other than color or tone), see tool for full list of available adjustments. - Use applyEffects to apply an artistic effect to the image, see tool for full list of available effects. - Use removeBackground to remove the background of the image - Use blurBackground to blur the background of the image
markdown_to_pdf
ChatGPTCreate 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
ChatGPTSeparate 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
ChatGPTSummarize 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.
media_transcribe
ChatGPTTranscribe the spoken content of a video or audio asset into a text transcript. Language is auto-detected by default — do not set language unless the user explicitly states the spoken language. NOTES: Async — returns taskId. Call transcribePoll to check status.
pdf_compress
ChatGPTReduce 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
ChatGPTConvert 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
ChatGPTConvert 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
ChatGPTMake 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
ChatGPTMANDATORY: 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
ChatGPTGet 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
ChatGPTConvert 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
ChatGPTRead 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
ChatGPTApplies 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
ChatGPTPoll 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.
removeBackground
ChatGPTRemove background from your image and export with a transparent background in PNG format. Requires a mask: - If no maskURI exists for this image, call selectSubject 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.
replace_image
ChatGPTReplace 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
ChatGPTPoll 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
ChatGPTSearch 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.
selectSubject
ChatGPTselectSubject — Select main subject(s) or specific body parts 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 selectSubject with bodyParts. Instead use selectionByPrompt 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: Background, Hair, Eyebrows, Eyes, Nose, Mouth, Teeth, Ears, Face, Neck, Arms, Hands, Legs, Coat, Upper Clothes, Lower Clothes, Glasses, Shoes, Dress, Hat, Accessories, Beard, Pupil Some subparts are included by default when the parent part is requested. For example, if the user asks for "face", the tool will include the nose by default unless the user explicitly asks to exclude it. Default body part hierarchy: Face: Face, Nose 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 selectionByPrompt to isolate that person and set bodyParts parameter if any body parts are requested. - Non-human objects / scene elements: Use selectionByPrompt Tool routing quick guide - Anything on a person (body parts, clothing, wearable items) if there is only one person in the image → selectSubject with bodyParts parameter - Which person if there are more than one person in the image? (left/right, "man in back") → selectionByPrompt to isolate that person → anything on a person? (e.g. face, hair, clothing, shoes) with bodyParts parameter - Non-human objects / scene elements → selectionByPrompt 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 eye whites: {"bodyParts": ["Pupil", "Eyes"]}</example>
selectionByPrompt
ChatGPTselectionByPrompt — Select objects by text prompt with optional body parts filtering 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. Body Parts Support: When bodyParts parameter is provided, the tool will: 1. First select the object specified by the prompt (e.g., "the person on the left") 2. Parse the selected object 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: Background, Hair, Eyebrows, Eyes, Nose, Mouth, Teeth, Ears, Face, Neck, Arms, Hands, Legs, Coat, Upper Clothes, Lower Clothes, Glasses, Shoes, Dress, Hat, Accessories, Beard, Pupil Some subparts are included by default when the parent part is requested. For example, if the user asks for "face", the tool will include the nose by default unless the user explicitly asks to exclude it. Default body part hierarchy: Face: Face, Nose When to use: - Select specific object: Call without bodyParts parameter for non-human objects - Select person + body parts: Call WITH bodyParts parameter when you need to isolate a specific person AND then select body parts - Example: "the jacket on the person on the left" → { prompt: "the person on the left", bodyParts: ["Upper Clothes"] } - Example: "the face of the woman in the back" → { prompt: "the woman in the back", bodyParts: ["Face"] (by default, the nose is included unless the user explicitly asks to exclude it) } Best for: - Buildings, furniture, plants, vehicles, props, background regions - Choosing a specific person from a group (e.g., "the person on the left") and then selecting body parts Tool routing quick guide - Anything on a person (body parts, clothing, wearable items) → selectionByPrompt with bodyParts parameter - Which person? (left/right, "man in back") → selectionByPrompt with prompt + bodyParts parameter - Non-human objects / scene elements → selectionByPrompt without bodyParts parameter Examples: <example>Select the bridge: { prompt: 'the bridge' }</example> <example>Select all trees: { prompt: 'all the trees' }</example> <example>Select the jacket on the left person: { prompt: 'the person on the left', bodyParts: ['Upper Clothes'] }</example> <example>Select the face of the woman in the back (by default, the nose is included): { prompt: 'the woman in the back', bodyParts: ['Face'] }</example> <example>Select the face of the woman in the back excluding the nose: { 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>
summarizePoll
ChatGPTPoll 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.
transcribePoll
ChatGPTPoll the status of an asynchronous transcription job started by media_transcribe. 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.
undoEdits
ChatGPTUndo previous edits applied to an image by an Photoshop tool. When undoing multiple edits, make a single call with { numberOfEdits: N } to undo the last N edits. Do NOT make multiple sequential calls with { numberOfEdits: 1 }. HOW TO USE THIS TOOL: 1. Undo last N edits (use numberOfEdits): When the user wants to step back through recent edits. - User says "undo" or "undo last" → use { numberOfEdits: 1 } (undo only the last edit). - User says "undo last X" or "undo X edits" → use { numberOfEdits: X }. 2. Undo by edit name (use numberOfEdits): When the user wants to undo a specific edit by name, undo that edit and all subsequent edits after. - MUST read the latest widget state and take the latest "actionHistory". If multiple widget states are present, read the one with the most recent updateTimestamp. Find the matching edit in this list and derive the correct numberOfEdits from the reverse chronological order of applied edits. - If the target edit is the first (oldest) entry in actionHistory, use revertToOriginal instead (step 3). - i.e. edits applied in order: (1) apply hueSat, (2) remove background, (3) blur background. User says "undo remove background". The edit to undo is the 2nd from the end → use { numberOfEdits: 2 }. 3. Revert to original (use revertToOriginal): Only when the user explicitly asks to remove ALL edits and return to the original image. - User says "undo all", "clear all", "start over", etc → use { revertToOriginal: true }. - Do NOT use revertToOriginal when the user only says "undo". Implementation notes: - This tool does NOT use generative AI, it manipulates the edit history directly (removes or reverts edits). - When it comes to tool inputs. The model should prioritize 'currentInputImage' as input over 'instructEditInputImage' - If there are no edits to undo, inform the user instead of calling the tool.
vectorPollingHelper
ChatGPTPoll 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
ChatGPTPoll 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
ChatGPTPoll 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
ChatGPTPoll 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
ChatGPTCreate 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
ChatGPTReturn 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
ChatGPTRender 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
ChatGPTRender 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
ChatGPTResize 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.
zeroCredits
ChatGPTDisplay a zero credits widget that informs users they have reached their daily limit and provides an option to continue editing in Photoshop. PREQUISITE: ALWAYS read the latest widget state and take the latest instructEditInputImage if available, otherwise use the original uploaded image. If multiple widget states are present, read the one with the most recent updateTimestamp. This widget shows: - Message about continuing edits in Photoshop - Credit reset countdown timer - Image preview (if provided) - "Open in Photoshop" button Use this widget when a user has exhausted their daily generative tool credits.