Nano Banana
Google's image gen, minus the local GPU
- referenceImages
- advancedFeatures.watermark.image
- image
Nano Banana is Google's Gemini-native image generator - the name started as an anonymous codename on a HuggingFace leaderboard, Google's execs started dropping banana emojis, and it stuck. The base product is Gemini 2.5 Flash Image, and its party trick is text rendering: no local model writes legible words on a sign or a label like this thing does. Runware hosts it as google:4@1, so the whole package arrives as a ComfyUI node with no Google account and no API key of your own - just the Runware key.
Now the part everyone who actually uses it knows: it's heavily censored. The community verdict on ImageFX and its API cousins is "powerful, unimaginative, massive hidden biasing." Every output carries an invisible SynthID watermark, and Google's safety filter will veto prompts a local model wouldn't blink at. If you're doing SFW work - text-in-image, product shots, editorial illustration - that's a fine trade. If you're not, this node will frustrate you in exactly the way the reviews say.
What you set
positivePrompt(required) - natural language, and this model genuinely listens. Ask for "a hand-lettered neon sign reading OPEN."referenceImages- optional IMAGE input for identity or style transfer; this is the editing superpower.settings.systemPrompt- global instruction for style/behavior across the run.providerSettings.google.safetyTolerance-high/medium/low/none/off(whereoff= Google defaults). Useful when the filter is vetoing something reasonable.settings.temperature/settings.topP- gated, off by default; Google's defaults are fine until they're not.width/height,numberResults(up to 20),outputFormat,outputQuality.
Output is image (IMAGE).
How it works
Same pack flow as every node: taskType: imageInference over REST via the Runware SDK, prompt and refs encoded, native IMAGE back. The difference is that "the model" is Google's Gemini image stack running on Runware's infrastructure, billed per request with the cost on the title bar. This is the node to reach for when the job is text-in-image or precise instruction-following and you don't have Google's own API set up.
Installing
ComfyUI Manager → search Runware → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
No model downloads; deps are runware-sdk, pillow, soundfile. API key via Settings → Runware API key, RUNWARE_API_KEY, or runware auth login.
Troubleshooting
Refusals are the #1 issue, and they're not a bug - the filter is baked in. safetyTolerance gives you some slack; if a genuinely innocuous prompt still gets vetoed, rewrite it with more neutral wording. Misspelled text in the output? The model writes words well but not perfectly; adding fewer, shorter words per image helps. And when you want the newer, faster cousin with video reference support, that's Nano Banana 2.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| referenceImagesopt | IMAGE | — | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| sizeopt | COMBO | 1K (1:1) | Output size. Only one of resolution or dimensions is sent. |
| numberResultsopt | INT | 11–20 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| advancedFeatures.watermark.bgColoropt | STRING | Background color in hex format. | |
| advancedFeatures.watermark.displayPositionopt | COMBO | (default) | Watermark position. |
| advancedFeatures.watermark.fontColoropt | STRING | Text color in hex format. | |
| advancedFeatures.watermark.opacityopt | BOOLEAN | false | Enable to set advancedFeatures.watermark.opacity. Off uses the model's default. |
| advancedFeatures.watermark.opacity_valueopt | FLOAT | 0.100.1–1 | Watermark opacity. |
| advancedFeatures.watermark.textopt | STRING | Watermark text. | |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| providerSettings.google.safetyToleranceopt | COMBO | none | Safety filter tolerance level. Use `off` to use Google's defaults. |
| settings.systemPromptopt | STRING | System-level instruction that guides the model's behavior and output style across the entire generation. | |
| settings.temperatureopt | BOOLEAN | false | Enable to set settings.temperature. Off uses the model's default. |
| settings.temperature_valueopt | FLOAT | 0.000–2 | Controls randomness in generation. Lower values produce more deterministic outputs, higher values increase variation and creativity. |
| settings.topPopt | BOOLEAN | false | Enable to set settings.topP. Off uses the model's default. |
| settings.topP_valueopt | FLOAT | 0.000–1 | Nucleus sampling parameter that controls diversity by limiting the probability mass. Lower values make outputs more focused, higher values increase diversity. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |