[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M77SYSGFWNETWNKGPABDNKY3":3,"skill-same:01M77SYSGFWNETWNKGPABDNKY3":48},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":14,"repositoryHtmlUrl":30,"repositoryHomepageUrl":6,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M77SYSGFWNETWNKGPABDNKY3","runcomfy-image-edit",null,"Edit images on RunComfy — this skill is a smart router that matches the user's intent to the right edit model in the RunComfy catalog. Picks Nano Banana Edit (batch up to 20, identity-preserving default), OpenAI GPT Image 2 Edit (multilingual in-image text rewrite, multi-ref composition, layout precision), Flux Kontext Pro (single-ref high-fidelity local edit), or Z-Image Turbo Inpaint (mask-driven precise region edit). Bundles each model's documented prompting patterns so the skill gets sharper edits without burning iterations on the wrong model. Calls `runcomfy run \u003Cvendor>\u002F\u003Cmodel>\u002Fedit` through the local RunComfy CLI. Triggers on \"image edit\", \"edit image\", \"image-to-image\", \"i2i\", \"swap background\", \"remove object\", \"rewrite headline\", or any explicit ask to edit a single or batch of images.","janpereira-dev\u002FskillsCurate","janpereira-dev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6440548?v=4","01M6KKKXBFFK7QF5Y2JFXN35FF","Jan Pereira","01M77ND31QCT5KM25E1SW71M8F",0,"MIT","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fruncomfy-image-edit\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: runcomfy-image-edit\ndisplayName: \"Image Edit — Pro Pack on RunComfy\"\ndescription: >\n  Edit images on RunComfy — this skill is a smart router that matches\n  the user's intent to the right edit model in the RunComfy catalog.\n  Picks Nano Banana Edit (batch up to 20, identity-preserving default),\n  OpenAI GPT Image 2 Edit (multilingual in-image text rewrite,\n  multi-ref composition, layout precision), Flux Kontext Pro\n  (single-ref high-fidelity local edit), or Z-Image Turbo Inpaint\n  (mask-driven precise region edit). Bundles each model's documented\n  prompting patterns so the skill gets sharper edits without burning\n  iterations on the wrong model. Calls `runcomfy run \u003Cvendor>\u002F\u003Cmodel>\u002Fedit`\n  through the local RunComfy CLI. Triggers on \"image edit\", \"edit image\",\n  \"image-to-image\", \"i2i\", \"swap background\", \"remove object\",\n  \"rewrite headline\", or any explicit ask to edit a single or batch\n  of images.\nhomepage: https:\u002F\u002Fwww.runcomfy.com\nlicense: MIT\n---\n\n# Image Edit — Pro Pack on RunComfy\n\n[runcomfy.com](https:\u002F\u002Fwww.runcomfy.com\u002F?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [Nano Banana Edit](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Fgoogle\u002Fnano-banana-2\u002Fedit?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [GPT Image 2 Edit](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Fopenai\u002Fgpt-image-2\u002Fedit?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [Flux Kontext](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Fblackforestlabs\u002Fflux-1-kontext-pro\u002Fimage-to-image?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [Z-Image Inpaint](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Ftongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [GitHub](https:\u002F\u002Fgithub.com\u002Fagentspace-so\u002Fruncomfy-skills\u002Ftree\u002Fmain\u002Fimage-edit)\n\n**Image edit, intent-routed.** This skill doesn't lock you to one model — it picks the right edit model in the RunComfy catalog based on what the user actually wants: batch identity-preservation, multilingual text rewrite, single-shot precise edit, or mask-driven region replacement.\n\n```bash\nnpx skills add agentspace-so\u002Fruncomfy-skills --skill image-edit -g\n```\n\n## Pick the right model for the user's intent\n\n| User intent | Model | Why |\n|---|---|---|\n| Batch edit 1–20 images consistently (SKU gallery, A\u002FB variants) | **Nano Banana Edit** | Up to 20 input images per call; locked aspect\u002Fresolution for series |\n| Swap background, preserve subject identity | **Nano Banana Edit** | Strong identity preservation under \"keep X unchanged\" prompts |\n| Localized object removal \u002F addition with spatial language (\"the left object\", \"upper-right corner\") | **Nano Banana Edit** | Honors directional spatial scope |\n| Multilingual \u002F non-Latin in-image text rewrite (Japanese kana, Cyrillic, Arabic) | **GPT Image 2 Edit** | Strongest in class for multilingual typography |\n| Multi-reference composition (subject from img1, scene from img2, palette from img3) | **GPT Image 2 Edit** | Numbered refs route cues correctly |\n| Layout-precise repositioning (\"move headline from top-right to bottom-center\") | **GPT Image 2 Edit** | Directional language honored at layout level |\n| Identity preservation across translated headline variants | **GPT Image 2 Edit** | Same source asset → many language variants, identity stable |\n| Single-shot precise local edit (\"she's now holding an orange umbrella\") | **Flux Kontext Pro** | Single-ref single-instruction, high-fidelity preservation |\n| Mask-driven object removal (cables, watermarks, distractions) | **Z-Image Turbo Inpaint** | Mask-required, strength-tunable, edge-consistent |\n| Mask-driven region replacement (full background swap with mask) | **Z-Image Turbo Inpaint** | High strength + clean mask = clean replacement |\n| Default if unspecified | **Nano Banana Edit** | Most flexible, supports both single and batch |\n\nThe agent reads this table, classifies the user's intent, and picks the matching subsection below.\n\n## Prerequisites\n\n1. **RunComfy CLI** — `npm i -g @runcomfy\u002Fcli`\n2. **RunComfy account** — `runcomfy login`.\n3. **CI \u002F containers** — set `RUNCOMFY_TOKEN=\u003Ctoken>`.\n\n---\n\n## Route 1: Nano Banana Edit — default for general edit + batch\n\n**Model**: `google\u002Fnano-banana-2\u002Fedit`\n\n### Schema\n\n| Field | Type | Required | Default | Notes |\n|---|---|---|---|---|\n| `prompt` | string | yes | — | Lead with preservation goals, end with the change. |\n| `image_urls` | array | yes | — | **1–20** publicly-fetchable HTTPS URLs. |\n| `number_of_images` | int | no | 1 | 1–4 outputs per call. |\n| `aspect_ratio` | enum | no | `auto` | `auto` follows input; lock for batch consistency. |\n| `resolution` | enum | no | `1K` | `0.5K` \u002F `1K` \u002F `2K` \u002F `4K`. |\n| `output_format` | enum | no | `png` | `png` \u002F `jpeg` \u002F `webp`. |\n| `seed` | int | no | — | Reproducibility. |\n| `enable_web_search` | bool | no | false | Web-grounded edits (extra latency). |\n\n### Invoke\n\n```bash\nruncomfy run google\u002Fnano-banana-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Keep the subject identity, pose, and clothing unchanged. Convert the background into a rainy neon cyberpunk street.\",\n    \"image_urls\": [\"https:\u002F\u002F...\u002Fportrait.jpg\"]\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n**Batch (lock aspect + resolution):**\n\n```bash\nruncomfy run google\u002Fnano-banana-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Replace the watermark in the bottom-right with the text \\\"AURA\\\" in clean white sans-serif. Keep everything else exactly as in the input.\",\n    \"image_urls\": [\"https:\u002F\u002F...\u002Fsku-1.jpg\", \"https:\u002F\u002F...\u002Fsku-2.jpg\", \"https:\u002F\u002F...\u002Fsku-3.jpg\"],\n    \"aspect_ratio\": \"1:1\",\n    \"resolution\": \"1K\"\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **Preservation first**: `\"Keep [identity \u002F pose \u002F brand \u002F framing] unchanged.\"` Then state the change.\n- **Spatial scope**: \"background only\", \"the left object\", \"upper-right quadrant\" — concrete locations honored.\n- **Batch consistency**: lock `aspect_ratio` and `resolution` across the batch.\n- **Iterate small**: split compound edits into multiple shorter passes.\n\n---\n\n## Route 2: GPT Image 2 Edit — multilingual text + multi-ref composition\n\n**Model**: `openai\u002Fgpt-image-2\u002Fedit`\n\n### Schema\n\n| Field | Type | Required | Default | Notes |\n|---|---|---|---|---|\n| `prompt` | string | yes | — | Edit instruction; lead with preservation. |\n| `images` | string[] | yes | — | **Up to 10** HTTPS URLs. First is primary; rest are auxiliary. |\n| `size` | enum | no | `auto` | `auto`, `1024_1024`, `1024_1536`, `1536_1024`. **Only these.** |\n\n### Invoke\n\n**Multilingual text rewrite:**\n\n```bash\nruncomfy run openai\u002Fgpt-image-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Keep the photograph, layout, and brand mark exactly as in the input. Replace only the in-image headline. The new headline reads \\\"今日のおすすめ\\\" in bold Japanese kana, same position and font weight.\",\n    \"images\": [\"https:\u002F\u002F...\u002Fposter-en.jpg\"]\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n**Multi-ref composition:**\n\n```bash\nruncomfy run openai\u002Fgpt-image-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Compose subject from image 1 into the room from image 2. Match the lighting and color palette of image 2. Keep image 1 subject identity unchanged.\",\n    \"images\": [\"https:\u002F\u002F...\u002Fsubject.jpg\", \"https:\u002F\u002F...\u002Froom.jpg\"]\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **Quote in-image text exactly.** Name the script for non-Latin: `\"Japanese kana\"`, `\"Cyrillic\"`, `\"Arabic right-to-left\"`.\n- **Number multi-refs**: `\"subject from image 1, lighting from image 2\"`.\n- **Directional layout language**: `\"move the headline from top-right to bottom-center\"`, `\"replace the watermark in the bottom-right\"`.\n- **`size: \"auto\"`** preserves input ratio — recommended unless the edit changes framing.\n\n---\n\n## Route 3: Flux Kontext Pro — single-shot precise local edit\n\n**Model**: `blackforestlabs\u002Fflux-1-kontext\u002Fpro\u002Fedit`\n\n### Schema (minimal)\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `prompt` | string | yes | One declarative edit instruction. |\n| `image` | string | yes | **Single** source image URL. |\n| `aspect_ratio` | enum | no | Pick from supported W:H values. |\n| `seed` | int | no | Reproducibility. |\n\nSingle image only — no array. For multi-image flows, use Route 1 (Nano Banana Edit).\n\n### Invoke\n\n```bash\nruncomfy run blackforestlabs\u002Fflux-1-kontext\u002Fpro\u002Fedit \\\n  --input '{\n    \"prompt\": \"Keep the person'\\''s face, pose, and clothing unchanged. Add an orange umbrella in her left hand and a slight smile.\",\n    \"image\": \"https:\u002F\u002F...\u002Fportrait.jpg\"\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **One declarative instruction.** \"She is now holding an orange umbrella and smiling\" — imperative, single change.\n- **Preservation first.** Lead with `\"Keep [unchanged elements]\"` then state the change.\n- **Iterate small.** Compound edits drift on a single pass; split into sequential passes.\n\n---\n\n## Route 4: Z-Image Turbo Inpaint — mask-driven precise region edit\n\n**Model**: `tongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting`\n\n### Schema\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `prompt` | string | yes | What to fill \u002F replace; preservation constraints for the unmasked surround. |\n| `image` | string | yes | Source image URL. |\n| `mask_image` | string | yes | **Grayscale mask URL** (white = inpaint, black = preserve). |\n| `strength` | float | no | 0.3–0.6 retouching, 0.7–1.0 full replacement. |\n| `control_scale` | float | no | 0.6–0.9 typical. |\n| `aspect_ratio` | enum | no | W:H output ratio. |\n| `seed` | int | no | Reproducibility. |\n\n### Invoke\n\n**Object removal (low strength):**\n\n```bash\nruncomfy run tongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting \\\n  --input '{\n    \"prompt\": \"Remove overhead cables; preserve rooflines and sky gradient; thin clean sky.\",\n    \"image\": \"https:\u002F\u002F...\u002Fstreet.jpg\",\n    \"mask_image\": \"https:\u002F\u002F...\u002Fcables-mask.png\",\n    \"strength\": 0.5,\n    \"control_scale\": 0.8\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n**Region replacement (high strength):**\n\n```bash\nruncomfy run tongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting \\\n  --input '{\n    \"prompt\": \"Replace busy backdrop with smooth light gray studio paper; mask background only.\",\n    \"image\": \"https:\u002F\u002F...\u002Fproduct.jpg\",\n    \"mask_image\": \"https:\u002F\u002F...\u002Fbg-mask.png\",\n    \"strength\": 0.9\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **A mask URL is required** — grayscale, white = inpaint region, black = preserve. Slight blur on mask edges (1–3px) blends better than sharp binary.\n- **Strength by intent**: `0.3–0.5` for retouching \u002F cleanup, `0.6–0.7` for object replacement with style match, `0.8–1.0` for full-region replacement.\n- **Name what stays outside the mask** in the prompt: `\"preserve rooflines and sky gradient\"`, `\"match brick pattern and mortar tone\"`.\n- **Spatial labels still help** even though the mask defines the region: `\"the left shelf\"`, `\"upper-right quadrant\"`.\n\n---\n\n## Limitations\n\n- **Each route inherits its model's limits.** Nano Banana: 1–20 inputs, 1–4 outputs. GPT Image 2 Edit: up to 10 refs, 4 fixed sizes. Flux Kontext: single ref. Z-Image Inpaint: mask required.\n- **No multi-route blending.** This skill picks one model per call.\n- **Brand-specific overrides** — if the user named a specific model, route to the corresponding brand skill (`gpt-image-edit`, `flux-kontext`, `nano-banana-edit`) for fuller treatment.\n\n## Exit codes\n\n| code | meaning |\n|---|---|\n| 0  | success |\n| 64 | bad CLI args |\n| 65 | bad input JSON \u002F schema mismatch |\n| 69 | upstream 5xx |\n| 75 | retryable: timeout \u002F 429 |\n| 77 | not signed in or token rejected |\n\nFull reference: [docs.runcomfy.com\u002Fcli\u002Ftroubleshooting](https:\u002F\u002Fdocs.runcomfy.com\u002Fcli\u002Ftroubleshooting?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit).\n\n## How it works\n\nThe skill picks one of Nano Banana Edit \u002F GPT Image 2 Edit \u002F Flux Kontext Pro \u002F Z-Image Turbo Inpaint based on user intent and invokes `runcomfy run \u003Cmodel_id>` with the matching JSON body. The CLI POSTs to the Model API, polls the request, fetches the result, and downloads any `.runcomfy.net`\u002F`.runcomfy.com` URL into `--output-dir`. `Ctrl-C` cancels the remote request before exit.\n\n## Security & Privacy\n\n- **Token storage**: `runcomfy login` writes the API token to `~\u002F.config\u002Fruncomfy\u002Ftoken.json` with mode 0600 (owner-only read\u002Fwrite). Set `RUNCOMFY_TOKEN` env var to bypass the file entirely in CI \u002F containers.\n- **Input boundary**: the user prompt is passed as a JSON string to the CLI via `--input`. The CLI does NOT shell-expand the prompt; it transmits the JSON body directly to the Model API over HTTPS. No shell injection surface from prompt content.\n- **Third-party content**: image \u002F mask \u002F video URLs you pass are fetched by the RunComfy model server, not by the CLI on your machine. Treat external URLs as untrusted; image-based prompt injection is a known risk for any image-edit \u002F video-edit model.\n- **Outbound endpoints**: only `model-api.runcomfy.net` (request submission) and `*.runcomfy.net` \u002F `*.runcomfy.com` (download whitelist for generated outputs). No telemetry, no callbacks.\n- **Generated-file size cap**: the CLI aborts any single download > 2 GiB to prevent disk-fill from a malicious or runaway model output.","# Image Edit — Pro Pack on RunComfy\n\n[runcomfy.com](https:\u002F\u002Fwww.runcomfy.com\u002F?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [Nano Banana Edit](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Fgoogle\u002Fnano-banana-2\u002Fedit?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [GPT Image 2 Edit](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Fopenai\u002Fgpt-image-2\u002Fedit?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [Flux Kontext](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Fblackforestlabs\u002Fflux-1-kontext-pro\u002Fimage-to-image?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [Z-Image Inpaint](https:\u002F\u002Fwww.runcomfy.com\u002Fmodels\u002Ftongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit) · [GitHub](https:\u002F\u002Fgithub.com\u002Fagentspace-so\u002Fruncomfy-skills\u002Ftree\u002Fmain\u002Fimage-edit)\n\n**Image edit, intent-routed.** This skill doesn't lock you to one model — it picks the right edit model in the RunComfy catalog based on what the user actually wants: batch identity-preservation, multilingual text rewrite, single-shot precise edit, or mask-driven region replacement.\n\n```bash\nnpx skills add agentspace-so\u002Fruncomfy-skills --skill image-edit -g\n```\n\n## Pick the right model for the user's intent\n\n| User intent | Model | Why |\n|---|---|---|\n| Batch edit 1–20 images consistently (SKU gallery, A\u002FB variants) | **Nano Banana Edit** | Up to 20 input images per call; locked aspect\u002Fresolution for series |\n| Swap background, preserve subject identity | **Nano Banana Edit** | Strong identity preservation under \"keep X unchanged\" prompts |\n| Localized object removal \u002F addition with spatial language (\"the left object\", \"upper-right corner\") | **Nano Banana Edit** | Honors directional spatial scope |\n| Multilingual \u002F non-Latin in-image text rewrite (Japanese kana, Cyrillic, Arabic) | **GPT Image 2 Edit** | Strongest in class for multilingual typography |\n| Multi-reference composition (subject from img1, scene from img2, palette from img3) | **GPT Image 2 Edit** | Numbered refs route cues correctly |\n| Layout-precise repositioning (\"move headline from top-right to bottom-center\") | **GPT Image 2 Edit** | Directional language honored at layout level |\n| Identity preservation across translated headline variants | **GPT Image 2 Edit** | Same source asset → many language variants, identity stable |\n| Single-shot precise local edit (\"she's now holding an orange umbrella\") | **Flux Kontext Pro** | Single-ref single-instruction, high-fidelity preservation |\n| Mask-driven object removal (cables, watermarks, distractions) | **Z-Image Turbo Inpaint** | Mask-required, strength-tunable, edge-consistent |\n| Mask-driven region replacement (full background swap with mask) | **Z-Image Turbo Inpaint** | High strength + clean mask = clean replacement |\n| Default if unspecified | **Nano Banana Edit** | Most flexible, supports both single and batch |\n\nThe agent reads this table, classifies the user's intent, and picks the matching subsection below.\n\n## Prerequisites\n\n1. **RunComfy CLI** — `npm i -g @runcomfy\u002Fcli`\n2. **RunComfy account** — `runcomfy login`.\n3. **CI \u002F containers** — set `RUNCOMFY_TOKEN=\u003Ctoken>`.\n\n---\n\n## Route 1: Nano Banana Edit — default for general edit + batch\n\n**Model**: `google\u002Fnano-banana-2\u002Fedit`\n\n### Schema\n\n| Field | Type | Required | Default | Notes |\n|---|---|---|---|---|\n| `prompt` | string | yes | — | Lead with preservation goals, end with the change. |\n| `image_urls` | array | yes | — | **1–20** publicly-fetchable HTTPS URLs. |\n| `number_of_images` | int | no | 1 | 1–4 outputs per call. |\n| `aspect_ratio` | enum | no | `auto` | `auto` follows input; lock for batch consistency. |\n| `resolution` | enum | no | `1K` | `0.5K` \u002F `1K` \u002F `2K` \u002F `4K`. |\n| `output_format` | enum | no | `png` | `png` \u002F `jpeg` \u002F `webp`. |\n| `seed` | int | no | — | Reproducibility. |\n| `enable_web_search` | bool | no | false | Web-grounded edits (extra latency). |\n\n### Invoke\n\n```bash\nruncomfy run google\u002Fnano-banana-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Keep the subject identity, pose, and clothing unchanged. Convert the background into a rainy neon cyberpunk street.\",\n    \"image_urls\": [\"https:\u002F\u002F...\u002Fportrait.jpg\"]\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n**Batch (lock aspect + resolution):**\n\n```bash\nruncomfy run google\u002Fnano-banana-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Replace the watermark in the bottom-right with the text \\\"AURA\\\" in clean white sans-serif. Keep everything else exactly as in the input.\",\n    \"image_urls\": [\"https:\u002F\u002F...\u002Fsku-1.jpg\", \"https:\u002F\u002F...\u002Fsku-2.jpg\", \"https:\u002F\u002F...\u002Fsku-3.jpg\"],\n    \"aspect_ratio\": \"1:1\",\n    \"resolution\": \"1K\"\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **Preservation first**: `\"Keep [identity \u002F pose \u002F brand \u002F framing] unchanged.\"` Then state the change.\n- **Spatial scope**: \"background only\", \"the left object\", \"upper-right quadrant\" — concrete locations honored.\n- **Batch consistency**: lock `aspect_ratio` and `resolution` across the batch.\n- **Iterate small**: split compound edits into multiple shorter passes.\n\n---\n\n## Route 2: GPT Image 2 Edit — multilingual text + multi-ref composition\n\n**Model**: `openai\u002Fgpt-image-2\u002Fedit`\n\n### Schema\n\n| Field | Type | Required | Default | Notes |\n|---|---|---|---|---|\n| `prompt` | string | yes | — | Edit instruction; lead with preservation. |\n| `images` | string[] | yes | — | **Up to 10** HTTPS URLs. First is primary; rest are auxiliary. |\n| `size` | enum | no | `auto` | `auto`, `1024_1024`, `1024_1536`, `1536_1024`. **Only these.** |\n\n### Invoke\n\n**Multilingual text rewrite:**\n\n```bash\nruncomfy run openai\u002Fgpt-image-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Keep the photograph, layout, and brand mark exactly as in the input. Replace only the in-image headline. The new headline reads \\\"今日のおすすめ\\\" in bold Japanese kana, same position and font weight.\",\n    \"images\": [\"https:\u002F\u002F...\u002Fposter-en.jpg\"]\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n**Multi-ref composition:**\n\n```bash\nruncomfy run openai\u002Fgpt-image-2\u002Fedit \\\n  --input '{\n    \"prompt\": \"Compose subject from image 1 into the room from image 2. Match the lighting and color palette of image 2. Keep image 1 subject identity unchanged.\",\n    \"images\": [\"https:\u002F\u002F...\u002Fsubject.jpg\", \"https:\u002F\u002F...\u002Froom.jpg\"]\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **Quote in-image text exactly.** Name the script for non-Latin: `\"Japanese kana\"`, `\"Cyrillic\"`, `\"Arabic right-to-left\"`.\n- **Number multi-refs**: `\"subject from image 1, lighting from image 2\"`.\n- **Directional layout language**: `\"move the headline from top-right to bottom-center\"`, `\"replace the watermark in the bottom-right\"`.\n- **`size: \"auto\"`** preserves input ratio — recommended unless the edit changes framing.\n\n---\n\n## Route 3: Flux Kontext Pro — single-shot precise local edit\n\n**Model**: `blackforestlabs\u002Fflux-1-kontext\u002Fpro\u002Fedit`\n\n### Schema (minimal)\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `prompt` | string | yes | One declarative edit instruction. |\n| `image` | string | yes | **Single** source image URL. |\n| `aspect_ratio` | enum | no | Pick from supported W:H values. |\n| `seed` | int | no | Reproducibility. |\n\nSingle image only — no array. For multi-image flows, use Route 1 (Nano Banana Edit).\n\n### Invoke\n\n```bash\nruncomfy run blackforestlabs\u002Fflux-1-kontext\u002Fpro\u002Fedit \\\n  --input '{\n    \"prompt\": \"Keep the person'\\''s face, pose, and clothing unchanged. Add an orange umbrella in her left hand and a slight smile.\",\n    \"image\": \"https:\u002F\u002F...\u002Fportrait.jpg\"\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **One declarative instruction.** \"She is now holding an orange umbrella and smiling\" — imperative, single change.\n- **Preservation first.** Lead with `\"Keep [unchanged elements]\"` then state the change.\n- **Iterate small.** Compound edits drift on a single pass; split into sequential passes.\n\n---\n\n## Route 4: Z-Image Turbo Inpaint — mask-driven precise region edit\n\n**Model**: `tongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting`\n\n### Schema\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `prompt` | string | yes | What to fill \u002F replace; preservation constraints for the unmasked surround. |\n| `image` | string | yes | Source image URL. |\n| `mask_image` | string | yes | **Grayscale mask URL** (white = inpaint, black = preserve). |\n| `strength` | float | no | 0.3–0.6 retouching, 0.7–1.0 full replacement. |\n| `control_scale` | float | no | 0.6–0.9 typical. |\n| `aspect_ratio` | enum | no | W:H output ratio. |\n| `seed` | int | no | Reproducibility. |\n\n### Invoke\n\n**Object removal (low strength):**\n\n```bash\nruncomfy run tongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting \\\n  --input '{\n    \"prompt\": \"Remove overhead cables; preserve rooflines and sky gradient; thin clean sky.\",\n    \"image\": \"https:\u002F\u002F...\u002Fstreet.jpg\",\n    \"mask_image\": \"https:\u002F\u002F...\u002Fcables-mask.png\",\n    \"strength\": 0.5,\n    \"control_scale\": 0.8\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n**Region replacement (high strength):**\n\n```bash\nruncomfy run tongyi-mai\u002Fz-image\u002Fturbo\u002Finpainting \\\n  --input '{\n    \"prompt\": \"Replace busy backdrop with smooth light gray studio paper; mask background only.\",\n    \"image\": \"https:\u002F\u002F...\u002Fproduct.jpg\",\n    \"mask_image\": \"https:\u002F\u002F...\u002Fbg-mask.png\",\n    \"strength\": 0.9\n  }' \\\n  --output-dir \u003Cabsolute\u002Fpath>\n```\n\n### Prompting tips\n\n- **A mask URL is required** — grayscale, white = inpaint region, black = preserve. Slight blur on mask edges (1–3px) blends better than sharp binary.\n- **Strength by intent**: `0.3–0.5` for retouching \u002F cleanup, `0.6–0.7` for object replacement with style match, `0.8–1.0` for full-region replacement.\n- **Name what stays outside the mask** in the prompt: `\"preserve rooflines and sky gradient\"`, `\"match brick pattern and mortar tone\"`.\n- **Spatial labels still help** even though the mask defines the region: `\"the left shelf\"`, `\"upper-right quadrant\"`.\n\n---\n\n## Limitations\n\n- **Each route inherits its model's limits.** Nano Banana: 1–20 inputs, 1–4 outputs. GPT Image 2 Edit: up to 10 refs, 4 fixed sizes. Flux Kontext: single ref. Z-Image Inpaint: mask required.\n- **No multi-route blending.** This skill picks one model per call.\n- **Brand-specific overrides** — if the user named a specific model, route to the corresponding brand skill (`gpt-image-edit`, `flux-kontext`, `nano-banana-edit`) for fuller treatment.\n\n## Exit codes\n\n| code | meaning |\n|---|---|\n| 0  | success |\n| 64 | bad CLI args |\n| 65 | bad input JSON \u002F schema mismatch |\n| 69 | upstream 5xx |\n| 75 | retryable: timeout \u002F 429 |\n| 77 | not signed in or token rejected |\n\nFull reference: [docs.runcomfy.com\u002Fcli\u002Ftroubleshooting](https:\u002F\u002Fdocs.runcomfy.com\u002Fcli\u002Ftroubleshooting?utm_source=skills.sh&utm_medium=skill&utm_campaign=image-edit).\n\n## How it works\n\nThe skill picks one of Nano Banana Edit \u002F GPT Image 2 Edit \u002F Flux Kontext Pro \u002F Z-Image Turbo Inpaint based on user intent and invokes `runcomfy run \u003Cmodel_id>` with the matching JSON body. The CLI POSTs to the Model API, polls the request, fetches the result, and downloads any `.runcomfy.net`\u002F`.runcomfy.com` URL into `--output-dir`. `Ctrl-C` cancels the remote request before exit.\n\n## Security & Privacy\n\n- **Token storage**: `runcomfy login` writes the API token to `~\u002F.config\u002Fruncomfy\u002Ftoken.json` with mode 0600 (owner-only read\u002Fwrite). Set `RUNCOMFY_TOKEN` env var to bypass the file entirely in CI \u002F containers.\n- **Input boundary**: the user prompt is passed as a JSON string to the CLI via `--input`. The CLI does NOT shell-expand the prompt; it transmits the JSON body directly to the Model API over HTTPS. No shell injection surface from prompt content.\n- **Third-party content**: image \u002F mask \u002F video URLs you pass are fetched by the RunComfy model server, not by the CLI on your machine. Treat external URLs as untrusted; image-based prompt injection is a known risk for any image-edit \u002F video-edit model.\n- **Outbound endpoints**: only `model-api.runcomfy.net` (request submission) and `*.runcomfy.net` \u002F `*.runcomfy.com` (download whitelist for generated outputs). No telemetry, no callbacks.\n- **Generated-file size cap**: the CLI aborts any single download > 2 GiB to prevent disk-fill from a malicious or runaway model output.",{"name":5,"license":15,"homepage":24,"description":25,"displayName":26},"https:\u002F\u002Fwww.runcomfy.com","Edit images on RunComfy — this skill is a smart router that matches the user's intent to the right edit model in the RunComfy catalog. Picks Nano Banana Edit (batch up to 20, identity-preserving default), OpenAI GPT Image 2 Edit (multilingual in-image text rewrite, multi-ref composition, layout precision), Flux Kontext Pro (single-ref high-fidelity local edit), or Z-Image Turbo Inpaint (mask-driven precise region edit). Bundles each model's documented prompting patterns so the skill gets sharper edits without burning iterations on the wrong model. Calls `runcomfy run \u003Cvendor>\u002F\u003Cmodel>\u002Fedit` through the local RunComfy CLI. Triggers on \"image edit\", \"edit image\", \"image-to-image\", \"i2i\", \"swap background\", \"remove object\", \"rewrite headline\", or any explicit ask to edit a single or batch of images.\n","Image Edit — Pro Pack on RunComfy","main","ba43a4e7e8b0fd6b150b14bcb48978ec40879a28",".agents\u002Fskills\u002Fruncomfy-image-edit","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev","IT Leader, Scrum Master, FullStack Developer, SEO\u002FSEM Master #Angular #React\r\n","2026-07-13 03:04:32",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add janpereira-dev\u002FskillsCurate --skill runcomfy-image-edit",{"tool":40,"command":41},"bunx","bunx skills add janpereira-dev\u002FskillsCurate --skill runcomfy-image-edit",{"tool":43,"command":44},"pnpm","pnpm dlx skills add janpereira-dev\u002FskillsCurate --skill runcomfy-image-edit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fruncomfy-image-edit\u002FSKILL.md",true,[],[49,57,64,71,78,86],{"skillNo":50,"name":51,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":19},"01M77T9KN6TEJMPPTQZDEB4K61","zustand-5","Zustand 5 state management patterns. Trigger: When managing React state with Zustand.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzustand-5\u002FSKILL.md",[],[],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M77T9GN2GABPPWDGDCXJ6QWK","zod-4","Zod 4 schema validation patterns. Trigger: When using Zod for validation - breaking changes from v3.","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzod-4\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":19},"01M77T98A9R6PK155P71VX9MND","work-unit-commits","Plan commits as reviewable work units. Trigger: implementation, commit splitting, chained PRs, or keeping tests and docs with code.","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwork-unit-commits\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":19},"01M77T9505TGQGWHGAYVXGE2KS","web-quality-audit","Comprehensive web quality audit covering performance, accessibility, SEO, and best practices. Use when asked to \"audit my site\", \"review web quality\", \"run lighthouse audit\", \"check page quality\", or \"optimize my website\".","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fweb-quality-audit\u002FSKILL.md",[],[],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":53,"licenseFileUrl":82,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M77T8YRVRNK8W4MG63XM80NK","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FSKILL.md",[],[],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M77T8CEPQFZRRNGBYZX46P4Y","vercel-react-view-transitions","Guide for implementing smooth, native-feeling animations using React's View Transition API (`\u003CViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter\u002Fexit of components, animate list reorder, implement directional (forward\u002Fback) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.","https:\u002F\u002Fgithub.com\u002Fjanpereira-dev\u002FskillsCurate\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-view-transitions\u002FSKILL.md",[],[]]