Gemini 3.8 Flash-Lite TTS · Text to Speech
The cheapest voice in the pack, with one caveat
- audio
- task id
Cheapest per second of any audio node here: $0.00021, against $0.00032 for Flash and $0.00045 for 2.5 Pro. Same 30 voices, same 24 kHz mono WAV, usually back within seconds. For long-form narration, audiobook drafts, or anything where you're generating a lot of speech and only some of it survives, this is the node to reach for.
The caveat is in the node's own tooltip, and it's worth reading twice: spell out sounds such as sighs or laughter; bracketed cues may be read aloud. That's the tell that this tier is the least theatrical of the three Google TTS endpoints. Flash acts out [whispering]; Lite might just say "whispering" at you. If you need the performance, pay the extra $0.00011 a second and use Flash. If you need the words read clearly and cheaply, this is the one.
How it runs
Your script and settings go to SpicyAPI, the model returns audio, and the pack gives it back as a ComfyUI AUDIO - the same AUDIO type any ComfyUI audio node produces, so it drops into Save Audio or a video-sync workflow with no conversion. No local model, no VRAM, no download. One quirk worth knowing before you wire it up: several results can return as a batch, and Save Audio writes one file per result.
The inputs
text- spoken exactly as written, and the field that determines the bill.voice_id- 30 voices,Koreby default, each with a fixed character.style,pace,accent- all left to the model's defaults on this node. There's real room here: a slowerpaceand a tighterstyledo more for a narration than any amount of punctuation tweaking.instructions- mood, mic distance, who's listening. Free text, not spoken, not billed.scene- where and to whom it's spoken. Same deal: free, and it shapes delivery.temperature- −1 to 2, default −1 (model's choice).dialogue+speakers- JSON for a two-person conversation, used instead oftext. Leavetextblank if you go this way.
Speakers carry a name plus an optional pace, style, accent, profile and required voice_id; each dialogue line names its speaker:
{"speakers": [{"name": "Host", "voice_id": "Kore"}],
"dialogue": [{"speaker": "Host", "text": "Welcome back to the show."}]}
Outputs: audio and task id, a STRING identifying the SpicyAPI request.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI, then Settings > SpicyAPI and paste a key from spicyapi.ai/console/keys - or export SPICY_API_KEY on a server. Restart once more so the node list is rebuilt from your account. ComfyUI Manager users: search SpicyAPI. No dependencies and no model files; the pack ships nothing but Python that talks to the API.
Cost
$0.00021 per second of audio - a rate so low that the real cost of a bad read is your time, not your balance. Rate shown on the node, quote taken before submission, and Settings > SpicyAPI > Max cost per run stops anything above your ceiling before it's charged. The pack forces seeds to fixed, so re-queueing reuses the cached result rather than paying for a second read; set control after generate to randomize when you want a different take.
Errors are uniform across the pack: No SpicyAPI key is set, 40310 for an unverified account email, 40004 when no deployment serves the combination (the message names the field, nothing charged), and request_id ... errors to pass to support. Invalid JSON in dialogue or speakers is rejected as an input error. Cancelling a run stops your wait, not the server-side job.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | The words to be spoken, exactly as written. Spell out sounds such as sighs or laughter; bracketed cues may be read aloud. | |
| dialogue | STRING | A scripted conversation, used instead of text: each line names a speaker from speakers. JSON. A list of objects with "text", "speaker". | |
| speakers | STRING | The cast for dialogue: one or two voices, each with a name the lines refer to. JSON. A list of objects with "name", "pace"?, "style"?, "accent"?, "profile"?, "voice_id". | |
| voice_id | COMBO | Kore | Prebuilt voice that reads the text. Each voice has a fixed character. |
| style | COMBO | model default | Overall manner of the reading. Omit it to use the voice's own default manner. |
| pace | COMBO | model default | Rhythm of the reading. Omit it to keep the voice's own rhythm. |
| accent | COMBO | model default | English accent used for the reading. |
| instructions | STRING | How to read the text: mood, distance from the microphone, who is listening. Shapes the delivery and is not spoken. | |
| scene | STRING | Where and to whom the words are spoken. Shapes the delivery and is not spoken. | |
| temperature | FLOAT | -1.00-1–2 | Variation between takes; higher is less predictable. -1 leaves it to the model. |
| seed | INT | 00–2147483647 | This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | Several results come back as a batch; Save Audio writes one file each. |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |