arkennemasis fal · Nano Banana Pro Edit · $0.15-0.30/image
Multi-reference compositing at 4K
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- description
- info
The Pro edit node takes the instruction-editing idea and points it at the job local pipelines are worst at: combining several references into one believable image. image_1 is required; image_2 through image_6 are optional, each socket accepting a batch. $0.15 an image, $0.30 at 4K.
Where the cheap edit node is a one-photo recolour machine, this is the node you use when the answer needs a product from a photo, a background from another photo, a logo that has to be rendered exactly, and enough resolution that the label text is still legible when the client zooms in.
The multi-reference move
Each socket accepts a batch, and images are sent in socket order - everything on socket 1 first. So the grammar of a multi-reference prompt is positional: "place the object in image 1 on the table in image 2, keeping the label legible and the lighting of image 2." Ambiguity about which reference means what is the most common cause of a disappointing result, and it's entirely on you to remove it.
This is also where the KB's identity chapter meets the closed model. For stills, adapter stacks lost this job: instruction-driven editing is what people reach for, and a good model with several references beats a PuLID-plus-mask pipeline on anything that isn't a pixel-exact face transfer. If you do need pixel-exact - the actual face from the actual photo composited in - this isn't the tool; it's generative instruction editing, not a paste.
The dials
prompt - the instruction, and the clearer you are about which reference is which, the better. resolution - 1K (default), 2K, 4K, with fal's multiplier taking 4K to 2× the base. aspect_ratio - defaults to auto, so the model may follow your instruction or your input; pin it when the shape is the point. num_images 1–4, billed each. enable_web_search (+$0.015) for current real-world references. system_prompt for a standing style or "no extra text" rule. safety_tolerance 1–6, default 4, under Google's IMAGE_SAFETY regime - and the January 2026 tightening on famous IP is real. seed, with -1 for model's choice. limit_generations on by default, capping a round at one image.
Outputs
images (batchable IMAGE - feed an upscaler, a save node, or a video model's first frame), image_paths (files under output/fal/fal-ai_nano-banana-pro_edit/), description (the model's own text about the result - surprisingly good as a caption), info (JSON receipt: request id, cost estimate, saved files, fal's answer).
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI, or search arkennemasis in ComfyUI-Manager. The only declared dependency is httpx, and it's there for the pack's Codex nodes - the fal side is standard library only, so this install won't disturb your existing packages. Then:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env next to run_nvidia_gpu.bat.
And remember what you're sending: five reference photos, a prompt, and Google's moderation layer on the other end. No key widget exists on any node in this pack, on purpose, but your images are the input by definition.
Where people get burned
- Reference ambiguity. "Image 1" and "image 2" only mean something if your prompt uses those words. Batches flatten in socket order, so count the pictures, not the sockets.
- You forgot which socket was which. Label upstream - reuse or a
descriptionoutput - before you wire five references into a prompt you'll debug at 30 cents a try. - Math: five 4K images is $1.50.
num_images× resolution multiplier ×$0.15. The badge tracks it live; trust it over your intuition. autoreframed the composition when you asked for something cinematic. Pinaspect_ratio.- You wanted a 15MB-plus video or a whole PDF as context. Those inputs live on the Nano Banana 2 Edit node, not this one.
- A refusal you can't negotiate with. That's Google,
safety_toleranceincluded.
Inputs (20)
| 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). | |
| system_prompt | STRING | Optional system instruction that steers the model's persona and output style across the request. Leave blank to omit; when provided, it is sent as the system instruction to Gemini (or as a system message on OpenAI-compatible providers). Empty leaves it out. | |
| resolution | COMBO | 1K | The resolution of the image to generate. |
| 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. |
| enable_web_search | BOOLEAN | false | Enable web search for the image generation task. This will allow the model to use the latest information from the web to generate the image. |
| 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. |