Nodes/Qwen3-TTS - Voice Synthesis & Cloning/🎡 Qwen3-TTS CustomVoice
ComfyUI Node

🎡 Qwen3-TTS CustomVoice

The Qwen3-TTS node that just works

By flybirdxxΒ·Created 7 months agoΒ·Updated 3 months agoΒ· 1,874
🎡 Qwen3-TTS CustomVoice
    • audio
    β—„textHello worldβ–Ί
    β—„speakerRyanβ–Ί
    β—„model_choice1.7Bβ–Ί
    β—„deviceautoβ–Ί
    β—„precisionbf16β–Ί
    β—„languageAutoβ–Ί
    β—„seed0β–Ί
    β—„instructβ–Ί
    β—„max_new_tokens2048β–Ί
    β—„top_p0.80β–Ί
    β—„top_k20β–Ί
    β—„temperature1.0β–Ί
    β—„repetition_penalty1.05β–Ί
    β—„attentionautoβ–Ί
    β—„unload_model_after_generatefalseβ–Ί
    β—„custom_model_pathβ–Ί
    β—„custom_speaker_nameβ–Ί

    Not every TTS job needs a reference clip. Sometimes you just want a decent voice to read a line out loud, and you don't want to hunt down clean audio of someone to clone. That's what CustomVoice is for: it's the "just works" node in the Qwen3-TTS pack, using a baked-in list of preset speakers instead of cloning. Pick Ryan, hit run, get a WAV. Nothing to upload, no reference text to transcribe.

    The pack wraps Alibaba's open-weight Qwen3-TTS models, and this node drives the dedicated CustomVoice variant (0.6B or 1.7B, default 1.7B). There are nine preset speakers - Aiden, Dylan, Eric, Ono_anna, Ryan, Serena, Sohee, Uncle_fu, Vivian - a mix of English and Asian name archetypes. You feed it the text you want spoken, optionally an instruct style hint, and it returns audio. If you've used any TTS node, this is the familiar part; the Qwen models just happen to be noticeably better at prosody and multilingual output than the old guard.

    The inputs that actually matter

    The speaker dropdown is the whole point, and the text field is what it speaks. Two things beyond that are worth touching:

    • instruct - an optional style instruction ("calm, slow, like a bedtime story"). The pack's sibling VoiceDesign node lives and dies by this field; here it's seasoning, not a requirement.
    • model_choice - 0.6B if you're on low VRAM and just demoing, 1.7B for anything you'll actually keep.

    Everything else in the schema is the pack's standard generation toolkit: language (Auto plus ten languages), seed, max_new_tokens, and the sampling knobs top_p, top_k, temperature, repetition_penalty. Defaults are sane - leave them alone until a line comes out robotic, then nudge temperature up a hair. attention (auto/sage_attn/flash_attn/sdpa/eager) and unload_model_after_generate are the memory-management pair; enable the unload toggle if you're under ~8GB VRAM or running several different models in one graph. There's also custom_model_path and custom_speaker_name, which exist so a model you fine-tuned with the pack's Train node can load here - skip them unless you've actually trained a speaker.

    The single output is audio, a standard ComfyUI AUDIO tensor. Wire it into a preview or a save/preview audio node and you're done.

    Install

    This ships in flybirdxx/ComfyUI-Qwen-TTS (pack title "Qwen3-TTS - Voice Synthesis & Cloning"). Easiest via ComfyUI Manager - search "Qwen3-TTS" and install. By hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/flybirdxx/ComfyUI-Qwen-TTS
    cd ComfyUI-Qwen-TTS
    pip install -r requirements.txt
    

    Restart ComfyUI. The one dependency that will bite you: the pack breaks on transformers 5.0+. Pin it:

    pip install "transformers>=4.57.0,<5.0.0"   # or exactly: pip install transformers==4.57.3
    

    Nothing to configure for models - the first run auto-downloads the tokenizer and the model you pick from HuggingFace into ComfyUI/models/qwen-tts/. That first generation looks hung while it pulls a multi-GB model; to avoid the surprise, pre-download with python download_models.py from the pack folder.

    Common issues

    First generation taking forever is just the download - let it finish once. "Model class is not loaded" in the console means the qwen_tts package failed to import, and the usual culprit is the transformers version. Clone stutter, which hits the pack's other nodes, isn't really a thing here because you're not cloning. If a speaker sounds off, try a different one before touching sampling params - the presets genuinely differ in timbre, and some fit certain text better than others. And keep in mind this is the pack's lowest-common-denominator node: the fun starts with VoiceClone and VoiceDesign.

    CategoryQwen3-TTS

    Inputs (17)

    NameTypeDefaultDescription
    textSTRINGHello worldβ€”
    speakerCOMBORyan9 options: Aiden, Dylan, Eric, Ono_anna, Ryan, Serena, +3
    model_choiceCOMBO1.7B2 options: 0.6B, 1.7B
    deviceCOMBOauto5 options: auto, cuda, xpu, mps, cpu
    precisionCOMBObf162 options: bf16, fp32
    languageCOMBOAuto11 options: Auto, Chinese, English, Japanese, Korean, French, +5
    seedoptINT00–18446744073709550000β€”
    instructoptSTRINGβ€”
    max_new_tokensoptINT2048512–4096β€”
    top_poptFLOAT0.800–1Nucleus sampling probability
    top_koptINT200–100Top-k sampling parameter
    temperatureoptFLOAT1.00.1–2Sampling temperature
    repetition_penaltyoptFLOAT1.051–2Penalty for repetition
    attentionoptCOMBOautoAttention implementation
    unload_model_after_generateoptBOOLEANfalseUnload model from memory after generation
    custom_model_pathoptSTRINGβ€”
    custom_speaker_nameoptSTRINGβ€”

    Outputs (1)

    NameTypeDescription
    audioAUDIOβ€”