Gemini 3.8 Flash-Lite TTS · Text to Speech
30 voices, three cents a minute, one catch in the text box
- audio
- task id
The cheap voice in the family
PopNow ships three Gemini speech nodes and this is the bottom of the ladder: 0.03 credits per second of audio, thirty prebuilt voices, and the least expressive of the three. If you're voicing a rough cut, generating scratch narration for a video you'll re-do, or need fifty lines of placeholder dialogue to time an edit, the arithmetic here is hard to argue with - a minute of speech costs about two credits.
The catch is right there in the author's tooltip for text: "Spell out sounds such as sighs or laughter; bracketed cues may be read aloud." On the Pro and Flash nodes, [sighs] becomes a sigh. Here it might become the word "sighs". Write the sound out - "hah", "mmm", a long dash for a pause - and treat square brackets as decorative at best.
How the call works
Nothing runs on your machine. The node posts your text (or your scripted dialogue) to PopNow with a price quote first, submits the task under an idempotency key so a retry can't bill twice, polls until it's done, and decodes the returned audio into ComfyUI's AUDIO format. When the model returns several takes they arrive as a batch, resampled and padded to the longest so a single Save Audio node writes one file each.
The pack has no Python dependencies outside ComfyUI's own stack, which means no TTS project to babysit - no transformers version roulette, no per-engine runtime isolation, none of the tax that makes local audio a chore. You're paying credits in exchange for skipping that.
The inputs a beginner actually touches
text- the words to be spoken. For a single voice, this is the whole job.dialogue+speakers- leave both empty unless you want a two-person scene. If you do,dialogueis a JSON list of{"text", "speaker"}objects andspeakersis a JSON list of one or two voices, each with aname(referenced by the dialogue lines), a requiredvoice_id, and optionalpace,style,accentandprofile.voice_id- combo, defaultKore. Thirty options; each is a fixed character, not a dial.style,pace,accent- all default tomodel default. That's the honest default: the field is omitted from the request and the voice does its natural thing.accenthere defaults tomodel defaultrather than a fixedneutral, unlike the 2.5 Pro node - worth knowing if you're copying settings between the two.instructions,scene- free text that shapes delivery without being spoken. Mood, pace, who's listening; where the words are spoken. Cheap to use, occasionally surprising.temperature- -1 to 2, step 0.05, where -1 hands the choice back to the model. Bump it if you want three genuinely different takes of the same line.
Output is audio (AUDIO, possibly a batch) and task id (STRING).
Install
Manager → search PopNow → Install, or:
cd ComfyUI/custom_nodes && git clone https://github.com/popnow-ai/popnow-comfyui
Restart, then create a key at popnow.ai/api/console/keys and paste it under Settings > PopNow, or export POPNOW_API_KEY if the box is headless. Restart again - the node list is rebuilt from your account's catalog on startup, and "the node vanished" is nearly always a missing restart. Delete the old standalone popnow_api.py if you have one.
Fixing the usual failures
No key or a revoked one gives you No PopNow API key is set or PopNow 401. 40310 means your email isn't verified. 40201 means no credits - at this node's rate that's harder to hit than on the Pro model, but a long script still adds up. A 400 that names dialogue or speakers is almost always invalid JSON; the fields are strings, not parsed objects, so one stray comma kills the run. Models that decline are reported as content_rejected and refunded.
Beginner move worth unlearning: hitting cancel. It stops you waiting; the task keeps running on PopNow and is charged if it finishes. If you want to stop spending, stop queueing.
PopNow is a new vendor with no evident community history, so take the low-stakes route - small credit pack, key in the environment, and a workflow you've actually run before you point it at a deadline.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Words to speak, up to 10,000 characters. Native inline cues include <laugh>, <sigh> and <short pause>. | |
| dialogue | STRING | A scripted conversation, used instead of text: each line names a speaker from speakers. JSON. A list of objects with "text", "style"?, "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"?, "consent_audio_url"?, "reference_audio_url"?. | |
| 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. | |
| filler_words | BOOLEAN | false | Allow filler words in a two-speaker conversation. Has no effect on single-speaker requests. |
| temperature | FLOAT | -1.00-1–2 | Variation between takes; higher is less predictable. -1 leaves it to the model. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | Several results come back as a batch; Save Audio writes one file each. |
| task id | STRING | The PopNow task id, for the API console logs or support. |