Nodes/Qwen3-TTS - Voice Synthesis & Cloning/πŸ‹οΈ Qwen3-TTS Train
ComfyUI Node

πŸ‹οΈ Qwen3-TTS Train

Fine-tune your own voice with the experimental one

By flybirdxxΒ·Created 7 months agoΒ·Updated 3 months agoΒ· 1,874
πŸ‹οΈ Qwen3-TTS Train
    • checkpoint_path
    β—„init_modelQwen/Qwen3-TTS-12Hz-1.7B-Baseβ–Ί
    β—„tokenizerQwen/Qwen3-TTS-Tokenizer-12Hzβ–Ί
    β—„audio_folderβ–Ί
    β—„output_dir/tmp/ComfyUI/output/qwen3tts_finetuneβ–Ί
    β—„speaker_namenew_speakerβ–Ί
    β—„test_textHello, this is a test of my new voice.β–Ί
    β—„languageEnglishβ–Ί
    β—„learning_rate0β–Ί
    β—„num_epochs10β–Ί
    β—„batch_size1β–Ί
    β—„gradient_accumulation_steps4β–Ί
    β—„validate_every2β–Ί

    Every other node in this pack gets you a voice by cloning or designing one. Train goes a different way: it fine-tunes the actual model on a folder of your own audio, producing a checkpoint that knows your speaker cold. It's the most powerful node here and also the one the author himself would tell you to be careful with - the README says fine-tuning is experimental and that zero-shot cloning is recommended for best results. Read that as: the cloning path is the polished road, and Train is the workshop where you go when a specific voice has to be right, every time, and the clone just isn't cutting it.

    How it works

    You point audio_folder at a directory of speech samples (.wav, .mp3, .flac, .ogg, .m4a all accepted) for one speaker, choose an init_model to start from (default: the 1.7B Base - note the source restricts things sensibly here), and a tokenizer (the 12Hz tokenizer, the only option). The node runs SFT-style fine-tuning with AdamW, batching through your clips for num_epochs epochs, accumulating gradients (gradient_accumulation_steps, default 4) to fake a bigger batch on small VRAM, at learning_rate (default 2e-5, the sane LoRA-family starting point). Every validate_every epochs it saves a checkpoint to output_dir and runs a validation pass - synthesizing your test_text in the new speaker_name voice - so you can hear how training is going without waiting until the end. Checkpoints land as checkpoint-epoch-N folders containing a config.json and model.safetensors, and the node returns the final checkpoint_path as a string.

    That path is what you hand back to the inference nodes: feed it into custom_model_path on VoiceClone or CustomVoice (with custom_speaker_name set) to speak in your trained voice.

    Inputs that matter

    For a first run, keep it minimal: audio_folder, output_dir, speaker_name, test_text, and num_epochs. The rest - learning_rate, batch_size, gradient_accumulation_steps, validate_every - are the knobs you tune only after the defaults don't converge. Expect this to be slow and VRAM-hungry compared to generation; it's training, after all. The README's model directory note applies here too: it's worth pre-downloading the init model so training isn't fighting HuggingFace timeouts.

    Install

    Train ships in flybirdxx/ComfyUI-Qwen-TTS ("Qwen3-TTS - Voice Synthesis & Cloning"). ComfyUI Manager: search "Qwen3-TTS". Or:

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

    Restart ComfyUI. The pack-wide gotcha applies hardest here because training exercises the model stack relentlessly: transformers 5.0+ breaks the pack, so pin pip install "transformers>=4.57.0,<5.0.0". The requirements file also pulls in safetensors and scipy, which this node needs.

    Common issues

    "Audio folder not found" is the first thing beginners hit - give an absolute path, not a relative one. Beyond that, the failure modes are training failures, not node failures: small or mono-tone datasets produce a speaker that sounds like the model phoned it in, and a too-high learning rate diverges into noise. Check the validation generations each validate_every checkpoint rather than waiting for the final one. And before you burn a weekend training, try the zero-shot clone - the author's own advice, and for most voices it's genuinely good enough.

    CategoryQwen3TTS

    Inputs (12)

    NameTypeDefaultDescription
    init_modelCOMBOQwen/Qwen3-TTS-12Hz-1.7B-Base6 options: Qwen/Qwen3-TTS-Tokenizer-12Hz, Qwen/Qwen3-TTS-12Hz-1.7B-Base, Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign, Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice, Qwen/Qwen3-TTS-12Hz-0.6B-Base, Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice
    tokenizerCOMBOQwen/Qwen3-TTS-Tokenizer-12Hz1 options: Qwen/Qwen3-TTS-Tokenizer-12Hz
    audio_folderSTRINGβ€”
    output_dirSTRING/tmp/ComfyUI/output/qwen3tts_finetuneβ€”
    speaker_nameSTRINGnew_speakerβ€”
    test_textSTRINGHello, this is a test of my new voice.β€”
    languageCOMBOEnglish5 options: Auto, Chinese, English, Japanese, Korean
    learning_rateFLOAT01e-7–0.001β€”
    num_epochsINT101–100β€”
    batch_sizeINT11–8β€”
    gradient_accumulation_stepsINT41–64β€”
    validate_everyINT21–10β€”

    Outputs (1)

    NameTypeDescription
    checkpoint_pathSTRINGβ€”