NanoBanana - Text-to-Speech
Gemini-grade TTS that drops straight into ComfyUI's AUDIO type
- network
- audio
Most TTS in the ComfyUI world means downloading a local model, fighting VRAM, and hoping the voice doesn't sound like a 2010 satnav. NanoBanana_TTS skips all of that: text in, AUDIO out, Google's Gemini TTS models doing the speaking in the cloud. Thirty prebuilt voices with names like Zephyr, Puck, Kore, and Charon, Flash and Pro model variants, and zero local dependencies beyond your API key.
You reach for it when you want natural-sounding, emotionally-intoned speech without running anything locally - narration for a video, a voice for a character, accessibility audio, podcast-ish segments. The voice list is genuinely broad, and the model interprets tone, pacing, and emotion from the text itself. It's also worth noting it's the same pack that handles Gemini image/video/music, so this slots into a workflow that's already talking to Google.
How it works
It calls generate_content with the audio response modality - response_modalities=["AUDIO"] - and a speech config that picks your prebuilt voice. Gemini streams back PCM audio, which the node converts into ComfyUI's native AUDIO format: a waveform tensor plus a 24 kHz sample rate. That's a nice detail: it arrives as a real ComfyUI audio object, so it plugs straight into audio save/preview nodes and the VHS ecosystem instead of being a file path you have to wrangle.
There's a hard ceiling worth knowing: the API takes ~32,000 characters per request, and the node warns loudly above 16k. Long scripts need to be split into multiple calls and concatenated.
The inputs
- api_key, model - three TTS models:
gemini-2.5-flash-preview-tts(default, faster),gemini-2.5-pro-preview-tts(higher quality),gemini-3.1-flash-tts-preview. - text - multiline. The tooltip notes you can even include speaker tags like
Alice: Hi! Bob: Hello.for rough multi-voice takes (though the dedicated Multi-Speaker node does that properly). - voice - 30 prebuilt voices, default
Kore. - custom_model, network - the usual overrides.
Output: one audio (AUDIO), at 24 kHz mono.
Installing it
Pack-wide install: ComfyUI Manager → search NanoBanana2, or
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-NanoBanana2
pip install google-genai
Python 3.10+, google-genai >= 0.8.0, API key from aistudio.google.com. No model files.
Where people get burned
The 32k-character limit is the main trap - paste a chapter in and it errors. Split long text. The other classic: this pack's nodes all re-execute on every run, so each queue hit is a billed TTS call; batch accordingly. And because output is AUDIO at 24 kHz, if your downstream expects 44.1 kHz or a file path, you'll need a converter or save node in between. Also - voices are prebuilt, not clonable here; for voice cloning you're in a different pack entirely.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | NanoBanana - API key. Leave blank to use GEMINI_API_KEY env var. | |
| model | COMBO | gemini-2.5-flash-preview-tts | TTS model. Pro = higher quality, Flash = faster. |
| text | STRING | Text to speak. Can include speaker tags for multi-speaker dialogue. | |
| voice | COMBO | Kore | Prebuilt voice. Each has different characteristics. |
| custom_modelopt | STRING | — | |
| style_promptopt | STRING | Optional style instruction prepended to text (e.g., 'Say cheerfully:'). | |
| networkopt | NB_NETWORK | Optional. Wire a NanoBanana - Network Route node here to route this request through that proxy (e.g. US egress). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |