arkennemasis fal · Nano Banana 2 · $0.06-0.16/image
The image model that can look things up first
- images
- image_paths
- description
- info
Nano Banana 2 is the Gemini 3.1 Flash generation of Google's image line - the speed-quality hybrid that landed after the Pro model. Base rate on fal is $0.08 an image, and the interesting part isn't the pixels. It's that this endpoint can search the web mid-request and think before it draws.
That matters more than it sounds. A local model generates what it memorised. This one can go check what a specific product's packaging looks like now, then draw it. For anything time-sensitive or brand-specific, that's a capability nothing you can download has.
What the settings do, priced honestly
The price isn't flat, and the node's live badge follows your widgets:
resolution-0.5K,1K(default),2K,4K. Billed at 0.75× for 0.5K, 1× at 1K, 1.5× at 2K and 2× at 4K. So a 4K image is sixteen cents, not eight.enable_web_search- off by default, +$0.015 per request when on. A rounding error next to the image itself.thinking_level-(not set)by default;minimalorhighturns on model thinking, which adds +$0.002 at high. Two-tenths of a cent to have the model reason about the composition first is the best-value toggle on this node.num_images- 1 to 4, each billed, with every multiplier applied per image.
Then the composition controls. aspect_ratio defaults to auto - the model reads the prompt and picks - and this family supports genuinely extreme ratios: 4:1, 1:4, 8:1 and 1:8 alongside the usual set. An 8:1 banner is something you cannot get out of a local SDXL workflow without a lot of stitching. system_prompt is a persona/style instruction applied across the request - a place to put "always add film grain, never add text" once instead of in every prompt. safety_tolerance (1–6, default 4) is the moderation dial, and per the KB this line is aggressively filtered: the January 2026 update tightened restrictions on famous IP and celebrity likeness. seed takes -1 for model's choice. output_format is png, jpeg or webp. limit_generations is on by default and disregards in-prompt requests for multiple variations - the usual cause of "I asked for four and got one".
Outputs
images - a batchable IMAGE output, which is what you'd feed a local upscaler, a ControlNet preprocessor, or an open video model's image input. image_paths - files under output/fal/fal-ai_nano-banana-2/. description - the model's own text about the result, ideal as a caption or as a handoff into an LLM node. info - JSON with the request id, the cost estimate, the saved files and fal's complete answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI, or search arkennemasis in ComfyUI-Manager. requirements.txt is a single line - httpx, for the pack's Codex nodes - because the fal provider talks to fal.ai with Python's standard library. Then:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env next to run_nvidia_gpu.bat. The pack deliberately ships no key input on any node, since widget values are written into workflow JSON verbatim.
Where people get burned
- The bill is bigger than the badge suggested. Resolution multipliers and
num_imagescompound: four 4K images is 64 cents, not 32. The node's own price badge tracks this as you change widgets, so look at it. - You asked for four images and got one.
limit_generations, on by default. autoreframed your scene. Convenient until it isn't. Pin the ratio when shape matters - and note this family's extreme ratios are also useful for cheating a "wide establishing shot" out of a stills model.- The web search gave you an old logo. Search is a tool, not a truth. The model still draws what it decides.
- It's a $0.08 toll on every experiment. The cheap first pass is base Nano Banana at $0.0398; come here when you need resolution, research or thinking.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The text prompt to generate an image from. | |
| 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. Use "auto" to let the model decide based on the prompt. |
| 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. |
| 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. |
| 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. |