APZmedia: Voice Design
Build a reusable voice from a sentence of description
- model_design
- model_base
- voice_prompt
- reference_audio
- reference_text
- voice_description
This is the node that makes Qwen3-TTS interesting, and it's the one people most often bounce off because it's the only node in the pack that wants two models at once. Read the input sockets before you wire anything: model_design takes a VoiceDesign model, model_base takes a Base model, and they're not interchangeable.
Here's the trick. The VoiceDesign model generates a short reference clip from your natural-language description - say "Deep authoritative male, slightly amused." Then the Base model converts that clip into a speaker embedding (voice_prompt, a VOICE_PROMPT socket) that you can reuse across a hundred generation calls. So one half of the node is a voice actor, the other half is a voice fingerprinter.
The README calls this a one-time setup step, and it is. Run it once, save the result to your library with Voice Library Save, and every future workflow only needs the Base model plus Voice Library Loader. You do not want both 1.7B models resident in VRAM for your day-to-day generation - it's fine for one run, wasteful forever after.
The inputs that matter
- voice_description - the whole point. Describe a person and a delivery: "Warm female voice, calm and articulate" (the default) or "Young energetic voice, nervous and rushing." The richer the description, the more the model has to work with.
- reference_text - the short line the generated clip actually says, used to build the embedding. Keep it under 20 words, and it must match what the model says - the transcript is what anchors the in-context learning.
- x_vector_only_mode -
Falseby default: full in-context learning, best fidelity, butreference_texthas to be accurate. Flip it toTrueand it uses only the speaker x-vector, which is faster and skips the transcript entirely. Good default to remember if your transcript and audio ever drift apart. - language - English by default, with the usual 10 languages plus Auto.
- seed - reproducibility. Set it, log it, so you can regenerate the same identity later.
Outputs
Four sockets come out: voice_prompt (the embedding - the thing you actually want), reference_audio (the generated clip, if you want to hear what you're saving), plus reference_text and voice_description passthroughs. The natural wiring is:
[Model Loader: VoiceDesign] [Model Loader: Base]
↘ ↙
[Voice Design]
↙ ↓ ↓ ↘
voice_prompt audio ref_text voice_description
↘ ↓ ↓ ↓
[Voice Library Save] (name: "narrator")
Where people get tripped up
The voice-description approach is genuinely the thing Qwen3-TTS does better than its cloning rivals - but a lot of the community's "it's monotone" complaints come from people using the clone path and expecting expression, when the design path is where instruct-style guidance shines. If a designed voice comes out flat, the fix is almost always a more specific voice_description (add age, energy, pacing), not a different seed.
One gotcha worth knowing: Voice Library Save keeps the WAV as its durable format and does not serialize the embedding. So treat this node as the source of truth - if you lose the workflow that ran it, the loader can rebuild the embedding from the saved audio, but only if reference_text was saved alongside it. Keep both wired to the save node and you're safe.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model_design | QWEN_TTS_MODEL | Load a VoiceDesign model (Qwen3-TTS-12Hz-*-VoiceDesign). | |
| model_base | QWEN_TTS_MODEL | Load a Base model (Qwen3-TTS-12Hz-*-Base) to build the speaker embedding. | |
| voice_description | STRING | Warm female voice, calm and articulate. | Natural-language voice character and delivery style. Examples: 'Deep authoritative male, slightly amused', 'Young energetic voice, nervous and rushing'. |
| reference_text | STRING | Hello, this is a short reference line for voice cloning. | Text spoken in the reference clip used to build the embedding. Keep it under 20 words. Transcript must match the audio exactly. |
| language | COMBO | English | 11 options: English, Chinese, Japanese, Korean, German, French, +5 |
| x_vector_only_mode | BOOLEAN | false | True: use only the speaker x-vector (ignores ref_text, faster). False: full in-context learning — better voice fidelity but ref_text must be accurate. |
| seed | INT | 00–2147483647 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| voice_prompt | VOICE_PROMPT | — |
| reference_audio | AUDIO | — |
| reference_text | STRING | — |
| voice_description | STRING | — |