Nodes/ComfyUI Zonos TTS Node/Lisa Zonos Text to Speech
ComfyUI Node

Lisa Zonos Text to Speech

Zonos TTS from 30 seconds of audio

By BahaC·Created 2 years ago·Updated 2 years ago· 26
Lisa Zonos Text to Speech
    • audio_path
    textHello, world!
    languageen-us
    model_nameZyphra/Zonos-v0.1-transformer
    audio_file
    cfg_scale2.0

    You've built the talking-head workflow, MMAudio is humming along, and now you need a voice for it. That's where this node comes in: ZonosTextToSpeech (shown in ComfyUI as "Lisa Zonos Text to Speech") drops Zyphra's open-weight Zonos TTS model into your graph, so you can synthesize speech and clone a voice from a reference clip without touching a cloud API or signing up for anything. The name is a lie in the best way - it calls no API, needs no key, and runs entirely on your machine.

    What's actually happening under the hood

    Zonos is Zyphra's open-weight text-to-speech model, released early 2025 and trained on roughly 200k hours of speech. It turns your text into speech tokens (via a DAC audio codec) and decodes them back to 44kHz WAV audio. The interesting part is the voice cloning: instead of a separate fine-tune, Zonos builds a speaker embedding from a few seconds of reference audio and feeds it in as conditioning. This node wires all of that up in one class - generate_speech handles model loading, conditioning, generation, and saving in a single pass.

    The node ships with a vendored copy of the Zonos library, and its caching logic is genuinely nice: the first run downloads the model from Hugging Face and saves it as config.json + model.safetensors into ComfyUI/models/TTS/Zonos/, so every run after that loads from disk instead of re-downloading. If the cache is ever incomplete or corrupt, the code falls back to a direct download rather than exploding.

    The inputs that actually matter

    You get five, and you'll touch three of them regularly:

    • text - what to synthesize. Obvious, but worth saying: this is the whole point.
    • model_name - your pick of Zyphra/Zonos-v0.1-transformer (default) or Zyphra/Zonos-v0.1-hybrid. The README bills the transformer as faster and lighter and the hybrid as higher quality, but Zyphra's own launch post points the other way: the hybrid's transformer-plus-Mamba backbone is what makes it fast. Treat the transformer as the safe default and the hybrid as the "give me the good stuff, I have VRAM" option.
    • audio_file - a filesystem path to a reference WAV for voice cloning. This is a STRING, not a file-upload widget - paste the path (something like C:/voices/me.wav). Leave it empty and you get generic zero-shot TTS instead. Clean speech, WAV, under 30 seconds, as the README says.
    • language - en-us or ja-jp. That's all this node exposes. Zonos itself also speaks Chinese, French, and German; this wrapper doesn't let you reach them, which is a minor bummer if you need them.
    • cfg_scale - 1.0–10.0, default 2.0. Lower is more conservative and stable; crank it up for more expressive (and riskier) delivery. The default is a fine place to live.

    The one output

    audio_path, a plain string pointing at the freshly written file in ComfyUI/output/, named zonos_YYYYMMDD-HHMMSS_UUID.wav. ComfyUI has no built-in "play this wav" node, so most people wire that path into a preview/save audio node from a pack like VideoHelperSuite, or just open the file themselves.

    Installing it

    ComfyUI Manager should find it by searching "ComfyUI Zonos TTS Node." If you'd rather go manual:

    cd ComfyUI/custom_nodes/
    git clone https://github.com/BahaC/ComfyUI-ZonosTTS.git
    cd ComfyUI-ZonosTTS
    pip install -r requirements.txt
    

    Then restart ComfyUI. The requirements pull torch, torchaudio, safetensors, huggingface_hub, and the zonos package itself (which drags in the usual HF stack, including the DAC autoencoder from descript/dac_44khz). One bright spot: the vendored Zonos gracefully falls back to a pure-PyTorch backbone if mamba_ssm isn't installed, so you don't get stuck compiling a C++ kernel just to run the transformer model. You do need a GPU with a few GB of VRAM to use this comfortably.

    Where people get burned

    First run is slow - the model download is over 3 GB (each of the two variants is roughly 3.2–3.3 GB, so testing both means ~6.5 GB of downloads) and the first generation does a lot of setup. That's expected, not a hang; every subsequent run is fast thanks to the caching. The classic failures: the reference audio has background noise or music (the embedding gets muddier), the path string is wrong or points to an mp3 (it needs WAV), and - the eternal ComfyUI one - CUDA OOM, which the README's own troubleshooting tells you to fix by dropping to the transformer model and freeing GPU memory. If a workflow that uses another Zonos pack says ZonosEmotion/ZonosGenerate are missing, that's a different pack entirely; this node is only the one class.

    Give it 30 seconds of clean speech, a prompt, and you've got a cloned voice sitting in your graph next to your video. Not bad for zero accounts.

    Categoryaudio

    Inputs (5)

    NameTypeDefaultDescription
    textSTRINGHello, world!
    languageCOMBOen-us2 options: en-us, ja-jp
    model_nameCOMBOZyphra/Zonos-v0.1-transformer2 options: Zyphra/Zonos-v0.1-transformer, Zyphra/Zonos-v0.1-hybrid
    audio_fileSTRING
    cfg_scaleFLOAT2.01–10

    Outputs (1)

    NameTypeDescription
    audio_pathSTRING