Nodes/ComfyUI-Kaola-Qwen-TTS/Ref Audio (Audio+Text)
ComfyUI Node

Ref Audio (Audio+Text)

Stick a Transcript on Your Audio and Your Clones Stop Sucking

By kana112233·Created 8 months ago·Updated 7 months ago· 0
Ref Audio (Audio+Text)
  • audio
  • AUDIO
textThe transcript of the audio.

Qwen3TTSRefAudio is a two-input, one-output node that does almost nothing - and that's exactly why your voice clones sound better when you use it. It takes an AUDIO clip and a text string, and hands back the same audio with the transcript glued on. Qwen3-TTS's voice clone gets markedly better when it knows what's actually being said in the reference clip. Without a transcript it falls back to a voice-print-only (x-vector) mode, which is the weaker mode and the one the pack's own README quietly tells you to avoid. This node is the clean way to never lose that transcript inside your graph.

It ships in ComfyUI-kaola-Qwen-TTS, a wrapper around Alibaba's Qwen3-TTS family (preset voices, text-described voice design, and zero-shot cloning). If you've got this node open you're almost certainly building a clone pipeline - the pack's Voice Clone and Stage Manager nodes are the ones that actually consume what this node produces.

How it works

ComfyUI's AUDIO type is just a dict - {"waveform": tensor, "sample_rate": int} - so adding a key is legal. The node makes a shallow copy of that dict, sticks your text under a text key, and passes the whole thing out. The waveform is never touched, so you can wire this in anywhere without mutating anything upstream. When the Voice Clone node or Stage Manager receives a reference audio that carries a text key, they use it as the ref_text and switch out of x-vector-only mode. You're not generating anything here; you're annotating a wire so the audio and its transcript travel as one unit.

The inputs that matter

  • audio (AUDIO) - your reference clip, from any LoadAudio or generated source. 5–30 seconds of clean speech is the sweet spot; under 400 samples the downstream nodes just throw.
  • text (STRING, multiline) - the transcript of what's actually said. The default is literally the placeholder "The transcript of the audio.", and leaving it in place means the model thinks your reference is speaking that sentence. This is the one gotcha that actually bites.

Output: one AUDIO - the same clip, now annotated.

Where you'd actually reach for it

Wire it into Voice Clone's ref_audio input so your clone uses both the voice print and the transcript. Or feed it into Stage Manager's role_A_audio through role_G_audio slots - a role with an audio input goes into clone mode automatically, and a transcript riding along makes that clone dramatically more convincing. It's also handy for fanning one annotated clip out to both a preview and a clone without re-typing the text twice.

Install

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

Restart ComfyUI, or search ComfyUI-kaola-Qwen-TTS in ComfyUI Manager. The requirements.txt is short (the official qwen-tts package, soundfile, torchaudio, numpy) but qwen-tts force-pins transformers - expect it to stomp whatever version your other nodes were happy with. Models auto-download from HuggingFace on first use or can be dropped into ComfyUI/models/qwen3_tts/; the 1.7B base model needs ~4GB+ VRAM.

Troubleshooting

The classic failure here isn't a crash, it's a mediocre clone - and nine times out of ten the transcript is wrong or still the placeholder. Keep the transcript verbatim; paraphrasing a reference you're cloning from degrades similarity. And don't expect ElevenLabs-tier likeness: the community's honest read on Qwen3-TTS cloning is that it trails Chatterbox and VibeVoice on likeness, though it's good enough for character work, and design-mode voices are where it genuinely shines.

CategoryQwen3TTS

Inputs (2)

NameTypeDefaultDescription
audioAUDIO
textSTRINGThe transcript of the audio.

Outputs (1)

NameTypeDescription
AUDIOAUDIO