Nodes/comfyui-superside-nodes/Superside Nano Banana 2.1 Edit
ComfyUI Node

Superside Nano Banana 2.1 Edit

Nano Banana 2.1 Edit Is Nano Banana 2 With a New Address on fal

By Superside·Created 3 months ago·Updated 12 days ago· 1
Superside Nano Banana 2.1 Edit
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • images
  • description
◄prompt—►
◄api_key►
◄num_images1►
◄seed-1►
◄aspect_ratioauto►
◄output_formatpng►
◄safety_tolerance4►
◄sync_modefalse►
◄resolution1K►
◄limit_generationstrue►
◄enable_web_searchfalse►
◄thinking_levelnone►

What this actually is

Nano Banana is Google's Gemini image model - Pro is Gemini 3 Pro Image, and 2 is the Flash-tier hybrid that landed in February 2026. There are no weights to download, so an API node is the only door into your graph, which is the entire premise of the API-wrapper category. This node wraps google/nano-banana-2.1/edit on fal.ai: one prompt, up to six images in, edited images out.

Read the endpoint path again, though. Nano Banana 2 and Pro live under fal-ai/, and 2.1 lives under google/. Same account, same key, same invoice - different address. That single string is basically why this node exists as its own class. In the source, it subclasses the 2.0 node and overrides two things: the endpoint, and the name failures are reported under. Both matter - an error naming the wrong model sends you debugging the wrong endpoint.

Worth calibrating your expectations: a corpus sweep for the literal phrase "nano banana 2.1" turns up one thread, and that thread isn't about the model. This is new enough that nobody has argued about it yet.

How it works

Every image you wire in gets uploaded to fal first, then one request goes out carrying the prompt plus the list of image URLs. The result comes back, gets decoded, and the response's description field is passed through as the second output.

One mechanism detail that will bite you: failed uploads are logged as a warning and skipped, not raised. So a graph with four reference images where one upload dies will happily run with three and hand you back something that ignores the image you cared about. If the edit doesn't respect a reference, check the console before you blame the model.

The inputs you'll actually touch

Three required: prompt, image_1, api_key.

Then image_2 through image_6, all optional references. Note there is no mask input anywhere on this node - every wired image is content the model blends in. Feeding a mask image into image_2 doesn't constrain the edit, it asks the model to paint the mask's white area into your picture. If you want region control, crop to the region and stitch it back (Superside Crop By Region + Superside Stitch Region, both in the same pack) instead.

The optional set worth setting:

  • resolution - 0.5K, 1K, 2K, 4K. Default is 1K, which is where most first-run disappointment comes from. Push it to 2K or 4K if the output is a deliverable. Higher resolution costs more per image on the 2.0 sibling ($0.08 at 1K, x1.5 at 2K, x2 at 4K), and 2.1's price isn't published.
  • aspect_ratio - 15 choices including the extremes (21:9, 4:1, 1:8), default auto. auto doesn't promise your input's ratio; it hands the choice to the model. If the framing must survive, set it.
  • num_images - 1 to 4. limit_generations defaults ON and pairs with it; leave it alone.
  • seed - -1 is random. Set a real seed when you want to reproduce a run. (The parent node only sends a seed when it's >= 0, which was a fix for the old bug that pinned every "unset" run to seed 0.)
  • thinking_level - none / minimal / high. This is the consumer-facing cousin of Nano Banana Pro's thinking mode, and it costs: on the 2.0 endpoint high thinking added $0.002 per image, and web search added $0.015.
  • enable_web_search - off by default. Turn it on when the edit needs real-world grounding.
  • safety_tolerance - 1 to 6, default 4. Also output_format (jpeg/png/webp) and sync_mode.

Outputs are images (IMAGE - straight into a save or crop-stitch/upscale chain) and description (STRING - whatever text the endpoint returns, often empty; don't wire anything critical into it).

Install

ComfyUI Manager, search "Superside" - every node in the pack is prefixed with it. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/Superside/comfyui-superside-nodes
pip install -r requirements.txt

Restart ComfyUI. The requirements are fal-client, pillow, numpy, torch, requests - no model weights, nothing to download, no checkpoint to place. Paste your fal key into the api_key widget; there is no config file and the key is never stored in the repo. Leave it blank and the node falls back to the FAL_KEY environment variable, or fails immediately with a clear error if neither is set.

Cost, and where people get burned

The pack refuses to quote you a price for 2.1 - 2.0 is $0.08 per image, 2.1 wasn't measured, and the ledger records it as unpriced rather than assuming. Drop a Superside Fal Cost Report node in the graph and it adds up every Superside fal call in the run, listing the unpriced ones separately.

Three real traps, in order of frequency:

  1. The silent skipped upload. Covered above. It's a log line, not an error.
  2. Expecting your input's exact dimensions back. You get the aspect ratio and resolution you asked for, not the pixels you sent.
  3. Refusals. Filtering follows the model, not the node - there are no weights to patch around a closed endpoint. Whatever Google declines, the node declines, no matter what safety_tolerance says. Same for the invisible SynthID watermark on every Gemini image.
CategorySuperside

Inputs (18)

NameTypeDefaultDescription
promptSTRING—
image_1IMAGE—
api_keySTRING—
image_2optIMAGE—
image_3optIMAGE—
image_4optIMAGE—
image_5optIMAGE—
image_6optIMAGE—
num_imagesoptINT11–4—
seedoptINT-1-1–2147483647-1 = random
aspect_ratiooptCOMBOauto15 options: 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, +9
output_formatoptCOMBOpng3 options: jpeg, png, webp
safety_toleranceoptINT41–6—
sync_modeoptBOOLEANfalse—
resolutionoptCOMBO1K4 options: 0.5K, 1K, 2K, 4K
limit_generationsoptBOOLEANtrue—
enable_web_searchoptBOOLEANfalse—
thinking_leveloptCOMBOnone3 options: none, minimal, high

Outputs (2)

NameTypeDescription
imagesIMAGE—
descriptionSTRING—