/adobe-expand-image
This skill extends a single photo beyond its borders with Adobe Firefly Generative Expand without cropping the original composition. Use when someone asks to expand, uncrop, outpaint or zoom out an image, add background or breathing room, or fit one photo to a new shape (16:9,
Claude Code
$ npx -y skills add adobe/skills --skill adobe-expand-image --agent claude-code
Codex
$ npx skills add adobe/skills --skill adobe-expand-image -a codex -y
Cursor
$ npx skills add adobe/skills --skill adobe-expand-image -a cursor -y
Gemini CLI
$ npx skills add adobe/skills --skill adobe-expand-image -a gemini-cli -y
GitHub Copilot
$ npx skills add adobe/skills --skill adobe-expand-image -a github-copilot -y
OpenCode
$ npx skills add adobe/skills --skill adobe-expand-image -a opencode -y
Windsurf
$ npx skills add adobe/skills --skill adobe-expand-image -a windsurf -y
SKILL.md
adobe-expand-image.SKILL.mdname: adobe-expand-image
description: >
This skill extends a single photo beyond its borders with Adobe Firefly Generative Expand without cropping the original composition. Use when someone asks to expand, uncrop, outpaint or zoom out an image, add background or breathing room, or fit one photo to a new shape (16:9, 9:16, square, phone, story, wallpaper, banner, thumbnail, 1920x1080), unless they explicitly ask to crop. It is not for social-media packs or same-shape resizing.
license: Apache-2.0
compatibility: "Runs on widget-capable surfaces (Claude: asset_add_file picker, asset_preview_file) and on non-UI agents (Codex / ChatGPT Adobe app), where each widget step has a text-only fallback. Raw local paths are never passed to image tools."
allowed-tools: adobe_mandatory_init asset_add_file asset_openai_file_upload asset_initialize_file_upload asset_finalize_file_upload image_crop_and_resize image_generative_expand asset_preview_file
metadata:
version: 1.0.0
visibility: public
surface: [claude, codex]
Adobe Expand Image
Extends one photo outward with **Firefly Generative Expand**. The original composition is retained; an exact-size resize resamples pixels. New content continues the scene (subject, background, perspective, lighting, colour and texture) on the added sides, with no visible seams, borders or repetition. This is the same job as the Firefly *Expand image* quick action, which offers the ratios 1:1, 4:3, 16:9, 3:4 and 9:16.
> **Surface note:** follow the default flow as written. Use a step's *No-widget fallback* only if that widget tool is unavailable on this surface (e.g. Codex). Where no question widget exists, ask questions as plain-text options.
**Gen AI:** ✅ Adobe Firefly Generative Expand (`image_generative_expand`), when available and entitled. On 403 the skill stops and offers labeled non-generative alternatives. It never substitutes one silently.
---
Tool Reference
| Step | Tool | Notes | |------|------|-------| | 0 | `adobe_mandatory_init` | First call; gives tool availability and egress status | | 1 | `asset_add_file` | Pick or upload the source photo *(widget; used if available)* | | 1 | `asset_openai_file_upload` | Stage a file attached in ChatGPT *(Codex/ChatGPT only; used if available)* | | 1 | `asset_initialize_file_upload` + `asset_finalize_file_upload` | Stage a local file when there is no picker *(no-widget fallback)* or when egress is enabled | | 3 | — | Read the source dimensions from file metadata or ask the user; do not make an editing call just to discover dimensions | | 3 | `image_generative_expand` | The expansion itself (`options.expandPixels`, each side 0–4096 px) | | 4 | `image_crop_and_resize` | Only when the user asked for exact output pixels: same-ratio resize of the expanded image | | 5 | `asset_preview_file` | Before/after preview *(widget; no-widget fallback: labeled URLs)* |
---
Workflow
Step 0 — Initialize Adobe Tools
Call `adobe_mandatory_init` first:
{ "skill_name": "adobe-expand-image", "skill_version": "1.0.0" }Then check which tools are available:
- **Required:** `image_generative_expand`. If it is missing, tell the user: *"Expanding images isn't available with your current Adobe connection. Please disconnect and reconnect the Adobe connector, signing in with an Adobe account."* Then stop.
- `image_crop_and_resize` is needed only when the user requests exact output pixels. If it is unavailable, continue the expansion, explain that exact resizing and letterboxing are unavailable here, and ask whether the user wants the expanded image as-is.
- **Used if available:** `asset_add_file` and `asset_preview_file`. If they are missing, use each step's fallback. Never stop because of them.
Step 1 — Get the source photo
| Where the photo is | Action | |---|---| | Attached in ChatGPT and `asset_openai_file_upload` is available | Call `asset_openai_file_upload` with the attached file and use the returned URL. Don't pass the local path to `asset_upload_file_from_url`: it only accepts https URLs | | Attached in chat as a local file | If egress is enabled (per `adobe_mandatory_init`), stage it: `asset_initialize_file_upload` → PUT → `asset_finalize_file_upload`. Use the returned presigned URL. If egress is disabled, call `asset_add_file()` | | Not provided yet | Call `asset_add_file()` right away; don't ask first | | An https URL | Use it directly | | A Creative Cloud file the user names and `asset_add_file` is available | Call `asset_add_file()` so they can pick it, and use the returned URL. Never pass an asset id or URN to an image tool: image tools take http(s) URLs only |
> **No-widget fallback** *(only if `asset_add_file` is unavailable, e.g. Codex)*: stage the local file programmatically as above. If egress is disabled too, tell the user the file can't be staged here and ask for a fetchable HTTPS image URL. A named Creative Cloud file is usable only when a supported picker is available.
Accept JPG, PNG and WEBP photos. For any other file (PDF, DOCX, video), say that only images can be expanded, and stop.
Step 2 — Decide how far to expand
Read the request into **one** of these targets:
| The user says | Target | |---|---| | A ratio: "16:9", "make it square", "portrait / 9:16", "4:3", "3:4", "for a banner" or "desktop wallpaper" (16:9), "phone screen" or "story" (9:16) | `ratio` (string, e.g. `"16:9"`) | | Sides and amounts: "add 500 px on the left", "more sky on top", "extend both sides" | `pixels` per side. If no amount is given, use 25% of the image's width (left/right) or height (top/bottom), rounded to a whole number | | Exact pixels: "1920×1080 without cropping" | `ratio` from the size (1920×1080 → `"16:9"`), plus `final_size` for Step 4 | | Only "expand this", "zoom out", "too tight", "give it breathing room" | Ask once, using the quick action's options: **Square 1:1 · Landscape 4:3 · Widescreen 16:9 · Portrait 3:4 · Story 9:16**. Default to 1:1 if the user says "you pick" |
Read more
name: adobe-expand-image description: > This skill extends a single photo beyond its borders with Adobe Firefly Generative Expand without cropping the original composition. Use when someone asks to expand, uncrop, outpaint or zoom out an image, add background or breathing room, or fit one photo to a new shape (16:9, 9:16, square, phone, story, wallpaper, banner, thumbnail, 1920x1080), unless they explicitly ask to crop. It is not for social-media packs or same-shape resizing. license: Apache-2.0 compatibility: "Runs on widget-capable surfaces (Claude: asset_add_file picker, asset_preview_file) and on non-UI agents (Codex / ChatGPT Adobe app), where each widget step has a text-only fallback. Raw local paths are never passed to image tools." allowed-tools: adobe_mandatory_init asset_add_file asset_openai_file_upload asset_initialize_file_upload asset_finalize_file_upload image_crop_and_resize image_generative_expand asset_preview_file metadata: version: 1.0.0 visibility: public surface: [claude, codex]
Adobe Expand Image
Extends one photo outward with **Firefly Generative Expand**. The original composition is retained; an exact-size resize resamples pixels. New content continues the scene (subject, background, perspective, lighting, colour and texture) on the added sides, with no visible seams, borders or repetition. This is the same job as the Firefly *Expand image* quick action, which offers the ratios 1:1, 4:3, 16:9, 3:4 and 9:16.
> **Surface note:** follow the default flow as written. Use a step's *No-widget fallback* only if that widget tool is unavailable on this surface (e.g. Codex). Where no question widget exists, ask questions as plain-text options.
**Gen AI:** ✅ Adobe Firefly Generative Expand (`image_generative_expand`), when available and entitled. On 403 the skill stops and offers labeled non-generative alternatives. It never substitutes one silently.
---
Tool Reference
| Step | Tool | Notes | |------|------|-------| | 0 | `adobe_mandatory_init` | First call; gives tool availability and egress status | | 1 | `asset_add_file` | Pick or upload the source photo *(widget; used if available)* | | 1 | `asset_openai_file_upload` | Stage a file attached in ChatGPT *(Codex/ChatGPT only; used if available)* | | 1 | `asset_initialize_file_upload` + `asset_finalize_file_upload` | Stage a local file when there is no picker *(no-widget fallback)* or when egress is enabled | | 3 | — | Read the source dimensions from file metadata or ask the user; do not make an editing call just to discover dimensions | | 3 | `image_generative_expand` | The expansion itself (`options.expandPixels`, each side 0–4096 px) | | 4 | `image_crop_and_resize` | Only when the user asked for exact output pixels: same-ratio resize of the expanded image | | 5 | `asset_preview_file` | Before/after preview *(widget; no-widget fallback: labeled URLs)* |
---
Workflow
Step 0 — Initialize Adobe Tools
Call `adobe_mandatory_init` first:
{ "skill_name": "adobe-expand-image", "skill_version": "1.0.0" }Then check which tools are available:
- **Required:** `image_generative_expand`. If it is missing, tell the user: *"Expanding images isn't available with your current Adobe connection. Please disconnect and reconnect the Adobe connector, signing in with an Adobe account."* Then stop.
- `image_crop_and_resize` is needed only when the user requests exact output pixels. If it is unavailable, continue the expansion, explain that exact resizing and letterboxing are unavailable here, and ask whether the user wants the expanded image as-is.
- **Used if available:** `asset_add_file` and `asset_preview_file`. If they are missing, use each step's fallback. Never stop because of them.
Step 1 — Get the source photo
| Where the photo is | Action | |---|---| | Attached in ChatGPT and `asset_openai_file_upload` is available | Call `asset_openai_file_upload` with the attached file and use the returned URL. Don't pass the local path to `asset_upload_file_from_url`: it only accepts https URLs | | Attached in chat as a local file | If egress is enabled (per `adobe_mandatory_init`), stage it: `asset_initialize_file_upload` → PUT → `asset_finalize_file_upload`. Use the returned presigned URL. If egress is disabled, call `asset_add_file()` | | Not provided yet | Call `asset_add_file()` right away; don't ask first | | An https URL | Use it directly | | A Creative Cloud file the user names and `asset_add_file` is available | Call `asset_add_file()` so they can pick it, and use the returned URL. Never pass an asset id or URN to an image tool: image tools take http(s) URLs only |
> **No-widget fallback** *(only if `asset_add_file` is unavailable, e.g. Codex)*: stage the local file programmatically as above. If egress is disabled too, tell the user the file can't be staged here and ask for a fetchable HTTPS image URL. A named Creative Cloud file is usable only when a supported picker is available.
Accept JPG, PNG and WEBP photos. For any other file (PDF, DOCX, video), say that only images can be expanded, and stop.
Step 2 — Decide how far to expand
Read the request into **one** of these targets:
| The user says | Target | |---|---| | A ratio: "16:9", "make it square", "portrait / 9:16", "4:3", "3:4", "for a banner" or "desktop wallpaper" (16:9), "phone screen" or "story" (9:16) | `ratio` (string, e.g. `"16:9"`) | | Sides and amounts: "add 500 px on the left", "more sky on top", "extend both sides" | `pixels` per side. If no amount is given, use 25% of the image's width (left/right) or height (top/bottom), rounded to a whole number | | Exact pixels: "1920×1080 without cropping" | `ratio` from the size (1920×1080 → `"16:9"`), plus `final_size` for Step 4 | | Only "expand this", "zoom out", "too tight", "give it breathing room" | Ask once, using the quick action's options: **Square 1:1 · Landscape 4:3 · Widescreen 16:9 · Portrait 3:4 · Story 9:16**. Default to 1:1 if the user says "you pick" |
Other skills on skills.
More skills from other plugins.
karpathy-guidelines
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
agent-builder
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…
Questions about adobe-expand-image.
- Which coding agents can use adobe-expand-image?
- adobe-expand-image installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

