Nodes/Qwen3-TTS - Voice Synthesis & Cloning/πŸŽ™οΈ Qwen3-TTS LoadSpeaker
ComfyUI Node

πŸŽ™οΈ Qwen3-TTS LoadSpeaker

LoadSpeaker

By flybirdxxΒ·Created 7 months agoΒ·Updated 3 months agoΒ· 1,874
πŸŽ™οΈ Qwen3-TTS LoadSpeaker
    • voice_clone_prompt
    • audio
    • ref_text
    β—„filenameβ–Ύβ–Ί

    Once you've saved a voice with the pack's SaveVoice node, you don't want to re-extract its features every time you use it. LoadSpeaker is the other half of that persistence loop: a dropdown of every voice file in your voice library, and picking one hands you a ready-to-use voice clone prompt plus a preview of the audio itself. The pack calls it a "Select & Play" experience, and honestly that's exactly what it is.

    How it works

    Under the hood there's a voices folder - specifically ComfyUI/models/qwen-tts/voices - that both SaveVoice and LoadSpeaker read and write. At node creation, LoadSpeaker scans that directory for .wav, .mp3, and .flac files and populates the filename dropdown. When you pick one it does three things:

    1. Loads the audio file itself (via librosa) and passes it out as the audio output - useful as a reference preview or to re-clone from.
    2. Looks for a matching .qvp file (same name, .qvp extension) and, if present, fast-loads the pre-computed voice features instead of re-running the model. That's the whole trick of this node: the expensive feature extraction happens once, at Save time, and playback is instant.
    3. Loads the sibling .json metadata, which carries the ref_text you saved alongside the voice, and hands it out as the ref_text string output.

    The outputs

    There's exactly one input (the filename dropdown) and three outputs:

    • voice_clone_prompt - the reusable VOICE_CLONE_PROMPT. This is what you wire into VoiceClone (or RoleBank, for dialogue) to speak in that voice.
    • audio - the saved reference audio, ready for preview.
    • ref_text - the reference transcript stored at save time. Feeding this back into VoiceClone alongside the prompt keeps quality consistent.

    So the canonical loop is: VoiceClonePrompt β†’ SaveVoice (once) β†’ LoadSpeaker (every time after). You build your voice library one clip at a time, then every future workflow starts with a dropdown.

    Install

    LoadSpeaker is part of flybirdxx/ComfyUI-Qwen-TTS ("Qwen3-TTS - Voice Synthesis & Cloning"). ComfyUI Manager: search "Qwen3-TTS". 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. Watch the transformers version - 5.0+ breaks the pack; pin with pip install "transformers>=4.57.0,<5.0.0". You don't need any model weights for this node to work at all, which is a nice property: it's pure file loading.

    Common issues

    If the dropdown shows only "None", there's nothing in models/qwen-tts/voices - either you haven't saved any voices yet, or your save went somewhere else. Remember SaveVoice writes to models/qwen-tts/voices, so keep both nodes pointed at the same ComfyUI install. If you drop a .wav in the folder by hand without a matching .qvp, the node still works - it just loads the audio and you'll need to re-extract features yourself if you want a voice clone prompt out of it. The dropdown also only refreshes when the node is (re)created, so after adding files, recreate the node or restart before you go looking for them.

    CategoryQwen3-TTS

    Inputs (1)

    NameTypeDefaultDescription
    filenameCOMBO1 options: None

    Outputs (3)

    NameTypeDescription
    voice_clone_promptVOICE_CLONE_PROMPTβ€”
    audioAUDIOβ€”
    ref_textSTRINGβ€”