Nodes/APZmedia Qwen TTS Nodes/APZmedia: Voice Design
ComfyUI Node

APZmedia: Voice Design

Build a reusable voice from a sentence of description

By APZmedia·Created 5 months ago·Updated 5 months ago· 1
APZmedia: Voice Design
  • model_design
  • model_base
  • voice_prompt
  • reference_audio
  • reference_text
  • voice_description
voice_descriptionWarm female voice, calm and articulate.
reference_textHello, this is a short reference line for voice cloning.
languageEnglish
x_vector_only_modefalse
seed0

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 - False by default: full in-context learning, best fidelity, but reference_text has to be accurate. Flip it to True and 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.

CategoryAPZmedia/TTS

Inputs (7)

NameTypeDefaultDescription
model_designQWEN_TTS_MODELLoad a VoiceDesign model (Qwen3-TTS-12Hz-*-VoiceDesign).
model_baseQWEN_TTS_MODELLoad a Base model (Qwen3-TTS-12Hz-*-Base) to build the speaker embedding.
voice_descriptionSTRINGWarm 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_textSTRINGHello, 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.
languageCOMBOEnglish11 options: English, Chinese, Japanese, Korean, German, French, +5
x_vector_only_modeBOOLEANfalseTrue: use only the speaker x-vector (ignores ref_text, faster). False: full in-context learning — better voice fidelity but ref_text must be accurate.
seedINT00–2147483647

Outputs (4)

NameTypeDescription
voice_promptVOICE_PROMPT
reference_audioAUDIO
reference_textSTRING
voice_descriptionSTRING