Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Nano Banana Edit · $0.0398/image
ComfyUI Node

arkennemasis fal · Nano Banana Edit · $0.0398/image

Change the thing by describing the change

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Nano Banana Edit · $0.0398/image
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • images
  • image_paths
  • description
  • info
◄prompt►
◄num_images1►
◄seed-1►
◄aspect_ratioauto►
◄output_formatpng►
◄safety_tolerance4►
◄limit_generationstrue►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

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 to auto here, 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 Google IMAGE_SAFETY regime as the rest of the line; the famous-IP restrictions tightened in January 2026.
  • seed - -1 lets 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_ratio so 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 raise num_images.
  • A refusal. That's Google's filter, and safety_tolerance only nudges it.
Categoryarkennemasis/fal/Image/Google

Inputs (17)

NameTypeDefaultDescription
promptSTRINGThe prompt for image editing.
num_imagesINT11–4The number of images to generate.
seedINT-1-1–2147483647The seed for the random number generator. -1 leaves it to the model.
aspect_ratioCOMBOautoThe aspect ratio of the generated image.
output_formatCOMBOpngThe format of the generated image.
safety_toleranceCOMBO4The safety tolerance level for content moderation. 1 is the most strict (blocks most content), 6 is the least strict.
image_1IMAGEThe 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_generationsBOOLEANtrueExperimental 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_2optIMAGEThe 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_3optIMAGEThe 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_4optIMAGEThe 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_5optIMAGEThe 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_6optIMAGEThe 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_usdoptFLOAT20.00–100000Safety 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_runoptBOOLEANtrueIf 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_jsonoptSTRINGAdvanced: 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_concurrentoptINT11–32How 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)

NameTypeDescription
imagesIMAGE—
image_pathsSTRING—
descriptionSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.