KittenTTS Sampler
Type a sentence, get speech at 24kHz, no GPU required
- tts_model
- AUDIO
This is the node that makes your text audible. The KittenTTS Sampler takes a sentence, a voice, and a speed, and hands back a standard ComfyUI AUDIO socket you can save or mix into a video. It's the second half of the ComfyUI-KittenTTS pair: the KittenTTS Loader fetches the model, this node does the talking.
Where does it sit in the TTS landscape? Audio generation is the thinnest layer of ComfyUI - it's a bolt-on ecosystem of small node packs, not core functionality - and inside that, this pack is the deliberately tiny corner. It runs a ~24MB ONNX model (KittenML/kitten-tts-nano-0.1, Apache-2.0) that works on CPU, needs no API key, and speaks entirely offline. If Kokoro is "best voice per unit of compute," Kitten TTS Nano is "a voice per almost no compute." Quality-tier engines like Chatterbox or F5-TTS sound better but want a GPU and gigabytes of weights. For throwing a quick narration into a test workflow on a laptop, this is the zero-friction option.
How it works
Under the hood it's a clean little front-end + ONNX pipeline. Your text gets phonemized to IPA-ish tokens via eSpeak NG (US English), cleaned into a symbol-ID sequence with start/end tokens, then pushed through the ONNX session with a style vector pulled from voices.npz by voice name, plus a speed scalar. The raw audio is trimmed on both ends, reshaped to [1, 1, T], and returned at 24000 Hz wrapped in the standard ComfyUI audio dict - {"waveform": Tensor[B,C,T], "sample_rate": int}. That dict shape is exactly what core SaveAudio and the various AUDIO-consuming video nodes expect, so it drops into existing workflows without an adapter.
The inputs that matter
You only really touch a few of these:
- tts_model - the
MODELsocket fromKittenTTSLoader. Wire it in and forget it. - text - the line to speak. Multiline, so full paragraphs work. An empty or whitespace-only string raises an error, so don't leave the default blank.
- voice - a dropdown of eight preset voices:
expr-voice-2throughexpr-voice-5, each in male/female (m/f). Default isexpr-voice-5-m. There's no cloning here; the "expr" voices are small baked-in styles. - speed - a float from 0.5 to 2.0 in 0.05 steps, default 1.0. 0.5 is half-speed drawl, 2.0 is auctioneer. The pack's own example workflow runs
expr-voice-3-fat 1.25, which is a decent starting point for narration.
The output
- AUDIO - the standard ComfyUI audio dict at 24000 Hz. Wire it into
SaveAudio(core) to write a WAV, or into any node that takes anAUDIOinput if you're adding a voice track to a video you generated.
Install
Same steps as its sibling - search ComfyUI-KittenTTS in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/neverbiasu/ComfyUI-KittenTTS
cd ComfyUI-KittenTTS
pip install -r requirements.txt
The one system requirement that bites people: eSpeak NG must be installed and its bin folder on PATH (e.g. sudo apt install espeak-ng on Debian/Ubuntu, the release installer on Windows), then restart ComfyUI. This pack's Python deps - onnxruntime, misaki, espeakng_loader, spacy, num2words, soundfile, huggingface_hub - install into ComfyUI's Python, so run it in the environment you actually use.
Common issues
- Phonemizer/eSpeak errors. The classic. eSpeak NG missing or not on PATH. Install it, restart ComfyUI. Because the loader builds the phonemizer at load time, you may see this before you even touch this node.
- It sounds rough. Set expectations. When Kitten TTS Nano was announced on r/StableDiffusion, the feedback was honest: some samples came out "distorted, noisy and as if speaking through a paper sheet." This is a lightweight novelty voice, not a Chatterbox or ElevenLabs replacement. Great for quick test audio, bad for anything with a real audience.
- English only. The phonemizer is hardcoded to US English. Numbers get expanded (that's what
num2wordsis for), but don't feed it your French or Japanese script. - Downstream AUDIO errors. If a consumer node complains, check it expects the standard dict - this node outputs
[1,1,T]at 24000 Hz, which is what well-behaved ComfyUI audio nodes want.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| tts_model | MODEL | — | |
| text | STRING | — | |
| voice | COMBO | expr-voice-5-m | 8 options: expr-voice-2-m, expr-voice-2-f, expr-voice-3-m, expr-voice-3-f, expr-voice-4-m, expr-voice-4-f, +2 |
| speed | FLOAT | 1.000.5–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |