ComfyUI Node

Nano Banana

Fourteen Reference Images in One Node

By yogurt7771·Created 2 years ago·Updated 6 days ago· 3
Nano Banana
  • images
  • provider
  • image
  • images
  • text
  • thought
◄prompt►
◄model▾►
◄seed0►
◄safety_levelBLOCK_NONE►
◄extra►
◄retry_count1►
◄system_prompt►

Nano Banana is the single most-discussed closed image model in this community - the literal phrase saturates the corpus cap, and it co-occurs with ComfyUI in hundreds of threads. It's the model people describe as the one thing genuinely worth the API call: it holds consistency across multiple references, edits intelligently, and renders text properly. It's also the one Google's filter is most willing to say no on.

So this node is the bring-your-own-key route to it. If you'd rather buy prepaid credits through Comfy and skip key management, Comfy's own API nodes cover it. This node is for the case where you have a Google AI Studio key (or an OpenRouter/Vertex/relay key) and want the model inside your graph.

The model dropdown is the config surface

model is a dynamic combo over the family - 2.1, 2, 2 Lite, Pro, and the original. Version differences are substantial: output resolution tiers reach higher on Pro, reasoning-before-generating appears on some versions and not others, and modality options differ. The pack handles this by rebuilding the inputs underneath the dropdown when you switch versions, so if a field you saw in a tutorial doesn't exist for you, you're on a different version, not a different pack.

What that means practically: pick the version first, then read the inputs. Pro is the one with the high-resolution and multi-reference story; the Lite and older entries are the fast/cheap ones for iteration.

The fixed inputs

  • prompt - generation prompt or the edit instruction. Editing is the mode people love: attach references, describe the change, get the change.
  • seed - 0 lets the service pick; changing a non-zero value forces a re-run.
  • safety_level - default BLOCK_NONE, and the pack's tooltip is honest that this sets the threshold for all harm categories at once, with the DEFAULT option sending no safety settings at all. It's a request-level hint to Google's moderation, not a bypass. Google is among the most aggressively restrictive vendors on this axis, and no dial here changes what the model will actually do.
  • images - autogrow reference socket, up to 14, with batches expanded into individual slots. Fourteen is not a marketing number; multi-reference consistency is the capability that made this model famous, and this input is where you use it. Go over and the node throws rather than truncating, which is the right behaviour and still annoying mid-run.
  • extra - JSON merged into the request, for anything the version supports but the pack hasn't surfaced.
  • system_prompt - accepted here; how much an image model does with it depends on the version.
  • retry_count - total attempts, ~3s apart. Costs money per attempt on a paid call.
  • provider - optional; defaults to Google AI Studio with gemini from api_key.json or GEMINI_API_KEY.

Outputs: image (all images as one batch - only if the sizes match, otherwise the first is returned), images (a proper list), text and thought (the text channel is where a "thinking" version's narration shows up).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes
cd ComfyUI-YogurtNodes
pip install -r requirements.txt

Manager works too - search "YogurtNodes"; the canvas name is "Nano Banana (Yogurt Nodes)".

{ "gemini": "AIza..." }

at custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json. Provider precedence is field → JSON → environment variable, and the pack routes the various versions through Google AI Studio, OpenRouter, Vertex AI and at least one relay depending on which the version is available on - so if you connect a provider that doesn't carry your chosen version, you get an error naming the ones that do.

Where people actually use it

Consistency. The workflow everyone builds: generate a character once, then feed that image plus a new prompt and get the same character in a new pose. This is the reference-image count doing its job, and it's why people tolerate the price.

Editing. "Remove the car, keep the lighting." Reference in, instruction in, result out - the mode where an API model still beats most local editing setups for instruction-following.

Upscaling, weirdly. Nano Banana Pro shows up in Comfy Org's own 2026 upscaling handbook as a recommended image path, which tells you it's being used as a detail-and-restore step, not just a generator. Different tool than you'd reach for, but it works.

Bruises

Cost. Per image, per reference token load, with reasoning versions spending more. Nobody in these threads is casual about it.

Refusals. The filter is the model's, not the node's. BLOCK_NONE doesn't unlock anything Google won't produce.

The batch collapse. Multiple outputs at different sizes come back as one. Take images if you're varying.

"Unimaginative." That's the standard complaint even from people who praise it - great at executing an instruction, less interesting when left to invent. Pair it with a local model for the drafts and use this where instruction fidelity actually matters.

CategoryYogurtNodes/LLM/Image

Inputs (9)

NameTypeDefaultDescription
promptSTRINGPrompt sent to the model.
modelCOMBOModel version; the inputs below change with the selected model.
seedINT00–2147483647Sent to the API when the model supports it; changing it also forces a re-run. 0 lets the API pick a random seed.
safety_levelCOMBOBLOCK_NONESafety threshold for all harm categories; DEFAULT sends no safety settings.
extraSTRINGOptional JSON object merged into the request (for parameters not exposed as inputs).
imagesCOMFY_AUTOGROW_V3Optional reference image(s); batches are expanded. Up to 14.
retry_countINT11–10Total attempts on failure.
system_promptoptSTRINGSystem instruction sent with the request.
provideroptYOGURT_LLM_PROVIDERProvider node. When unconnected, the official API is used with keys from api_key.json or environment variables.

Outputs (4)

NameTypeDescription
imageIMAGEAll images as one batch (first image only if sizes differ).
imagesIMAGE—
textSTRING—
thoughtSTRING—