Gemini 3.1 Flash TTS
Google-grade speech, straight into the graph
- speech
- audioSettings
- audio
Gemini 3.1 Flash TTS is Google's text-to-speech model behind a Runware node - the sibling of the pack's text Gemini models, but it returns audio instead of strings. You type the script, pick a voice, and get a native AUDIO output that drops straight into a player or save node, with no local TTS stack, no model download, and no per-voice setup. It's the pick when you want Google-quality voices without opening a Google Cloud account.
Compared to the pack's own Dia models, this one is the Google-flavored option: fewer creative dials, and the voice selection happens in the Runware Speech builder rather than on this node. It's the "it just needs to sound good" option - you hand it text, it speaks. Where the Dia nodes reward tweaking, this one rewards not fiddling.
What you set
speech(required) - from the Runware Speech builder:text(the script),voice(defaultZephyr), plusspeed,pitch,volume, andlanguage. All the actual voice character lives here.audioSettings- optional, from the audio settings builder:channels(1 or 2), and gatedbitrate/sampleRateoverrides.settings.temperature- 0–2, default 1. Lower for consistent, flatter takes.seed- reproducible reads.outputFormat- MP3 / WAV / FLAC / OGG.
Output is audio (AUDIO) - the native dict with waveform and sample rate.
How it works
Standard pack flow: taskType: audioInference over REST through the Runware SDK, and the returned audio file is downloaded and decoded with soundfile (libsndfile) into an AUDIO tensor, falling back to torchaudio and finally to a saved-file warning if decode fails. Cost prints on the title bar. Because it's a hosted call, each read is a fresh inference - iterate on takes freely; short voice clips are cheap. It's also worth knowing the voice model is just one of the pack's Google nodes: the same voice contract feeds both this node and the text Gemini models, so a script you've written for one works in the other.
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
Key-not-set errors first, as always. Robotic or clipped audio usually means the chosen voice doesn't fit the language - set language in the speech builder to match the script. If a take sounds too flat, nudge temperature up a touch (and remember it's capped at 2, not the 5 the Dia nodes allow). Want more granular control over the voice and its audio tokens instead of Google's defaults? That's the Dia2 2B node's job.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| speech | RUNWARE_SPEECH | — | |
| audioSettingsopt | RUNWARE_AUDIOSETTINGS | — | |
| seedopt | INT | 00–2147483647 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| settings.temperatureopt | FLOAT | 1.000–2 | Controls randomness in generation. Lower values produce more deterministic outputs, higher values increase variation and creativity. |
| 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 | MP3 | File format for the generated audio. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |