Nodes/ComfyUI Assistant Node/PVL Google Nano-Banana API mandatory IMG
ComfyUI Node

PVL Google Nano-Banana API mandatory IMG

Nano Banana for edits, where the image isn't optional

By pvlprk·Created about a year ago·Updated 8 months ago· 1
PVL Google Nano-Banana API mandatory IMG
  • images
  • text
  • images
promptA tiny banana spaceship over a neon city.
seed0
modelgemini-2.5-flash-image-preview
output_formatpng
num_images1
retries3
timeout_sec120
debug_logfalse
capture_text_outputfalse
use_fal_fallbacktrue
force_falfalse
delimiter[++]
sync_modefalse
aspect_ratio1:1
endpoint_override
api_key
request_id
fal_api_key
fal_route_img2imgfal-ai/nano-banana/edit
fal_route_txt2imgfal-ai/nano-banana

This is the sibling of the pack's PVL Google NanoBanana API with one meaningful difference: the images input is required. In the base node, images are optional and an empty port means text-to-image. Here the node refuses to run without a source image, which makes it the dedicated Nano Banana edit node - the one you reach for when the whole job is "change this picture per this sentence."

If you're building a workflow that only ever edits - swapping a background, changing an outfit, adding an object to a photo - this saves you from the base node's footgun, where a forgotten image wire silently turns your edit into a generation and you get a brand-new image instead of a modified one. Enforced inputs are a feature when the other option is silent wrong behavior.

How it works

The engine is identical to the base Nano Banana node: gemini-2.5-flash-image-preview via Google's API, [++]-delimited prompts split into parallel generations, and the fal fallback (fal-ai/nano-banana/edit) engaged by default when Google fails or when force_fal is set. use_fal_fallback defaults to on, same as the base node. The only difference is that images sits in the required inputs, so the edit path is the only path.

The inputs that matter

  • images - required. One image or a batch; each becomes an edit request.
  • prompt - the edit instruction. The default is still the banana spaceship example, which makes less sense here than on the txt2img node - change it, this node's whole job is edits.
  • model - default gemini-2.5-flash-image-preview; override with another model id.
  • num_images - 1 to 12 variations per edit.
  • aspect_ratio - default 1:1; validated against the standard set.
  • use_fal_fallback, force_fal, fal_api_key, fal_route_img2img - the fallback block. Note the img2img route is the one that matters here; fal_route_txt2img exists but is never the primary path with images required.
  • api_key, capture_text_output, seed, output_format, retries, timeout_sec, debug_log, delimiter, sync_mode, endpoint_override, request_id - same as the base node.

Outputs: text (STRING) and images (IMAGE).

Installing it

Standard pack install:

cd ComfyUI/custom_nodes
git clone https://github.com/pvlprk/comfyui-pvl-api-nodes

Restart, export GEMINI_API_KEY and FAL_KEY (for the fallback), or fill the fields. No downloads.

Common issues

The mandatory-image design is the fix for the base node's worst failure, but it comes with its own expectations. First, an edit prompt still has to be about the image - this is Gemini, so a generic prompt produces a generic result, and heavy filtering still applies to celebrity/IP content (that January 2026 policy tightening didn't exempt edit endpoints). Second, the fal fallback defaults on, which is great for resilience and easy to forget about when the bill arrives - a quiet Google failure means a quiet fal charge. Third, capture_text_output behaves the same here: the text port is empty unless you flip it on. And as always with these nodes, your source images leave your machine; don't feed it anything you need to keep local.

CategoryPVL/Google

Inputs (21)

NameTypeDefaultDescription
imagesIMAGE
promptSTRINGA tiny banana spaceship over a neon city.
seedINT00–18446744073709550000
modelSTRINGgemini-2.5-flash-image-preview
output_formatCOMBOpng2 options: png, jpeg
num_imagesINT11–12
retriesINT31–10
timeout_secINT1205–600
debug_logBOOLEANfalse
capture_text_outputBOOLEANfalse
use_fal_fallbackBOOLEANtrue
force_falBOOLEANfalse
delimiterSTRING[++]
sync_modeBOOLEANfalse
aspect_ratiooptSTRING1:1
endpoint_overrideoptSTRING
api_keyoptSTRING
request_idoptSTRING
fal_api_keyoptSTRING
fal_route_img2imgoptSTRINGfal-ai/nano-banana/edit
fal_route_txt2imgoptSTRINGfal-ai/nano-banana

Outputs (2)

NameTypeDescription
textSTRING
imagesIMAGE