Nodes/PopNow/Qwen3 TTS · Text to Speech
ComfyUI Node

Qwen3 TTS · Text to Speech

Point it at a script and describe the voice like a person

By popnow-ai·Created 24 days ago·Updated a day ago· 0
Qwen3 TTS · Text to Speech
    • audio
    • task id
    ◄text►
    ◄voice_idSerena►
    ◄instructions►
    ◄languageauto►

    Most TTS gives you two controls: which voice, and sometimes how fast. Qwen3 TTS takes a third - a free-text instructions box where you describe the delivery in plain words. "Warm, a little tired, reading to someone half asleep" is a legal input. That's the reason to reach for this over the local options: not that it's more accurate, but that you can direct it.

    It's also the pack's only Alibaba audio node, and it runs on PopNow's servers rather than your GPU, so a machine that can't hold Chatterbox can still produce a voice track.

    Where it sits next to the local options

    The open TTS world splits three ways: Kokoro for speed and tiny footprint, Chatterbox for quality with cloning, F5-TTS for the fast cloning middle ground. All three are local, all three are dials on a model. Qwen3 TTS is a different trade - you're buying a hosted model's language understanding, and you're paying per character for it: 10.2 credits ($0.102) per 1,000 characters, minimum 100. A 1,000-character narration is about 1.5 minutes of speech for roughly a dime. Cheap enough to draft with, not free.

    The wins are multilingual handling and that instruction channel. The loss is everything local gives you: no cloning from a reference clip, no offline runs, no weights to bend.

    The four inputs

    text is "the words to be spoken, exactly as written". Exactly is doing work in that sentence - this field doesn't want SSML markup or phoneme hints, it wants the script. It's also what you're billed on, so trimming a 1,400-character draft to 900 isn't only an editorial decision.

    voice_id is a preset dropdown, defaulting to Serena. Each preset has "a fixed character" - the author's phrasing - so the voice is the voice. Pick one and commit; there's no strength dial.

    instructions is the interesting one. "How to read the text: tone, emotion or pace. Not spoken and not billed." That last part is the good news: you can write a paragraph of stage direction and it costs nothing. Use it. This is where you get a whisper, a sneer, a newsreader cadence, or the specific flatness of someone reading a legal disclaimer. It pairs naturally with a local LLM node if you want those directions generated per line.

    language defaults to auto and detects from the text. Only touch it when auto guesses wrong - mixed-language scripts, or a short line that's ambiguous.

    Outputs are audio and task id. The audio output can carry several results as one batch - the tooltip says Save Audio writes one file each - so don't assume a single clip went in.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/popnow-ai/popnow-comfyui
    

    Restart, then set the key in Settings → PopNow (get one at popnow.ai/api/console/keys) or export POPNOW_API_KEY. Manager users can search PopNow and click Install instead. No extra Python packages: the pack declares no dependencies beyond what ComfyUI already bundles, and needs Python 3.10+ on a ComfyUI recent enough for the V3 node API.

    One install detail people trip on: the node list is fetched from your account's catalog at startup, so after adding the key you need one more restart before every model you're entitled to shows up in the menu.

    When it misbehaves

    The audio comes back as a proper AUDIO value with a real sample rate, and if several clips arrive they're padded to the longest and normalised to one sample rate so they can share a batch - which is convenient, and also means a mismatched-length pair won't obviously announce itself. Check durations if you're cutting against picture.

    The error codes are worth memorising because they're specific: PopNow 401 is a bad or revoked key, 40201 is no credits left, 40310 means your account needs its email verified before it can generate at all, and 400 naming a field means that field took a value the model won't accept. Runs the model refuses or fails come back as content_rejected or generation_failed and are refunded.

    For anything else, the task id output exists purely so you can find the job in the PopNow API console or paste it into support.

    CategoryPopNow/Audio/Alibaba

    Inputs (4)

    NameTypeDefaultDescription
    textSTRINGThe words to be spoken, exactly as written. Billed per 1,000 characters, minimum 100.
    voice_idCOMBOSerenaPreset voice. Each has a fixed character.
    instructionsSTRINGHow to read the text: tone, emotion or pace. Not spoken and not billed.
    languageCOMBOautoLanguage of the reading. auto detects it from the text.

    Outputs (2)

    NameTypeDescription
    audioAUDIOSeveral results come back as a batch; Save Audio writes one file each.
    task idSTRINGThe PopNow task id, for the API console logs or support.