arkennemasis fal · Nano Banana Edit · $0.0398/image
Change the thing by describing the change
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- description
- info
Six image sockets, one text box, $0.0398 an image. Describe the change; the picture comes back changed. No mask, no denoise strength, no ControlNet, no inpainting checkpoint.
This is the node that made half the classic identity toolkit optional. The KB's identity chapter is blunt about it: the adapter approach - IP-Adapter, InstantID, PuLID - stopped being how people do character consistency, because instruction-driven editing took the job, and Kontext/Qwen-Edit/Klein are where a new consistency workflow starts. Nano Banana Edit is the closed-model version of that same move, and it's four cents a call, which is why "just describe it" beats "build a mask pipeline" for most one-off edits.
How the sockets work
image_1 is required; image_2 through image_6 are optional. Each socket accepts a batch, and the images are sent in socket order - the first picture on socket 1 counts as image number 1, and so on. That ordering is the whole interface to multi-image edits: "put the object in image 1 into the room in image 2" only works if you wired them in that order, and it doesn't matter which socket holds what as long as you say so in the prompt.
A single image is the normal case: one picture in, one instruction. "Remove the street sign, keep everything else." "Make it golden hour." "Change the label text to GOLDEN BANANA." This model reads text in the image well enough that in-image text edits are a genuine use case rather than a party trick.
The rest of the settings
prompt- the instruction. Say what changes and, if the model gets creative elsewhere, say what must stay.aspect_ratio- defaults toautohere, meaning the model decides from the prompt and the input. That's the trap in the pack's general advice: if you ask for "a wide cinematic version", the model may reframe your photo instead of recolouring it. Pin the ratio when the shape matters.num_images- 1 to 4 per request, each billed.safety_tolerance- 1 to 6, default 4. Same GoogleIMAGE_SAFETYregime as the rest of the line; the famous-IP restrictions tightened in January 2026.seed--1lets the model choose.limit_generations- on by default, and it disregards in-prompt requests for multiple variations, capping a round at one image.output_format- png, jpeg or webp.
Outputs
images - an IMAGE output that can carry a batch. image_paths - the saved files under output/fal/fal-ai_nano-banana_edit/. description - fal's returned text about the result. info - the JSON receipt with request id, estimate and fal's raw answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, or use ComfyUI-Manager (search arkennemasis). Only httpx is declared, and it belongs to the pack's Codex nodes - the fal provider is standard-library only. Then:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
next to run_nvidia_gpu.bat.
Where people get burned
- It changed more than you asked. Instruction editing is a negotiation. Name the things that must not move, and pin
aspect_ratioso a "cinematic" request can't turn into a reframe. - Multi-image edits came out in the wrong order. Batches are flattened in socket order: socket 1's pictures ship first. Split the batch upstream if you need a specific pairing.
- You wanted an exact pixel-level face swap. Instruction editing is generative, not a post-process transfer. If you need the actual pixels of a specific face composited in, that's a different tool in the KB's identity chapter.
- One image instead of four.
limit_generations. And raisenum_images. - A refusal. That's Google's filter, and
safety_toleranceonly nudges it.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt for image editing. | |
| num_images | INT | 11–4 | The number of images to generate. |
| seed | INT | -1-1–2147483647 | The seed for the random number generator. -1 leaves it to the model. |
| aspect_ratio | COMBO | auto | The aspect ratio of the generated image. |
| output_format | COMBO | png | The format of the generated image. |
| safety_tolerance | COMBO | 4 | The safety tolerance level for content moderation. 1 is the most strict (blocks most content), 6 is the least strict. |
| image_1 | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| limit_generations | BOOLEAN | true | Experimental parameter to limit the number of generations from each round of prompting to 1. Set to `True` to to disregard any instructions in the prompt regarding the number of images to generate. |
| image_2opt | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_3opt | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_4opt | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_5opt | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_6opt | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap. |
| reuse_identical_runopt | BOOLEAN | true | If these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings. |
| extra_jsonopt | STRING | Advanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally. | |
| max_concurrentopt | INT | 11–32 | How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| description | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |