Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Nano Banana 2 Lite · ~$0.05/image
ComfyUI Node

arkennemasis fal · Nano Banana 2 Lite · ~$0.05/image

Gemini image gen for about a nickel

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Nano Banana 2 Lite · ~$0.05/image
    • images
    • image_paths
    • description
    • info
    ◄prompt►
    ◄system_prompt►
    ◄aspect_ratioauto►
    ◄num_images1►
    ◄seed-1►
    ◄output_formatpng►
    ◄safety_tolerance4►
    ◄limit_generationstrue►
    ◄thinking_level(not set)►
    ◄max_cost_usd20.0►
    ◄reuse_identical_runtrue►
    ◄extra_json►
    ◄max_concurrent1►

    Why you'd want a closed model in the graph

    Nano Banana is Google's Gemini-native image generation, and you cannot download it. There are no weights, no local checkpoint, no quantized GGUF that will ever exist for it. If you want its look, its prompt understanding, or its text rendering, you call it. This node is that door.

    The reason it belongs in a ComfyUI graph rather than a browser tab is the hybrid workflow everyone settled on: generate the frame with the closed model, animate it with an open one. The r/StableDiffusion pattern is literally "closed Google model for the still, open Wan model for the motion" - you get the quality you can't run, next to the upscaler, masker and video graph you can. This node drops the image straight into your canvas as a normal IMAGE.

    "Lite" is the efficiency member of the family: sub-2-second class latency, fixed 1K (1024×1024) output, and 14 aspect ratios including absurd ones like 8:1 and 1:8. It costs about $0.05 per image. If you were expecting Nano Banana Pro's 4K and thinking mode, that's a different model - Lite is the one you spam.

    How it works

    Nothing runs on your GPU. The node wraps fal's google/nano-banana-2-lite endpoint: it sends your prompt (plus a system instruction, if you set one), submits one billed request, polls while showing status on the node, then downloads the results into output/fal/google_nano-banana-2-lite/ and hands you an IMAGE batch. ComfyUI's Cancel cancels on fal.

    Inputs worth setting

    • prompt - the whole point. Write it like you're talking to Gemini, not to an SDXL checkpoint: full sentences beat tag soup here.
    • aspect_ratio - auto (default) lets the model choose from your prompt, which is usually right. The extreme ratios (4:1, 1:4, 8:1, 1:8) are genuinely useful for banners and long strips that would otherwise need an outpaint chain.
    • num_images - 1 to 4 per call. Four separate pictures, same prompt, billed per image.
    • output_format - png (default), jpeg, webp. If the images go straight into a video pipeline, jpeg saves you disk for no visible loss.
    • system_prompt - a real system instruction to the model, not a prompt prefix. Set it once with your house style and leave it. Empty leaves it out.
    • safety_tolerance - 1 to 6, default 4. 1 blocks most things; 6 is the loosest Google's endpoint will go. Note that looser is still Google's filter, not no filter.
    • thinking_level - (not set), minimal, or high. Turning thinking on makes the model reason about the prompt before drawing, and it gets included in the generation. It's off by default and I'd leave it off until a prompt genuinely needs it.
    • limit_generations - on by default, and it forces one image per round of prompting, ignoring any "give me four variations in this one picture" instructions. It's marked experimental and can affect quality. Turn it off if your prompt deliberately asks for a grid.

    And the guards: max_cost_usd ($20 default, 0 = off), reuse_identical_run (won't re-bill identical inputs, even after a restart), extra_json (escape hatch for fal fields the node has no box for), max_concurrent (default 1 - one paid fal call at a time across the whole graph).

    Outputs

    • images - the IMAGE batch, straight into a Save Image, an upscaler, or Wan/Flux image-to-video.
    • image_paths - the saved files as strings.
    • description - fal's text for the result, useful if you're piping captions somewhere.
    • info - request id, estimate, saved files, fal's raw answer.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/Hishamahmer/comfyui-arkennemasis
    pip install -r comfyui-arkennemasis/requirements.txt
    

    Restart ComfyUI afterwards, or install via ComfyUI-Manager with the Git URL. The only declared dependency is httpx, and the fal half of the pack doesn't even need that - it talks to fal with the standard library.

    Add the key once to the .env next to run_nvidia_gpu.bat (or the ComfyUI folder):

    FAL_KEY=your-key-from-fal.ai/dashboard/keys
    

    Where people get burned

    The ~$0.05/image tag is an estimate, not a rate card. This endpoint bills by tokens - input and output text tokens, and image tokens at $37.50 per million on the way out. The node's price badge assumes a normal one-image, one-prompt request. A monster prompt asks for a monster bill, so watch the pre-run estimate rather than trusting the tag.

    Fixed 1K output is the real constraint. Every Lite image comes out at 1024×1024-class resolution regardless of the aspect ratio you pick, so the wide ones aren't hi-res wide, they're 1K wide with less height. Plan on a local upscaler in the chain if the output needs to be big.

    The safety filter is Google's, and you can't patch it. Google's image line is among the most aggressively filtered in the field, which is the single most common reason people give for staying local. safety_tolerance nudges it; it doesn't remove it. Prompts that trip it will fail, and no custom node can change that.

    Your prompt leaves your machine. That's the mechanism of an API node, not a bug in it - and given this category's history, a fresh wrapper pack is a thing to read before you run it, not to install blind.

    Categoryarkennemasis/fal/Image/Google

    Inputs (13)

    NameTypeDefaultDescription
    promptSTRINGThe text prompt to generate an image from.
    system_promptSTRINGOptional 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.
    aspect_ratioCOMBOautoThe 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.
    num_imagesINT11–4The number of images to generate.
    seedINT-1-1–2147483647The seed for the random number generator. -1 leaves it to the model.
    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.
    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 and ignore any intermediate images generated by the model. This may affect generation quality.
    thinking_levelCOMBO(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_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.