Nodes/ComfyUI-TTS/Load Piper Model
ComfyUI Node

Load Piper Model

Load Piper Model, and the File-Naming Trap That Gets Everyone

By HairlessPrimate·Created 3 years ago·Updated 2 years ago· 32
Load Piper Model
    • TTS
    Model

    Load Piper Model is the boring half of ComfyUI-TTS, and the boring half is where everyone trips. It takes a voice file sitting on disk and turns it into a TTS object your graph can actually use - the thing you plug into Piper Speak Text so your text has something to be spoken by. Nothing about it is flashy. But if the two-node TTS pack isn't working, it's almost always this node's fault.

    The model it loads is Piper, the offline neural TTS engine from the Rhasspy/Home Assistant ecosystem. Piper's voices are VITS models exported to ONNX, which is why the whole thing runs happily on CPU with onnxruntime and doesn't care about your GPU. Each voice is a pair of files: the .onnx model itself and a .json config holding the espeak-ng voice and sample rate the engine needs to phonemize your text. Miss the JSON and the model won't load, period.

    The input that matters

    Just one, and it's an enum:

    • Model - a dropdown that lists every .onnx file in the pack's models/ folder. The sample value shown is en_US-lessac-medium.onnx, but the real list is whatever you dropped in. A beginner-friendly detail: this is the one place ComfyUI-TTS does the "load models in a consistent fashion with other ComfyUI models" thing the author promised - no hardcoded paths, just a picker.

    The single output is TTS, and it's the exact object Piper Speak Text wants on its TTS input. That's the whole pipeline: load here, speak there.

    Getting the voices

    This is where the README is bluntest, and where you should read carefully. Grab voices from the official repo - huggingface.co/rhasspy/piper-voices (the v1.0.0 tag is what the README points at) - and you need at least one. Piper has hundreds of voices across lots of languages and quality tiers (low/medium/high), so pick a language and go.

    # one voice = two files
    en_US-lessac-medium.onnx
    en_US-lessac-medium.onnx.json   # must match the onnx name exactly
    

    Copy them both into ComfyUI/custom_nodes/ComfyUI-TTS/models/. The author's own warning: some of the downloadable files are not named consistently, and the README literally says "it's up to you to fix that." If your model.onnx and model.json don't share a name, the loader won't find the config. Rename and it works; ignore it and you get a confusing load failure.

    Installing the pack

    Search ComfyUI-TTS in ComfyUI Manager's install page and hit install, restart, Ctrl+F5 to hard-reload. Or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/daniel-lewis-ab/ComfyUI-TTS
    pip install piper-tts
    

    The manual path needs that piper-tts install - it's the engine itself, and it's a lightweight CPU dependency, not a multi-gigabyte weight.

    Common gotchas

    • Empty dropdown. You installed the pack, restarted, and the Model picker has nothing in it. That means the .onnx files aren't in the models/ folder - wrong path, or you haven't copied them yet. The node only shows what it can see.
    • JSON name mismatch. The #1 actual failure. Match the config filename to the ONNX exactly.
    • The state of the pack. It's worth knowing what you're installing: a very early, deliberately basic release from a single author, last updated years ago. As of mid-2026 the GitHub repo returns 404 and the author's GitHub account no longer resolves, so a fresh git clone or Manager install may simply fail. If you can't get it, the Piper voices and concepts still carry over to the maintained TTS packs (Kokoro, the Qwen3-TTS family) that r/comfyui actually uses these days.
    CategoryTTS

    Inputs (1)

    NameTypeDefaultDescription
    ModelCOMBO1 options: en_US-lessac-medium.onnx

    Outputs (1)

    NameTypeDescription
    TTSTTS