KittenTTS Loader
A TTS model loader with zero dials — and that's the whole point
- MODEL
The KittenTTS Loader is the most boring node in this pack, and that's meant as a compliment. It has no required inputs, no optional inputs, and no settings - you drop it on the canvas, it goes and gets a ~24MB text-to-speech model, and it hands you a MODEL socket. That's it. If you've ever wrestled with a TTS pack that needs you to hunt down checkpoints, vocab files, and a matching config JSON, this is the anti-that.
It's the front half of a two-node pair (the other half being the KittenTTS Sampler, which actually turns text into speech). Think of TTS inside ComfyUI as the thin end of the ecosystem: audio was bolted onto an image-and-video tool, so it mostly arrives in small bespoke packs like this one rather than in core. This pack's whole angle is "lightweight." Where quality-tier models like Chatterbox or F5-TTS want a real GPU and a multi-GB download, Kitten TTS Nano is an ONNX model under 25MB that runs fine on CPU. It's the Kokoro of Kokoros - best voice per almost no compute, not best voice.
How it works
The first time you load it, the node instantiates the KittenTTS wrapper, which pulls KittenML/kitten-tts-nano-0.1 down from Hugging Face (config, the ~24MB ONNX file, and a 10KB voices.npz) and caches it through huggingface_hub. Then it spins up an onnxruntime inference session. So the "download the model" step you'd normally do by hand is fully automated - the README calls it zero-config, and it is.
One honest heads-up before you wire anything: that MODEL output is not a diffusion checkpoint. It's a plain Python object riding the MODEL socket type, and it will only ever plug into this pack's KittenTTSSampler. Don't try to feed it into a CheckpointLoader or an unload node - ComfyUI type-checks will happily let you connect, and then nothing sensible happens. This is one of those "the socket is a lie, but a useful lie" situations.
Also worth knowing: the loader builds the eSpeak NG phonemizer at load time, not at generation time. So if you've installed the pack but skipped the eSpeak system dependency, the error shows up right here, before you've ever typed a sentence.
The one output that matters
- MODEL - wire it straight into
KittenTTSSampler'stts_modelinput. Nothing else.
Install
Via ComfyUI Manager, search for ComfyUI-KittenTTS and hit install. Or the manual way from the README:
cd ComfyUI/custom_nodes
git clone https://github.com/neverbiasu/ComfyUI-KittenTTS
cd ComfyUI-KittenTTS
pip install -r requirements.txt
Then install eSpeak NG and make sure its bin folder is on PATH (on Debian/Ubuntu that's sudo apt install espeak-ng; on Windows grab the release installer). Restart ComfyUI afterward. The Python deps are modest for an audio pack - onnxruntime, huggingface_hub, soundfile, plus the phonemizer front-end stack (misaki, espeakng_loader, spacy, num2words) - but they do get installed into whatever Python runs ComfyUI, so the usual "use a venv or expect the occasional dependency grumble" rule applies.
Common issues
- Error building the phonemizer / eSpeak not found. You skipped the eSpeak NG step, or it's not on PATH. Install it and restart ComfyUI - the loader will throw until you do.
- Model download failures. It needs outbound access to Hugging Face on first use. No network, no model; fix the connection and retry. First load also just takes a moment because of the download.
- Expectation mismatch. This is a tiny novelty-grade TTS voice, not ElevenLabs. Community takes on the underlying model range from "cute" to "sounds like speaking through a paper sheet." For quick local narration in a test workflow, fine. For anything that'll be heard by humans who matter, reach for a bigger model.
Inputs (0)
No inputs
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |