PVL Google Nano-Banana API mandatory IMG
Nano Banana for edits, where the image isn't optional
- images
- text
- images
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- defaultgemini-2.5-flash-image-preview; override with another model id.num_images- 1 to 12 variations per edit.aspect_ratio- default1: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_txt2imgexists 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.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| prompt | STRING | A tiny banana spaceship over a neon city. | — |
| seed | INT | 00–18446744073709550000 | — |
| model | STRING | gemini-2.5-flash-image-preview | — |
| output_format | COMBO | png | 2 options: png, jpeg |
| num_images | INT | 11–12 | — |
| retries | INT | 31–10 | — |
| timeout_sec | INT | 1205–600 | — |
| debug_log | BOOLEAN | false | — |
| capture_text_output | BOOLEAN | false | — |
| use_fal_fallback | BOOLEAN | true | — |
| force_fal | BOOLEAN | false | — |
| delimiter | STRING | [++] | — |
| sync_mode | BOOLEAN | false | — |
| aspect_ratioopt | STRING | 1:1 | — |
| endpoint_overrideopt | STRING | — | |
| api_keyopt | STRING | — | |
| request_idopt | STRING | — | |
| fal_api_keyopt | STRING | — | |
| fal_route_img2imgopt | STRING | fal-ai/nano-banana/edit | — |
| fal_route_txt2imgopt | STRING | fal-ai/nano-banana | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| images | IMAGE | — |