Qwen3-TTS Custom Voice 🎭
No reference audio, no key, no fuss — nine preset voices and an emotion dial
- model_obj
- AUDIO
Qwen3 TTS Custom Voice is the quickest win in the PGCRT Qwen3-TTS pack: pick one of nine built-in speakers, type some text, hit queue. No reference audio, no transcript, no API key. It's the node you reach for when you want a decent voice now and don't care about cloning anyone specific - narration, a character whose exact voice doesn't matter, or just testing the model before you bother with cloning.
The catch is the name. "Custom" here means "custom pick," not "custom to you" - you're choosing from presets, not creating a voice. If you want your voice or a specific person's, that's the clone nodes' job. This one is the zero-effort lane.
The nine speakers
The speaker dropdown gives you nine presets across several languages: Vivian and Serena (young female, Chinese), Uncle_Fu (low, mellow male), Dylan (Beijing dialect), Eric (Chengdu/Sichuan dialect), Ryan and Aiden (English males), Ono_Anna (Japanese), and Sohee (Korean). The pack's README says each has a "native language" it's strongest in - Ryan and Aiden for English, Dylan and Eric for regional Chinese dialects - though you can drive any of them with any of the ten supported languages. When you're just starting, match the speaker to the language you're writing in and quality jumps.
What you actually set
The required inputs are straightforward:
- text - what you want said (multiline, so paragraphs are fine)
- speaker - one of the nine presets
- language - from Auto up to 10 languages
- seed - keep it fixed for a reproducible take
Then there's instruct, the optional input that punches above its weight. It's the emotion/style control: "Very excited and joyful," "Furious and intense," "Speak slowly, like you're telling a secret." The README's whole "emotion control" workflow is just three Custom Voice nodes with the same text and different instruct strings. Leave it empty for a neutral read.
The rest of the optional inputs are sampling controls - max_new_tokens (capped at 8192), temperature, top_p, repetition_penalty - with sensible defaults you can ignore until you hear something off. If the model repeats or loops a phrase, nudge repetition_penalty up from its default of 1.1.
The output is a single AUDIO, which wires straight into ComfyUI's built-in Preview Audio and Save Audio nodes - or into any audio-consuming node in the graph.
Under the hood
This node calls the underlying generate_custom_voice on the Qwen3-TTS model, with instruct passed through as the instruction and the sampling knobs forwarded. Nothing clever, which is the point. It also logs a small stats block to the console after each run - RTF, samples/sec, VRAM used - so you can see how fast it actually was.
Install and gotchas
Install the pack once via ComfyUI Manager (search "Qwen3-TTS") or git clone https://github.com/PGCRT/ComfyUI-QWEN3_TTS into custom_nodes/, then pip install -r requirements.txt and restart. The CustomVoice model (1.7B or 0.6B) is the one that feeds this node - load it with the Model Loader and wire the QWEN_TTS_MODEL output here. First run auto-downloads the model into ComfyUI/models/TTS/, so don't panic if the first queue takes a while.
If you wired a VoiceDesign or Base model into this node, it just won't generate - that's the most common mistake, and it's always a model-mismatch problem, not a bug. Also, keep instruct short and concrete; the model follows "angry" far more reliably than a paragraph of vibes.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model_obj | QWEN3_MODEL | — | |
| text | STRING | 你好,我是Vivian。[pause:0.8] 很高兴为你服务! | — |
| speaker | COMBO | Vivian (Chinese - Bright, Sharp, Young Female) | 9 options: Vivian (Chinese - Bright, Sharp, Young Female), Serena (Chinese - Warm, Soft, Young Female), Uncle_Fu (Chinese - Deep, Mellow, Mature Male), Dylan (Chinese Beijing - Clear, Natural Young Male), Eric (Chinese Sichuan - Lively, Husky Male), Ryan (English - Rhythmic, Dynamic Male), +3 |
| language | COMBO | Auto | 11 options: Auto, Chinese, English, Japanese, Korean, German, +5 |
| output_mode | COMBO | Concatenate (Merge) | 2 options: Batch (Separate), Concatenate (Merge) |
| seed | INT | 00–18446744073709550000 | — |
| instructopt | STRING | — | |
| max_new_tokensopt | INT | 204864–8192 | — |
| temperatureopt | FLOAT | 0.900.1–2 | — |
| top_popt | FLOAT | 1.000.1–1 | — |
| top_kopt | INT | 500–200 | — |
| repetition_penaltyopt | FLOAT | 1.050.1–2 | — |
| subtalker_temperatureopt | FLOAT | 0.900.1–2 | — |
| subtalker_top_popt | FLOAT | 1.000.1–1 | — |
| subtalker_top_kopt | INT | 500–200 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |