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

Qwen3 TTS · Text to Speech

Narration with tone instructions that actually do something

By spicyapi-ai·Created 21 days ago·Updated 2 days ago· 2
Qwen3 TTS · Text to Speech
    • audio
    • task id
    ◄text►
    ◄voice_idSerena►
    ◄instructions►
    ◄languageauto►
    ◄seed0►

    ComfyUI's audio layer is thin and bolted on - the KB's audio doc puts it plainly: the community had nothing to say about sound until video got good enough to want a soundtrack. If you want a voice for a clip you've just generated, the local options are real and decent (Chatterbox, Kokoro, F5-TTS), but you're installing a node pack with its own dependency stack for each one. This node is the other route: Alibaba's Qwen3 TTS, running on SpicyAPI's servers, returning a ComfyUI AUDIO value you can pipe straight into a save node or a lip-sync stage.

    What makes it interesting against the local TTS crowd isn't the voice quality - it's the instructions field. You can tell it how to read the line in plain language, and that's the thing most local ComfyUI TTS stacks hand you sliders or nothing for. Qwen3 TTS is a name people actually use rather than some reseller's rebrand, and it's sourced from the Qwen line rather than a tiny research project that vanishes in six months.

    The inputs

    • text - the words, exactly as written. Billed per 1,000 characters with a 100-character minimum, so there's no free soundcheck.
    • voice_id - nine presets, default Serena. Each one has a fixed character; there's no cloning here, so if you need a specific person's voice, this isn't the node.
    • instructions - "read it like a bored museum guide", "slow and warm", "excited, but understated". Not spoken, and not billed, which means you can iterate on delivery for free as long as you're re-running the same text.
    • language - defaults to auto, which detects it from the text. Set it explicitly when you're mixing languages or want the model to commit to one reading.

    The outputs

    audio, an AUDIO socket, and task id. One thing that surprises people: if the service returns several clips, the node packs them into a batch, so Save Audio writes one file per clip rather than one file with everything glued together. Feed audio into Save Audio, or into video-audio nodes for talkies and lip-sync work.

    You get a 24 kHz mono MP3 back.

    Install

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

    Restart ComfyUI - nothing else to install, no model weights, no GPU. Add a key from spicyapi.ai/console/keys under Settings > SpicyAPI, restart once so the catalogue loads from your account, and you're done. Headless servers can use SPICY_API_KEY instead of the settings panel.

    Keeping the bill small

    This one has a different cost shape from the image nodes: per character, not per output. Which gives you an easy, cheap workflow that the video nodes don't have -

    1. Paste two sentences, pick a voice, write the instructions, and iterate on delivery. The text is small, so the runs are cheap.
    2. Only once the voice and tone are locked, swap in the full script.

    If you do it the other way round - full 3,000-character script, then start adjusting tone - you pay for the whole thing on every attempt. And yes, the instructions field is free, so there's no reason to be stingy with direction there.

    Set Max cost per run under Settings > SpicyAPI anyway. A long script pasted by accident is exactly the kind of thing that setting exists to catch. Note the node quotes every run before submitting, so you'll see a number before anything is charged, and the failure modes are the pack-wide ones: no key gives you No SpicyAPI key is set, an unverified email gives 40310. Cancelling a run stops the wait, not the job - it finishes server-side and is billed if it succeeds.

    CategorySpicyAPI/Audio/Alibaba

    Inputs (5)

    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.
    seedINT00–2147483647This 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)

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