Kokoro TextToSpeech
Put a voice on your ComfyUI characters without renting a GPU
- audio
You've got a video workflow that ends in talking heads - LatentSync, Wan lipsync, one of the LTX-2 setups - and your pipeline is missing the one thing that makes it feel alive: a voice. That's what Kokoro TextToSpeech is for. It's a two-input node that turns text into an audio waveform inside ComfyUI, so you can generate narration and lipsync in the same graph instead of bouncing out to an external TTS app and re-importing. No API key, no ElevenLabs subscription, no pip install of something that wants 24GB of VRAM.
The engine underneath is Kokoro-82M, a genuinely small (~82M parameter) open-source TTS model that's become the default pick for lightweight narration. The whole reason people reach for it over the heavier contenders is speed: it runs comfortably on CPU at real-time-or-faster, which is a weird sentence to hear in the ComfyUI world but is true. You don't burn a single frame of VRAM on TTS, and that matters when the GPU is already busy hallucinating video. It's Apache 2.0 licensed, and this pack just wraps the kokoro-onnx port by thewh1teagle - same engine as the older Burgstall-labs wrapper this one credits.
How it works
Under the hood the node is doing one thing: loading kokoro-v0_19.onnx plus voices.json from ComfyUI/models/Kokorotts, feeding your text and a chosen voice through kokoro.create(), and converting the resulting numpy array into a standard ComfyUI AUDIO dict (a waveform tensor plus a sample rate). Because that's the native AUDIO type, the output plugs straight into ComfyUI's PreviewAudio or SaveAudio, and - the headline move - into lipsync nodes like LatentSync's audio input. The author's example workflows show exactly that: text → Kokoro → LatentSync → talking character.
Only two inputs exist, and you'll set both of them:
- text - the words to speak. It's a plain single-line string input, so for a long script you'll usually be driving it from a
TextorStringnode rather than typing into the widget. - speaker - an enum of the 11 voices that ship in
voices.json, defaulting toaf_sarah. The naming scheme islanguage+gender_+name:af(American female),am_adam,bf_emma,bm_lewis, and so on. They're all distinct enough that it's worth a quick A/B before you commit to one for a project.
Installing it
The usual two-step. Either install "ComfyUI-KokoroTTS" through ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/benjiyaya/ComfyUI-KokoroTTS
pip install -r requirements.txt # kokoro-onnx, onnxruntime, numpy
Windows portable users, run that pip line through python_embeded\python.exe instead. Then restart ComfyUI.
Here's the part that trips people: the model does not download itself. The pack depends on kokoro-onnx, but the weights come from you. Make a folder called ComfyUI/models/Kokorotts, grab kokoro-v0_19.onnx and voices.json from huggingface.co/thewh1teagle/Kokoro, and drop both in. Miss either file and the node won't tell you on the canvas - it just returns None.
Where people get burned
- Silent failures. If files are missing or generation fails, the node logs the error to the terminal and returns
Nonerather than showing an error node. Your downstream audio preview will sit there empty. Check the console first. - "Multilingual" is a half-truth. The README advertises multilingual support, but this node hardcodes
lang="en-us"andspeed=1.0in the code. Kokoro the model can do more; this wrapper won't. Non-English text will come out wrong, and you have no speed control. - Wrong folder name. It's
Kokorotts, capital K, one "t" - the node resolvesmodels/Kokorottsliterally. Slightest typo and you're staring at empty audio again. - It's a 2025-era model. By 2026 the community has mostly moved on to Qwen3-TTS and Chatterbox for cloning and emotion. Kokoro still wins when you want fast, clean, free narration with zero setup hassle - just don't expect cloned celebrity voices out of its 11 stock speakers.
This node is the "good enough and instant" pick: light, local, and the fastest route from a script to a talking character in ComfyUI.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| speaker | COMBO | af_sarah | 11 options: af, af_sarah, af_bella, af_nicole, af_sky, am_adam, +5 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |