arkennemasis fal · Nano Banana 2 Edit · $0.06-0.16/image
Six images, a video, a PDF and one sentence
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- video
- audio
- images
- image_paths
- description
- info
This is the most unusual input set in the pack. Beyond the six image sockets, Nano Banana 2 Edit accepts a video, an audio file and a PDF as context for the edit - and none of the image sockets are even required, as long as one of those other inputs is there. You describe an output; it uses everything you connected to make it.
What that actually enables
Three workflows, and they're not the ones you'd guess:
Multi-reference compositing. Six image sockets, each accepting a batch and sent in socket order. That's enough to hand it a product, a room, a logo, a swatch and two references and ask for a single coherent shot - the class of job that used to be a mask, a ControlNet and an hour of fiddling.
Video as context. Connect a clip and ask for a frame, a storyboard panel, or an image matching its look. The node accepts an http(s)/data URL to a video file (downloaded and sent inline, max 15MB) or a YouTube URL, which is passed through to the model without downloading. That last part is worth reading twice: a YouTube link is the one input here that doesn't count against the size limit.
PDF as context. A link, downloaded and sent inline, 15MB cap. Point it at a spec sheet, a menu, a brand guideline, and ask for an image that follows it. It's a small, weird, genuinely useful door.
The dials
prompt is the instruction; resolution (1K default, plus 0.5K/2K/4K - billed at 0.75×/1×/1.5×/2× the $0.08 base, so 4K is 16 cents); aspect_ratio defaults to auto and supports the extreme 4:1/1:4/8:1/1:8 set; num_images 1–4, each billed; enable_web_search (+$0.015); thinking_level (minimal/high, +$0.002 at high); system_prompt for a standing style instruction; safety_tolerance 1–6; seed; limit_generations, on by default, which discards in-prompt requests for multiple variations.
Outputs
images (batchable IMAGE), image_paths (files under output/fal/fal-ai_nano-banana-2_edit/), description (the model's own text about the result), info (JSON: 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 install through ComfyUI-Manager by searching arkennemasis. Only httpx is declared - for the pack's Codex nodes - and the fal provider needs nothing beyond the standard library. Then:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env holding your launcher.
One thing worth internalising about this pack, since this node sends so much: everything you connect here leaves your machine. Images, clips, audio and documents go to fal and on to Google. The pack is careful with your key - no key widget anywhere, so it can't end up inside a shared workflow - but your inputs are the price of the feature.
Where people get burned
- "At least one input is required" and you only typed a prompt. This node has no required image socket, but it's an edit endpoint: prompt alone isn't enough unless one of the image/video/audio/PDF inputs is connected.
- A 40MB clip. The inline inputs cap at 15MB, and an oversized one fails in pre-flight - before anything bills. Trim, or hand it a YouTube URL instead.
- Wrong order in a multi-image edit. Batches flatten in socket order: everything on socket 1 goes first.
- Six images and a 4K render is a 16-cent-plus call, not an 8-cent one. Watch the badge - the price rule here multiplies by resolution and adds for search and thinking.
- You wanted a pixel-exact face transfer. This is generative instruction editing, not a paste. The KB's identity chapter covers the tools that actually composite.
- A refusal from Google, with
safety_toleranceat 6 and nowhere left to go.autoaspect plus a vague prompt is also a reliable way to get a reframe you didn't ask for - pin the ratio.
Inputs (24)
| 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. Supports extreme ratios: 4:1, 1:4, 8:1, 1:8. |
| 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. |
| 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. |
| pdf_url | STRING | Optional PDF document to use as input context. Accepts an http(s)/data URL (downloaded and sent inline, max 15MB). Paste a link; leave empty to leave it out. | |
| 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 and ignore any intermediate images generated by the model. This may affect generation quality. |
| 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. |
| thinking_level | COMBO | (not set) | When set, enables model thinking with the given level ('minimal' or 'high') and includes thoughts in the generation. Omit to disable. '(not set)' leaves it to the model. |
| image_1opt | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Optional when at least one of `video_url`, `audio_url`, or `pdf_url` is provided. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_2opt | IMAGE | The URLs of the images to use for image-to-image generation or image editing. Optional when at least one of `video_url`, `audio_url`, or `pdf_url` is provided. 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. Optional when at least one of `video_url`, `audio_url`, or `pdf_url` is provided. 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. Optional when at least one of `video_url`, `audio_url`, or `pdf_url` is provided. 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. Optional when at least one of `video_url`, `audio_url`, or `pdf_url` is provided. 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. Optional when at least one of `video_url`, `audio_url`, or `pdf_url` is provided. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| videoopt | VIDEO | Optional video to use as input context. Accepts an http(s)/data URL to a video file (downloaded and sent inline, max 15MB) or a YouTube URL (passed through to the model without downloading). | |
| audioopt | AUDIO | Optional audio file to use as input context. Accepts an http(s)/data URL (downloaded and sent inline, max 15MB). | |
| 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. |