Purpose
Default editor — start here for any prompt-driven image edit. Strongest at photorealism, multi-subject consistency, full-scene restages, subject swaps, and fast iteration. Switch to edit-image-gpt-image only when typography / text rendering is the whole point of the edit (logos, wordmarks, signage).
Backed by Fal model fal-ai/nano-banana/edit.
When to use this vs edit-image-gpt-image
Validated against the skill-tests/edit-image-tests/ bench (3 edits × 2 models):
| edit type | use |
|---|---|
| Restage / scene swap (bike → living room) | nano-banana — characterful, fast, preserves subject geometry |
| Subject swap (woman → man, same pose) | nano-banana — clean swap, room/lighting/frame held |
| Logo / wordmark / typography edit | gpt-image with --quality high — sharpest letterforms |
| Incidental text inside a non-text edit | Either — both can mangle small text in the source; flag for review |
| Transparent-background cutout | gpt-image with --background transparent --format png |
Inputs
prompt(string) — natural-language edit instruction.image_paths(one or more) — local image paths or public HTTPS URLs.- Output directory.
- Optional:
aspect_ratio,num_images,output_format,seed. FAL_KEYin env.
Workflow
- For each local input image, upload to Fal storage to get a public URL (
scripts/upload.sh). - POST to
https://fal.run/fal-ai/nano-banana/editwith{prompt, image_urls, ...}. - Download each returned image URL into the output dir as
image_001.png,image_002.png, ... - Write
request.json,response.json,manifest.json.
Use scripts/edit.sh for the full flow.
Key parameters
prompt(required).image_urls(required, ≥1).aspect_ratio—auto(default),21:9,16:9,3:2,4:3,5:4,1:1,4:5,3:4,2:3,9:16.num_images— 1–4, default 1.output_format—png(default),jpeg,webp.safety_tolerance— 1–6, default 4.seed— int, optional.
No mask field — this is a prompt-only edit model. For region-locked edits, prompt nano-banana to "keep everything else unchanged" or use Higgsfield Soul via the mcp__higgsfield__* MCP tools for identity-preserving inpaint.
Output
image_NNN.<ext>— edited image(s).request.json,response.json— API payloads.manifest.json— status, model, prompt, inputs[], outputs[], seed, warnings.
Quality checks
- Output file(s) exist and decode (
file image_001.pngreports valid image). - Dimensions match requested aspect ratio (or input ratio when
auto). - No watermarks, garbled text, or extra fingers — flag for review if present.
- Multi-subject consistency preserved when input has multiple people/products.
Failure modes
- Missing
FAL_KEY. - 422 — invalid
image_urls(must be public HTTPS ordata:URI; local paths must be uploaded first). - 429 / quota — back off and retry.
- Long edge > ~2048px — downscale before submitting.
- Text-heavy edits look soft — switch to
edit-image-gpt-image(run with--quality highfor wordmarks). - Need identity-preserving inpaint — use Higgsfield Soul via
mcp__higgsfield__*MCP tools.