Adobe
Adobe unlocks more ways to create and get work done from the conversation. Previously available as Photoshop, the Adobe connector now brings creativity and productivity capabilities across Creative Cloud and Acrobat. Describe what you want to make or change, and Adobe can help turn ideas, images, videos, and documents into polished outputs — from editing photos and creating PDFs to designing social assets, resizing videos, searching Creative Cloud assets, and generating data-driven documents. Key capabilities: * Retouch portraits or edit photos in bulk: Drop in photos and describe the look you want — adjust color, lighting, and tone; remove distractions and generate new elements; apply Lightroom presets; remove backgrounds; blur, crop, resize, and expand images. * Design from template: Start from an Express template, update text and colors, and then animate for social media or convert to PDF. * Refine video for any platform: Upload a horizontal clip and ask to reformat it for YouTube Shorts, Instagram Reels, or any platform. You can also stitch clips into a single sequence. * Search and organize creative work: Describe what you're looking for and surface assets from your Creative Cloud library — by subject, style, mood, or content — without browsing folders. * Work with PDFs and documents: Create and convert polished PDFs and documents. * Create data-driven documents: Describe your output and provide your data — the connector turns raw data or content into formatted, shareable PDFs, including badges, cards, catalogs, and more. You can get started as a guest, and sign in with your Adobe account for more capabilities and tools, Creative Cloud storage, and saved work across sessions.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Photo & Image Editing
- Secondary Subcategories
- None listed
- Brand
- Adobe
- Access
- Account optional
- First tracked
- 2026-08-13
- Tool count
- 87
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is visible.
ChatGPT Plugin Discoverability Score
ChatGPT organic discovery is not live yet
Adobe is tracked in the ChatGPT Plugin registry. Public organic-discovery measurement is not live for ChatGPT yet, so there is no score to publish today.
Get notified when your score goes live
Enter your work email and we’ll notify you when ChatGPT Plugin organic discovery scoring launches.
No spam. Unsubscribe any time.
Competing in ChatGPT Photo & Image Editing
View CategoryHow the Discoverability Score works
Organic discovery scoring for Adobe on ChatGPT is not live yet. The score will use measured agent conversations when it launches.
Organic discovery scoring is pending. Your Plugin score will appear on this scale when measurement goes live.
FoundDiagnostic
Whether Claude found your Plugin in connector search. It must be Found before it can reach the picker, but the score counts picker appearances—not search results.
PickedMain score
How often your Plugin appeared in the picker, or Claude invoked it directly, across contested conversations. This percentage is the Discoverability Score; the headline number is rounded.
PositionedDiagnostic
What position your Plugin appeared in when it was shown in the picker. This shows prominence, but it does not affect the score.
87 tools agents can invoke
CALL ONCE per chat session before using any adobe tool (animate_design, asset_add_file, asset_add_file_check_status, asset_add_file_submit, asset_copy_assets, asset_create_folders, asset_download_file, asset_finalize_file_upload, asset_get_mime_type, asset_get_presigned_url, asset_get_presigned_urls, asset_initialize_file_upload, asset_inline_preview, asset_license_and_download_stock, asset_lr_get_presigned_url, asset_migrate_guest_storage, asset_openai_file_upload, asset_preview_file, asset_resolve_short_url, asset_search, change_background_color, convert_pdf_to_indd, document_convert_pdf, document_merge_data_layout, document_merge_data_vector, document_render_layout, document_render_vector, download_design, enhanceSpeechPoll, export_idml, fill_text, font_recommend, 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, log_analytics, markdown_to_pdf, media_enhance_speech, media_summarize, pdf_compress, pdf_create, pdf_export, pdf_ocr, pdf_operation_status, pdf_properties, pdf_to_image, pdf_to_markdown, prepare_indd_merge_template, quickCutPoll, replace_image, resizeVideoPoll, search_design, summarizePoll, vectorPollingHelper, videoMetadataPoll, videoRenderFramePoll, videoRenderPoll, video_create_quick_cut, video_metadata, video_render, video_render_frame, video_resize). Do NOT call again unless this tool's response is no longer in your context window. Returns file handling rules and tool routing guidance.
Animate 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.
Open the file picker so user can select an image/video to edit. ALWAYS call this when user mentions editing but no file is provided. WHEN TO USE: "edit my photo", "retouch my photos", "my photo", "my image", "this image", vague edit requests without a file URL, "process my photos", "get my products ready" - ANY editing request where no file URL is present. WHEN NOT TO USE: When you already have a file URL (https://...) to work with. use asset_openai_file_upload. NOTES: This tool returns immediately with a `job_id` while the file picker UI is shown; the assets array is empty at this point. The selection is delivered asynchronously: after the user confirms their choice and the file is submitted, read the `job_id` from the result and call asset_add_file_check_status with that `job_id` until `job_status` is `complete`, then use the returned `assets` array. Do not take further action until polling returns `complete`.
Returns the status of an add-file job started by asset_add_file. Use when: user picked files in the add-file UI, you need the chosen assets, asset_add_file returned a job_id. Call with that job_id; repeat until job_status is complete, then read assets. Returns pending, complete (with assets), not_found, or cancelled.
Internal use by the add-file MCP app: records the user-confirmed assets on the job so asset_add_file_check_status can return them.
Copy one or more assets within Creative Cloud storage. WHEN TO USE: "copy this to another folder", "duplicate asset", "copy to project".
Create one or more folders in Adobe Creative Cloud Files storage for organizing assets. WHEN TO USE: "create a folder", "make a new folder", "set up project folders", "organize my files", creating destination folders before copying/moving assets, setting up project directory hierarchies. WHEN NOT TO USE: For uploading files -> use asset_add_file for user-selected local files, or asset_openai_file_upload for ChatGPT-native file uploads. USAGE: - Folders can be created at root level (home directory) or nested within existing folders. - Use forward slashes to create nested hierarchies in one call (e.g., "myAssets/2024/Q4-Campaign" creates three nested folders). - If a folder with the same name already exists, a numbered suffix is automatically added (e.g., "MyFolder", "MyFolder (1)"). LIMITATIONS: Cannot create folders in Libraries or Brands (only in Files storage). Folder names must follow Adobe naming conventions. OUTPUT: Returns folder ID (assetId), folder name (may differ from input if renamed due to conflict), and creation metadata.
Completes a block upload and creates the file asset after chunk transfer finishes. **What this tool does:** Sends the completed transfer document to RAPI to confirm all blocks were received and create the asset. Handles asynchronous finalization automatically (polls the monitor URL until the asset is ready). **When to call this:** After all blocks have been successfully PUT to their block transfer URLs from `asset_initialize_file_upload`. Pass the `transfer_document` from init, updated so `_links["http://ns.adobe.com/adobecloud/rel/block/transfer"]` lists only the block links you actually used (same objects or `{ href }` entries). Keep the finalize link from the init response. Optionally set `repo:md5` for integrity verification. **Returns:** - `assets`: array containing the created asset (currently one asset per finalized upload) - Each asset includes ID, name, media type, and presigned URLs when available **Important:** - This is a mutating operation and should be called once per initialized upload session - For retries after uncertain network failures, expect backend conflict handling (for example filename renaming)
Internal helper for the preview file UI: fetches HTTP headers for a URL and returns the Mime-Type parsed from the Content-Type header.
Retrieves presigned download URLs for PNG renditions of Adobe Creative Cloud assets. WHEN TO USE: "give me a download link", "get download URL" — only when context has a URN (urn:aaid:...) and no presigned URL is available. WHEN NOT TO USE: - If context already has a presigned URL (https://cc-api-storage.adobe.io/... or similar), use that URL directly.
Resolve auth-gated rendition URLs from asset_search results into presigned S3 URLs. Pass the full array of LR/ACP assets — all are resolved in parallel in one call. WHEN TO USE: After asset_search returns LightroomAsset or CCAsset results you need to pass to asset_preview_file, asset_inline_preview, or any edit tool. Their renditionURL values are authenticated Oz/RAPI endpoints — passing them directly causes a 403. WHEN NOT TO USE: For StockAsset results — renditionURL is a public CDN URL, safe to use directly. For assets loaded via the file picker — presignedAssetUrl is already resolved. INPUT: assets array — each item needs id and sourceType from search results. Include renditionUrl and mediaType if present. OUTPUT: assets array in the same order as input — each item has id, renditionUrl, downloadUrl, previewUrl. Always use previewUrl for asset_preview_file, asset_inline_preview, and edit tool inputs. Items where resolution failed have null URLs. EXAMPLE: asset_get_presigned_urls({ assets: [ { id: "<id>", sourceType: "lightroom", renditionUrl: "<renditionURL from search>" }, { id: "<id>", sourceType: "acp", renditionUrl: "<renditionURL from search>" } ] }) → { assets: [{ id, renditionUrl, downloadUrl, previewUrl }, ...] }
Starts a new block-based upload session for a file in Adobe Creative Cloud storage. **What this tool does:** Resolves or creates the destination directory and returns ordered pre-signed block transfer URLs plus the finalize URL required to complete upload. This is a mutating operation that allocates an upload session. **When NOT to use this tool:** - Uploading a file to a Project. **Path behavior:** - If `path` is just a filename (e.g. `"photo.png"`), the file is placed directly in `cloud-content/`. - If `path` includes a directory (e.g. `"my-project/photo.png"`), the path is interpreted relative to `cloud-content/` and any missing intermediate directories are created automatically. - Do not include `cloud-content/` as a prefix — it is added automatically. **Block transfer:** Use `transfer_document['repo:blocksize']` as the chunk size (last chunk may be smaller). Read pre-signed PUT targets from `transfer_document._links["http://ns.adobe.com/adobecloud/rel/block/transfer"]` (array of link objects with `href`). PUT each chunk in order. Do not send an Authorization header on block transfer requests. **Returns:** - `filename`: resolved filename — pass to `finalize_file_upload` - `directory_asset_id`: destination directory asset ID - `transfer_document`: RAPI bulk transfer document from block/init (includes `repo:blocksize`, block transfer / finalize / extend links under `_links`). After uploading blocks, replace the block/transfer link array with only the links you used (same `href` values), then pass the updated document to `asset_finalize_file_upload`. **Important:** - Call this once per upload intent; repeated calls create separate upload sessions - `shorten_block_upload_urls` defaults to true so transfer/finalize URLs stay compact in context; AI agents should leave it true.
Fetch image bytes from a presigned URL and return base64 content for direct model inspection and analysis. WHEN TO USE: - "describe what's in this image", "what does this image show", "analyze this image" - "compare these images", "which image is sharper/better" - Any request requiring the model to SEE AND UNDERSTAND image contents. WHEN NOT TO USE: To show/display an image to the user -> use asset_preview_file instead. CRITICAL: Use this tool, not asset_preview_file, when you need to describe, analyze, or compare image contents. asset_preview_file only displays the image to the user; it does not let the model inspect it. INPUT: Presigned HTTPS URL. For Lightroom and ACP assets from asset_search, use the previewUrl returned by asset_get_presigned_urls — their renditionURL values are auth-gated and will 403. For Stock assets, renditionURL from search is safe to pass directly. For tool output URLs, such as image editing outputs, or download URLs, such as asset_download_firefly_generation, pass those directly.
License an Adobe Stock asset and obtain a full-resolution download URL. WHEN TO USE: After the user has found a specific Stock asset via search and wants to acquire it or use it in subsequent editing workflows. Stock assets must be licensed before use in any editing workflow. WHEN NOT TO USE: Do not fall back to rendition or thumbnail URLs - always license first. NOTES: The returned download URL is a presigned S3 URL valid for 1 hour. Re-calling this tool on an already-licensed asset just refreshes the URL without consuming an additional license.
Internal helper: resolves presigned S3 URLs for one or more Lightroom assets via the Oz direct_links API. Returns presignedRenditionUrl (best available rendition) and presignedAssetUrl (master file) for each asset.
One-time migration: copies assets from the session's guest storage directory into the authenticated user's storage directory (same path used after sign-in). **When to use this tool:** - After a guest user authenticates, to recover files that were uploaded while unauthenticated **Returned data:** - `assetsTransferred`: count of assets that copied successfully (HTTP 2xx). The tool succeeds when this count is positive, when there were no assets to migrate, or when guest storage already matches authenticated storage. The tool fails only when there were assets to migrate and every copy failed.
Streams bytes from a URL provided by the 'fileParams' extension into Adobe Creative Cloud Files at the given path using Bartlebee (server-side; no client upload of raw bytes). Do not choose, invent, or add a destination folder/path. By default, upload files to the connector’s default Adobe destination. Only provide path when the user explicitly specifies an Adobe destination folder, upload path, or exact filename/path. When the user simply says “upload these files to Adobe,” omit path. **Input:** - `files`: array of file specifiers for upload. The schema of each entry adheres to the OpenAI 'fileParams' spec as documented below - `path`: optional directory path extending from the `cloud-content/OpenAI` root. Do not choose, invent, or add a destination folder/path. By default, upload files to the connector’s default Adobe destination. Only provide path when the user explicitly specifies an Adobe destination folder, upload path, or exact filename/path. When the user simply says “upload these files to Adobe,” omit path. ** File Specifiers ** The file specifiers use the openai/fileParams extension schema. Each entry must adhere to the following: - `download_url`: pre-signed or unauthenticated HTTP URL source for the input file - `file_id`: Stable ChatGPT file identifier (e.g. "file_...") - `mime_type`: MIME/media type for the incoming file - `file_name`: Original file name of the asset, when known. Must include extension (e.g. "document.pdf") **Path behavior:** - `path` is optional. It should not be provided unless the user makes a specific request to upload the assets to a specific folder. - `path` is interpreted relative to `cloud-content/OpenAI`. Do not include `cloud-content/OpenAI` as a prefix — it is added automatically. - If `path` is just a filename (e.g. `"photo.jpg"`), ignore it in favor of the file's `file_name`. - Any leading `/` will be trimmed from the path - If `path` includes a directory and name (e.g. `"my-folder/photo.jpg"`), truncate to just the directory - If `path` is a nested directory (e.g. `photos/animals/dogs`), the assets will be created at the end of the path (in `dogs`, citing the example). **Returns:** `assets` array with the created file (asset id, name, presigned download URL, etc.).
Show/display/preview Adobe tool output to the user. WHEN TO USE: - After image_remove_background/image_generate/image_vectorize/any Adobe tool returns output_url AND user asks to see results. - After asset_search returns results and the user wants to see/view/preview them. This is the correct tool for showing search results to the user — NOT asset_inline_preview. asset_inline_preview is for the model to describe, analyze, or compare image content, not to display it. INPUT: {assets: [{presignedAssetUrl: "<output_url from previous tool>"}]} CRITICAL: Use this MCP tool instead of simulated curl/Read/Bash to display Adobe results. MANDATORY PREREQUISITE: For Lightroom or Creative Cloud (ACP) assets from asset_search, do NOT pass renditionURL directly — call asset_get_presigned_urls first and use the returned previewUrl instead. This tool does not validate the URL itself; passing an unresolved, auth-gated renditionURL will fail silently in the rendered UI with no error returned here. Stock and Firefly (GenAIAsset) results are safe to pass directly.
Internal helper for the preview file UI: follows a shortened URL redirect and returns the resolved long URL.
Search for Adobe assets across multiple sources: Creative Cloud files including Adobe Express documents and designs (CCAsset), Document Cloud PDFs (DCAsset), Lightroom photos (LightroomAsset), Adobe Stock (StockAsset), or Firefly generations (GenAIAsset). Set entityScope to exactly one source per request. WHEN TO USE: "search stock", "find stock images", "stock photos", "find my files", "search Creative Cloud", "find my Express files", "find my Express decks", "find my Express documents", "find my Express designs", "find my presentations", "find my decks", "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: To find Adobe Express templates to start a new design from scratch (blank flyers, posters, cards) -> use search_design instead. To search the user's OWN existing/saved Express files or designs -> use this tool with entityScope CCAsset. USAGE: entityScope-specific filters: - CCAsset: filters.mediaType, filters.directoryIds, filters.owner, filters.sharedWith. Sort by name, createDate, modifyDate. Covers Creative Cloud files and Adobe Express documents/designs. - StockAsset: filters.pricing ("free"/"core"), filters.contentType ("Photo"/"Video"/"Vector"/"Illustration"), filters.orientation ("landscape"/"portrait"). - 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. If the user asks to view or preview them, pass the assets array to asset_preview_file. - For LightroomAsset or CCAsset results: call asset_get_presigned_urls({ assets: [...] }) first, then use the returned previewUrl for asset_preview_file, asset_inline_preview, or edit tools. Their renditionURL values are auth-gated — passing them directly causes a 403. - For StockAsset results: renditionURL is a public CDN URL, safe to pass directly to asset_inline_preview or asset_preview_file. License with asset_license_and_download_stock before editing. - Use Stock asset in editing -> call asset_license_and_download_stock first.
Add 1-12 images to an existing Firefly board. PREREQUISITE — board_id is required: - If you do NOT already have a boardId in context, FIRST call boards_create_new_board to get one, then call this tool with that board_id. Never invent or guess a board_id. - If you already have a valid boardId from earlier in this conversation, reuse it. ITEM TYPES — pick the lightest one the client can produce reliably: - presignedUrl : { type, urls: string[] } — time-limited https URLs the server fetches. PREFERRED. - generationUrn : { type, assetIds: string[] } — Firefly generation URNs (carry provenance). PREFERRED. - rawBlob : { type, bytesBase64, mimeType, width, height } — USE WITH CAUTION from chat/LLM clients: large base64 is often truncated and the call fails with a decode error. Each url / assetId expands to one image placement. Total placements across all entries must be 1-12. SVG / vector formats are not supported. INTERPRETING THE RESPONSE (do not retry on partial success): - HTTP 200: all images were added. Done. - HTTP 201: PARTIAL success — some added, some not. This is SUCCESS, not an error. `failedItems[]` lists ONLY the items that failed (logicalIndex, stage, errorCode, errorMessage ending in "(item: <id/url>)"). Re-send ONLY the failed items after fixing the named cause; never resend ones that already succeeded. - HTTP 422: NONE could be added (message inlines the first few failures). Fix inputs and retry. OTHER ERRORS (isError: true, body = { status, ...details }): - 400 invalid payload or >12 images; 401 auth; 404 board or asset not found (if the board_id is wrong or expired, create a new board and retry); 413 too large; 415 unsupported media type; 502 upstream fetch/persistence; 503 busy (retry shortly); 504 timeout. Fix the request for 400/401/404/415; a single retry is reasonable for 503/504. GUIDANCE: prefer presignedUrl / generationUrn over rawBlob. If a rawBlob call fails with a decode error, the image was likely truncated — upload it and retry with a URL/URN type.
Create a new Firefly board and return its boardId. WHEN TO CALL: - Call this whenever you do NOT already have a boardId in the current context. - The boardId it returns is REQUIRED by boards_add_items_to_board. Typical flow: 1) boards_create_new_board -> get boardId 2) boards_add_items_to_board(board_id = that boardId, items = [...]) - If you already have a valid boardId from earlier in this conversation, REUSE it instead of creating another board (don't create duplicates for the same task). INPUT: - doc_name (string, required): a human-readable name for the board (e.g. "Mood board", "Q3 launch"). ON SUCCESS: - Returns { boardId: "<urn>" }. Remember this boardId and pass it to boards_add_items_to_board. ON FAILURE (isError: true, body = { status, ...details }): - 400 : doc_name missing/empty — supply a non-empty name and retry. - 401 : auth missing/invalid — not user-correctable; surface the error. - 503 : service at capacity (body includes a retry hint) — wait briefly and retry once. - 504 : creation timed out — retry once; if it persists, surface the error. - 500 / 502 : upstream/worker failure — retry once, then surface the error. Do NOT retry 400/401 without changing the input/auth.
Update the background color of an Express design. WHEN TO USE: "change the background to blue", "make the background white", "use a darker background". WHEN NOT TO USE: Only works on Express designs.
Converts a PDF into an InDesign (.indd) file for use as a variable-data merge template. WHEN TO USE: When the source template is a PDF that needs to be prepared for a data merge workflow. WHEN NOT TO USE: For general PDF-to-InDesign editing. Returns presigned .indd URL(s).
Convert 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.
Batch-produce multiple InDesign documents by merging CSV rows into an .indd template, then export as PNG, JPEG, or PDF. WHEN TO USE: "generate personalized documents", "data merge InDesign", "batch create from CSV", "variable data publishing", "merge data into template". NOTES: One output file per CSV row. Requires an InDesign subscription.
Batch-produce multiple AI/PNG/SVG/JPEG/PDF files by merging CSV rows into an .ai template — e.g. personalized certificates, product labels, or localized assets. WHEN TO USE: "data merge Illustrator", "batch create certificates", "generate product labels from CSV", "variable data in Illustrator". NOTES: Requires an Illustrator subscription.
Export an InDesign document (.indd or .idml) as PDF, JPEG, or PNG with page range and resolution control. WHEN TO USE: "export InDesign", "publish this InDesign layout", "InDesign to PDF", "render INDD as JPEG", "convert InDesign file". INPUT: Requires an .indd or .idml source file URL.
Export one or more Illustrator (.ai) files as PNG, JPEG, SVG, PDF, AI, or EPS with artboard and resolution control. WHEN TO USE: "export Illustrator file", "save .ai files as PNGs", "convert Illustrator to PDF", "render AI files", "export this Illustrator file as PNG", "Illustrator to PNG", "AI to JPEG". CRITICAL: When the user has uploaded an .ai file and asks to export/convert/render it, use THIS tool immediately. Do not open the file picker again. NOTES: Requires an Illustrator subscription.
Export (download) an Adobe Express design as PDF. Use this tool when the user asks to download/export the current design. Notes: - Only PDF format is supported. - The tool returns pre-signed URLs for each exported page.
Poll for Completion of enhanceSpeech tool
Exports an InDesign (.indd) document to IDML format for document structure analysis. WHEN TO USE: When a presigned .indd URL needs to be analyzed for frame layout and field mapping before creating placeholders. WHEN NOT TO USE: For publishing or rendering the document as PDF/image. Returns a presigned IDML download URL.
Fill 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.
Get font suggestions for a creative project or brand context. WHEN TO USE: "what fonts would work for X", "suggest fonts for a logo", "font recommendations", "what font should I use", "recommend fonts", "font advice", "fonts for [any project/brand/purpose]".
Generates structured instructions for creating a CSV-to-template field mapping for InDesign placeholders. WHEN TO USE: Before assigning CSV columns to template frames — use this to obtain mapping guidance for reasoning out field assignments. WHEN NOT TO USE: This tool does not modify any document or call InDesign — it only returns instructions for the model to reason out the mapping JSON. Returns a prompt string with mapping structure requirements.
Add film grain texture to an image for a vintage or cinematic look. WHEN TO USE: "add grain", "film grain", "vintage grain", "make it grainy", "analog film look", "add texture". WHEN NOT TO USE: For digital noise/static effect -> use image_add_noise.
Add digital noise/static texture to an image for a gritty or distressed look. WHEN TO USE: "add noise", "gritty look", "add static", "distressed effect", "digital noise". WHEN NOT TO USE: For film/analog grain -> use image_add_grain.
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. **MANDATORY PREREQUISITE — before every call to this tool, you must first call asset_inline_preview or read_image (whichever is available) on each input image, including intermediate outputs from prior tool calls, and inspect the returned visual.** Do not call this tool from the filename, the user's description, or prior assumptions alone. Do not proceed until the preview has returned and you have used it to judge the image's actual brightness, tonal balance, highlight/shadow state, and color cast. Without that visual grounding, parameter values are guesses. Adobe Photoshop and Lightroom professional image adjustments. **Use when:** brighten, darken, too dark, too bright, overexposed, underexposed, recover highlights, lift shadows, reveal shadow detail, crush blacks, boost contrast, boost saturation, muted colors, more colorful, desaturate, too yellow, too blue, warm up, cool down, white balance, color grade, hue shift, recolor an object, tone down a specific color, make it pop, looks dull, flat, lifeless, lacks contrast, professional look, polished, clean look — for specific, targeted adjustments where the direction or parameter is clear. For vague problem descriptions without a specified direction or amount, call `image_apply_auto_tone` first; use this tool only for follow-up fine-tuning. **Adjustment groups — set only the fields you need:** - Exposure: `exposure`, `gamma`, `exposureOffset` - Tonal regions: `highlights`, `lights`, `darks`, `shadows` - Brightness / contrast: `brightness`, `contrast` - Color temperature: `tempA` + `tempB` + `tempLuminance` (all three required) - Hue / sat / lightness: `hslHue` + `hslSaturation` + `hslLightness` (all three required; optionally add `colorize` or `targetColor`) - Vibrance / saturation: `vibrance`, `saturation` - Per-channel saturation: `channelTarget` + `channelSaturation` (both required) **Why this tool:** - CIELAB color temperature: precise warm/cool via Lab colorspace - Vibrance: smart saturation that protects skin tones - Camera Raw tone controls: exposure, gamma, offset, tonal regions - Deterministic single-pass pipeline: all adjustments applied in optimal fixed order in one call To target a specific object or area in the image: 1. If the user provides a mask URL, use it to limit the effect to that region. 2. If no mask URL is provided but the user wants to target a specific area, first use available masking tools to create a mask based on their description, then apply the effect. 3. If no mask is specified and no targeting is requested, apply the effect to the entire image. **Output Format:** ALWAYS use `outputFileType: "png"`. PNG is required — it preserves lossless quality and transparency through multi-step edits and selection-mask chains. Only use `"jpeg"` when the user has explicitly requested JPEG format for the final result. **Pipeline order (fixed, applied server-side):** exposure → highlights → lights → darks/shadows → brightness/contrast → colorTemperature → hsl → vibrance/saturation → channelSaturation. To enforce a different effective order, call this tool multiple times, chaining each results[].outputUrl into the next call's imageURIs. Examples: <example> Too dark / dull / flat: { "exposure": 0.5, "gamma": 1.2, "contrast": 20 } </example> <example> Too bright: { "exposure": -1.0, "highlights": -50 } </example> <example> Warmer: { "tempA": 20, "tempB": 100, "tempLuminance": 55 } </example> <example> Natural color boost (skin-safe): { "vibrance": 30 } </example> <example> Recover shadow detail: { "darks": 40, "shadows": 25 } </example> <example> Recolor a neutral or white object to blue: { "hslHue": 220, "hslSaturation": 60, "hslLightness": 0, "colorize": true } </example> <example> Tone down reds only: { "channelTarget": "red", "channelSaturation": -40 } </example>
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Automatically corrects the tonal balance of the images in one step by adjusting exposure, contrast, highlights, shadows, whites, and blacks. No prior image analysis or preview is needed — call this tool directly. **Use when:** the user describes a tonal or visual problem without specifying exact values or a direction — e.g., "improve", "fix the lighting", "I can't see the subject", "looks flat". Always call this tool first; use `image_apply_adjustments` afterward only if finer manual control is still needed. **Not for:** adjustments where the user specifies a clear direction or amount (e.g., "make shadows warmer", "boost saturation") — use `image_apply_adjustments` directly for those.
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Adds a colored overlay by creating a solid color fill layer with a specified RGB color, blend mode, and layer name. **IMPORTANT: opacity cannot be set on this tool.** If the request mentions any percentage or transparency (e.g. "at 20%", "at 80%", "semi-transparent"), do NOT call this tool — call `image_fill_area` instead, which has an `opacity` parameter. **Use when:** color overlay, color wash, tint filter, color layer on photo. **WHEN NOT TO USE:** filling or replacing the background behind a subject ("fill the background white", "make the background blue"), even on a transparent cutout. This tool's full-canvas fill layer covers the WHOLE image — no blend mode makes it sit behind the subject, so you get a blank solid-color result. Use `image_remove_background` with `options.backgroundColor` instead. 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>
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. **Output Format:** ALWAYS use `outputFileType: "png"`. PNG is required — it preserves lossless quality and transparency through multi-step edits and selection-mask chains. Only use `"jpeg"` when the user has explicitly requested JPEG format for the final result. Applies Gaussian Blur to soften the image or a specific area, targeting the current layer, subject, or background as configured. This is a uniform-radius blur — for a natural shallow depth-of-field / bokeh look with falloff, use `image_apply_lens_blur` instead. **Use when:** blur, soften, defocus, bokeh, out of focus, hazy background. To target a specific object or area in the image: 1. If the user provides a mask URL, use it to limit the effect to that region. 2. If no mask URL is provided but the user wants to target a specific area, first use available masking tools to create a mask based on their description, then apply the effect. 3. If no mask is specified and no targeting is requested, apply the effect to the entire image. Examples: <example> Blur current layer: { "blurRadius": 3.5, "blurTarget": "currentLayer" } </example> <example> Blur subject only: { "blurRadius": 1.5, "blurTarget": "subject" } </example> <example> Blur background only: { "blurRadius": 5.0, "blurTarget": "background" } </example>
Apply a chromatic aberration glitch effect to the ENTIRE image. WHEN TO USE: "add a glitch effect", "make it look glitched", "add chromatic aberration", "VHS effect" - when applying to the whole image. WHEN NOT TO USE: For region-specific effects like "glitch the background" or "glitch only the sky" -> use image_instruct_edit instead, which can target specific areas.
Apply a halftone effect to the image. WHEN TO USE: "make it look like a comic", "add a halftone pattern", "give it a pop art feel", "Ben-Day dots".
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Blurs the background with depth-of-field falloff (bokeh) while keeping the subject sharp. Auto-detects the primary subject and progressively blurs the background — no manual masking. **Output Format:** ALWAYS use `outputFileType: "png"`. PNG is required — it preserves lossless quality and transparency through multi-step edits and selection-mask chains. Only use `"jpeg"` when the user has explicitly requested JPEG format for the final result. **Use ONLY when the user explicitly asks for blur, bokeh, depth-of-field, or out-of-focus background. Takes no mask and ignores selection state — do not chain `image_select_subject` / `image_invert_selection` ahead of it; subject masking is built in. For a uniform-radius blur instead of DoF falloff/bokeh, use `image_apply_gaussian_blur`: either `blurTarget: 'background'` (auto subject detection), or pass a `maskURI` from `image_select_subject` or `image_select_by_prompt` + `image_invert_selection` when you need a custom region or a sharper mask boundary. Example: <example> Apply lens blur: {} </example>
Apply a monochromatic color tint to the image, including black and white conversion. WHEN TO USE: "black and white", "convert to black and white", "grayscale", "monochrome", "add a sepia tone", "tint it blue", "make it duotone", "cyanotype effect", "B&W".
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Applies named Lightroom preset(s) to one or more images in a single batched call, transforming each image's look in one step. A preset adjusts tone, color, contrast, grain, and sharpening together as a unified look. Group the work into `edits`: each entry pairs one `presetName` with the `images` it applies to. Use multiple entries to apply different presets to different images in the same call. WHEN TO USE: the user's request is about **color/tone/mood only** — preset, color grade, film look, vintage, black and white conversion, matte finish, warm tone, cool tone, skin tone edit, vignette, cinematic grade, dramatic sky, sharpen, add grain, subject pop. WHEN NOT TO USE: composed-look requests that imply a different background, subject/background separation, or relighting — e.g. "studio photo", "product shot", "clean white backdrop", "magazine cover", "headshot on grey", "professional portrait". Those require structural changes that presets cannot produce. In those cases, build the composition first (isolate subject, replace background, relight) using the subject-selection / fill / blur / exposure tools, and only then apply a preset as the final color pass if needed. **One look per result:** Presets are a complete look, not additive filters. Apply a single preset as the final color/tone step for any given output, and do NOT re-run this tool on an image that already has a preset baked in — chaining presets on the same pixels compounds the effect and looks unnatural. Listing the *same* source image under *different* presets is fine: each preset is applied independently to the original image and produces a separate variant. 100+ presets across 14 categories: B&W (10), Color (6), Creative (13), Curve (4), Defaults (4 profiles with optional lens correction / noise reduction), Grain (3), Optics (3), Portraits (13: light/medium/deep skin variants), Sharpening (3), Vignetting (3), Adaptive (19: portrait, sky, subject, background blur), Auto+ (3: retro), Style (12: futuristic, cinematic II, film-inspired, vintage, B&W), Subject (8: travel, food, lifestyle). The catalog also includes a handful of curated **custom** presets that apply as a complete look exactly like the built-in ones. **Important:** The categories above are summaries, not exact preset names. You MUST call `image_list_presets` first to get the exact display names — preset names have specific formatting (e.g. "B&W - B&W High Contrast", not "B&W High Contrast"). Do not guess preset names. Returns one result per (preset, image) pair, each carrying the applied `presetName` in its metadata. Examples: <example> One preset on two photos: { "edits": [ { "presetName": "B&W - B&W High Contrast", "images": [ "https://example.com/a.jpg", "https://example.com/b.jpg" ] } ] } </example> <example> A different preset per photo: { "edits": [ { "presetName": "B&W - B&W High Contrast", "images": [ "https://example.com/a.jpg" ] }, { "presetName": "Style: Vintage - VN07", "images": [ "https://example.com/b.jpg" ] } ] } </example> <example> Two looks of one photo (independent variants): { "edits": [ { "presetName": "B&W - B&W High Contrast", "images": [ "https://example.com/a.jpg" ] }, { "presetName": "Style: Vintage - VN07", "images": [ "https://example.com/a.jpg" ] } ] } </example>
Automatically straighten and level the image. WHEN TO USE: "straighten this", "fix the horizon", "level the image", "the photo is crooked".
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Smart crop and resize with subject-aware positioning. Automatically detects subjects and positions crops intelligently. **Preferred tool for tight subject / product / face crops** — uses server-side face/subject/prompt detection, which is far more reliable than estimating 0-1 bounds visually. If the user asks to "crop to only X", "tight crop on X", "isolate X", or frame any nameable subject, use this tool with fit: "extract" rather than image_crop_to_bounds. For geometric crops (halves, quarters, fixed percentages, letterbox bars) where no subject detection is needed, use image_crop_to_bounds directly. **Key capabilities:** - Crop to exact dimensions with subject-aware focus (face, upper_body, or custom point) - Focus on arbitrary objects by text prompt (e.g., "the red car", "the dog") - Crop to aspect ratio at source resolution ("16:9", "4:5", etc.) - Resize to a single dimension (proportional scaling) - Pad mode: fit entire image within target dimensions with transparent (PNG only) or white background (JPEG only) fill - Adjustable per-side margins around detected subjects (margin: 0.15 = 15% of subject size added to each side) - Custom alignment (rule of thirds, etc.) **align parameter** — controls where the focus point lands in the output frame (0=left/top, 0.5=center, 1=right/bottom). Only set the axis you want to shift; omit for centered crops. - "subject in the left third" → align: { x: 0.33 } - "subject in the right third" → align: { x: 0.67 } - "face in upper third" → align: { y: 0.33 } - "rule of thirds, upper-left" → align: { x: 0.33, y: 0.33 } - "leave space on the right for text" → align: { x: 0.3 } - "leave space above for a title" → align: { y: 0.6 } - "subject at the bottom" → align: { y: 0.75 } Values below 0.5 push the subject toward top-left; above 0.5 toward bottom-right. **Note:** align has no effect on an axis when the crop spans the full source dimension on that axis (e.g., cropping a landscape to portrait uses the full source height, so align.y cannot move the crop). When this happens, an "align_constrained" tradeoff is recorded in metadata. align may also be partially overridden to keep the detected subject visible in the crop. **Aspect compatibility & clipping:** `fit: "reframe"` cannot grow the crop; when source and target aspect differ sharply (portrait → landscape or vice versa) the subject **will** clip and no `focus`/`align`/`margin` can prevent it. On `focus: "subject"` the tool auto-retries with `focus: "face"` when the subject looks upright (tall bbox, a proxy for "person"); non-upright subjects (pets, produce, landscapes) skip this step. If still clipped (`visible_fraction < 0.7`), `onSubjectClipping` kicks in: `"expand"` (default — emits a `requires_expand_chain` tradeoff with pre-filled `image_generative_expand` args; baseline action is an extract crop) · `"extract"` (tight crop, may upscale) · `"pad"` (letterbox, no loss) · `"error"` (fail with guidance) · `"ignore"` (tradeoffs only). **`requires_expand_chain` tradeoff:** invoke the pre-filled `next_call` (image_generative_expand) exactly as given, then re-invoke image_crop_and_resize with the same arguments, replacing `imageURI` with the expand output URL. The baseline action returned alongside this tradeoff is an extract crop — usable as a fallback, but chaining yields the content-preserving result. **`recommend_visual_verify` tradeoff:** the single-region anchor may have clipped content a human would consider essential (most commonly headline text on ads/posters/banners). Call `adobe_inline_preview` on the output. If text, logos, or a secondary region appear clipped, retry with the `suggested_retry` parameters (biasing `align` toward the clipped edge) or with `focus: 'prompt'` naming the clipped content. This signal fires on a geometric heuristic, not content detection, so false positives are expected on pure-photo inputs. **Intent → parameter mapping (use this to pick the right parameters):** - "crop to X" / "isolate X" / "extract just X" / "only the X" → fit: "extract", omit output, margin: 0.02 - "crop around X" / "frame X nicely" → fit: "extract", output: aspect ratio, margin: 0.1–0.2 - "crop for X" / "X in frame" / social media crop → fit: "reframe", output: dimensions, focus on X - "resize for social media" / "make it fit Instagram/TikTok/X" / cross-aspect conversion from one source → use defaults. `onSubjectClipping: "expand"` (default) emits a `requires_expand_chain` tradeoff when the source/target aspects differ sharply; follow the pre-filled `next_call` → `then_retry` sequence to preserve all content. - "chest up" / "waist up" / "from the shoulders" → fit: "extract", focus: "upper_body", margin: 0.02. Works for both single-person and group photos. - "head and hair" / "above the shoulders" / "keep the whole head" / "don't cut off hair/ears" → fit: "extract", focus: "head", margin: 0.05–0.1 **fit modes:** - **"reframe"** (default) — takes the largest possible crop at the target aspect ratio from the source, then positions it using focus/align. Preserves as much of the image as possible. Use for social media crops, aspect ratio changes, and general-purpose resizing where you want broad scene context with the subject kept in frame. - **"extract"** — crops tightly to the detected region (face, upper_body, subject, or prompt match) + margin, then resizes to output if specified. **Important: setting output expands the crop to fit the target aspect ratio, which may pull in content beyond the detected region.** For tight isolation, omit output — the crop auto-sizes to the detected region + margin at source resolution, giving the tightest possible crop around the focus target. Use extract for: headshots, product close-ups, isolating a specific person or object from a group. - **"pad"** — scales the entire image to fit inside the target dimensions without cropping, fills remaining space with transparent (PNG) or white (JPEG) background. **focus values for people:** - **"subject"** — detects the full body. In reframe: keeps the whole person in frame. In extract: crops to the full body. - **"face"** — detects only the face region (jawline up, no hair or ears). Best with extract mode for headshots and passport photos. In reframe: centers the crop on the face but the crop is still wide. Use margin to control how much beyond the face to include (e.g., margin: { bottom: 1.5 } extends 1.5× face height below). - **"head"** — detects the whole head above the neck: face + beard + hair + ears. Tighter than "upper_body", wider than "face". Use when hair or ears must stay in frame (big hair, hats, earrings, profile shots) without including shoulders. The crop centers on the face; margin extends outward from the head bounds. - **"upper_body"** — detects head + hair + torso + hands as a combined region. Best with extract mode for chest-up portraits and profile photos. Works for both single-person and group photos — in groups, crops to the chest-up region of all detected people. **focus: { prompt }** — for non-human objects, specific items among many, or when you need to name what to focus on (e.g., "the red car", "the golden retriever", "the flowers"). Unions all matching objects — { prompt: "the cats" } will frame all cats, not just one. **When to use reframe (default):** - Resize images to a target resolution - Crop images to social media dimensions (Instagram square, Twitter header, etc.) - Broad scene crops that keep faces/subjects visible - Crop around specific objects by description (prompt focus) **When to use extract (with output — framed crop):** - Headshots, passport photos, profile pictures (face or upper_body focus + aspect ratio) - Product photos cropped to a specific format **When to use extract (without output — tight isolation):** - Isolating a specific person from a group photo ("crop to the middle person") - Extracting just one object from a busy scene ("just the dog", "only the red car") - Product cutouts from wider shots - Any request implying "only", "just", or "isolate" **When to use pad:** - Letterbox/pillarbox when content must not be cropped **NOT supported** (do not attempt — no parameters exist for these): - Circle or shape crops — only rectangular crops - Blurred background fill — pad mode uses solid color (transparent for PNG, white for JPEG) - Color adjustments, filters, or effects — use dedicated editing tools instead - Batch/multi-image crop in one call — call this tool once per image **Common social media dimensions:** - 1080x1350 for Instagram post portrait (4:5) — most common crop - 1080x1080 for Instagram post (square) - 1080x1920 for Instagram/TikTok story (9:16 vertical) - 1200x675 for X (Twitter) post - 1280x720 for YouTube thumbnail - 1200x630 for Facebook post Examples: <example> Resize to 800px wide, maintain aspect ratio: { output: { width: 800 } } </example> <example> Crop to Instagram square, focus on face: { output: { width: 1080, height: 1080 }, focus: "face" } </example> <example> Crop to 16:9 at source resolution: { output: "16:9" } </example> <example> Crop with face in left third: { output: { width: 1280, height: 720 }, focus: "face", align: { x: 0.33 } } </example> <example> Pad to IG story with transparent or white background: { output: { width: 1080, height: 1920 }, fit: "pad" } </example> <example> Crop to 4:5 with 30% total breathing room around subject (15% per side): { output: "4:5", focus: "subject", margin: 0.15 } </example> <example> IG portrait, leave space above for text: { output: { width: 1080, height: 1350 }, focus: "subject", align: { y: 0.6 } } </example> <example> Place subject in the right third: { output: { width: 1500, height: 1350 }, focus: "subject", align: { x: 0.66 } } </example> <example> Square crop around the dog: { output: { width: 1080, height: 1080 }, focus: { prompt: "the dog" } } </example> <example> Crop to 16:9 focused on the red car: { output: "16:9", focus: { prompt: "the red car" } } </example> <example> Crop around the flowers with breathing room: { output: { width: 1200, height: 630 }, focus: { prompt: "the flowers" }, margin: 0.2 } </example> <example> Product on the left, space for text on right: { output: { width: 1200, height: 675 }, focus: { prompt: "the sneaker" }, align: { x: 0.3 } } </example> <example> Extra space below subject for caption: { output: { width: 1080, height: 1080 }, focus: "subject", margin: { bottom: 0.3 } } </example> <example> More headroom above face, tight sides: { fit: "extract", output: "4:5", focus: "face", margin: { top: 0.5, left: 0.3, right: 0.3 } } </example> <example> Passport photo (head + shoulders, square): { fit: "extract", output: "1:1", focus: "face", margin: { top: 0.3, bottom: 1.5, left: 0.8, right: 0.8 } } </example> <example> Professional headshot (chest up): { fit: "extract", output: "4:5", focus: "upper_body" } </example> <example> LinkedIn profile photo (upper body, square): { fit: "extract", output: { width: 800, height: 800 }, focus: "upper_body", margin: 0.1 } </example> <example> Group photo chest-up crop: { fit: "extract", focus: "upper_body", margin: 0.02 } </example> <example> Isolate the middle person from a group photo: { fit: "extract", focus: { prompt: "the middle person" }, margin: 0.02 } </example> <example> Crop to just the dog: { fit: "extract", focus: { prompt: "the dog" }, margin: 0.02 } </example> <example> Extract the cat tightly (auto-sized from detection): { fit: "extract", focus: { prompt: "the cat" } } </example> <example> Extract subject with breathing room (auto-sized): { fit: "extract", focus: "subject", margin: 0.2 } </example> **Fallback to image_crop_to_bounds if available:** - **Detection miss (silent):** preview shows wrong region, empty match (`prompt_no_match` tradeoff), or subject in an unexpected position → switch to image_crop_to_bounds with explicit 0-1 coordinates. Legitimate use of geometric bounds — the subject is already visually located in the preview. - **Hard error:** retry once. If it still fails with a detection error (no match), fall back to image_crop_to_bounds. If it's infrastructural (auth, rate limit, unsupported format), surface to the user. - **When falling back for a subject crop, pad the bounds by 5–8% outward (not inward).** Visual estimates of a subject's extent tend to clip limbs / edges; a little extra background is imperceptible, a clipped hand or ear is not. This is the opposite of image_crop_to_bounds' border-removal guidance — for borders you overshoot inward; for subjects you overshoot outward.
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. **PREREQUISITE: call asset_inline_preview or read_image (whichever is available) on the input image first.** Choosing bounds without a current visual can clip subjects, miss borders or crop the wrong region. If the only information you have is the filename or a description, you do NOT have enough grounding; preview first, then choose bounds from what you see. Crop images to exact geometric bounds using normalized coordinates (0-1). Each coordinate is a fraction of the image dimension: 0 = top/left edge, 1 = bottom/right edge. The same normalized bounds are applied to every image — since coordinates are relative, images of different sizes produce proportionally equivalent crops. **Use ONLY for geometric / compositional crops** where the region is specified by position, not by subject: - "the left half", "center 50%", "top-right quarter" - "remove 10% from all edges", "trim the black letterbox bars" - "16:9 letterbox from the center" - Fast, deterministic crops with no detection overhead needed. **Do NOT use this tool as the first choice for subject / product / face crops** — even if you can see the subject clearly. Visual coordinate estimation is unreliable for tight framing and frequently leaves empty regions on one side or clips the subject on the other (a recurring failure mode). For any of these, use image_crop_and_resize first: - "crop to only the product", "crop to the tube / bottle / box", "isolate X", "just the dog" → image_crop_and_resize with fit: "extract" + focus + margin - "crop this to 16:9 keeping the subject in frame", social media crops with a subject → image_crop_and_resize with default fit: "reframe" + focus - Any request to frame a nameable subject — server-side face/subject/prompt detection is far more reliable than eyeballing 0-1 coordinates from a preview. - **Decorative frame / ornate border / rotated-subject-on-background** (e.g. a framed document, certificate, photo on a desk, scanned paper that isn't axis-aligned): the inner content is a subject, not a geometric crop — the frame edges don't align with the image edges. Use image_crop_and_resize with fit: "extract" and focus: { prompt: "<the subject>" }. **Use this tool as a fallback when image_crop_and_resize detection misses** (empty match, wrong region, or subject in an unexpected position). In that case the subject is already visually located in the preview, so explicit coordinates are the right escape hatch — pad bounds by 5–8% outward around the subject to avoid clipping limbs / edges that are easy to under-estimate visually. **Border / letterbox / frame removal — overshoot, single call.** Rule: if the visible border is V% on a side, set the inner bound to **at least V + 5** on that side. Never equal, never less. Measure each side independently — for asymmetric frames (e.g. Polaroid with a thicker bottom), do NOT default to symmetric bounds. If a sliver survives, jump by another 5–10% — do not nudge by 1%. After the call, follow the `importantNote` on the result to verify the output visually before reporting success. Examples (all geometric — no subject estimation): <example> Center 50%: { top: 0.25, left: 0.25, bottom: 0.75, right: 0.75 } </example> <example> Left half: { top: 0, left: 0, bottom: 1, right: 0.5 } </example> <example> Top-right quarter: { top: 0, left: 0.5, bottom: 0.5, right: 1 } </example> <example> Remove 10% from all edges: { top: 0.1, left: 0.1, bottom: 0.9, right: 0.9 } </example> <example> Thin border ≈3% per side, overshoot to 8%: { top: 0.08, left: 0.08, bottom: 0.92, right: 0.92 } </example> <example> Symmetric border ≈5% per side, overshoot to 10%: { top: 0.10, left: 0.10, bottom: 0.90, right: 0.90 } </example> <example> Asymmetric frame — 3% top/sides and 15% bottom, overshoot each side independently (8%/8%/20%/8%): { top: 0.08, left: 0.08, bottom: 0.80, right: 0.92 } </example> <example> Letterbox ~12% top/bottom, +5% overshoot: { top: 0.17, left: 0, bottom: 0.83, right: 1 } </example>
**Session prerequisite:** Call `adobe_mandatory_init` once before using any Adobe tool in this session. If its response is already in your context window, do not call it again — the instructions it returns remain in effect for the entire session. Fills a masked area of the image with a solid color at a specified opacity. The mask's white pixels are filled; black pixels are preserved. WHEN TO USE: filling a specific masked region (not the whole background-behind-the-subject) with a solid color. Typical cases: a sub-region selected by prompt (e.g. "the sky", "the wall"), a user-supplied mask, a region from `image_select_by_prompt`, or compositing flat color into part of a layout. WHEN NOT TO USE: replacing the entire background behind a subject with a solid color — however phrased (e.g. "fill the background with green", "make the background white", "give it a red background", "put a solid <color> behind the subject"). Use `image_remove_background` with `options.backgroundColor` instead (single call) — it detects the subject and composites it onto the color in one step. Do not use a generative tool such as `image_instruct_edit` for this, and do not chain `image_select_subject` → `image_invert_selection` → this tool — either mistake fills the subject instead of the background. Do not feed the transparent PNG output of `image_remove_background` into this tool as a mask — it has alpha, not black/white mask semantics, and will produce wrong polarity. 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>
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Adobe alternatives on ChatGPT?
As of 2026-08-14, Adobe competes with YouCam (beta) in ChatGPT Photo & Image Editing, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.