Kokoro TTS
TTS in ComfyUI that doesn't need a GPU or a cloud account
- audio
Text-to-speech has always been the awkward corner of ComfyUI. Everyone's building video, nobody's building the voiceover, and the usual workaround is leaving the graph to record your own narration or pulling in some cloud API. The Kokoro TTS node fixes that with two inputs and one surprising fact: it runs happily on CPU, fully local, no key, no account. It's a wrapper around Kokoro-82M, the 82-million-parameter model that keeps winning blind listening tests against models twenty times its size, and it sounds far better than a model that small has any right to.
The name is the giveaway - this is the ONNX port, via thewh1teagle's kokoro-onnx, so it doesn't need the PyTorch heavy lifting that most TTS stacks demand. You type a line, pick a voice, get an audio output you can drop straight into SaveAudio or merge into a video pipeline. It's the node you reach for when you want a narration track and your GPU is busy doing the actual generating.
How it works
Under the hood it's a thin wrapper. The node loads kokoro-v0_19.onnx and voices.json from its own folder, hands your text to kokoro.create(), and converts the resulting numpy array into ComfyUI's standard AUDIO format - a waveform tensor plus a sample rate. A IS_CHANGED check hashes your text and speaker, so it only re-runs when one of them actually changes instead of churning on every queue bump.
Two things worth knowing before you get attached to knobs that don't exist. Speed is hardcoded at 1.0 and language is hardcoded to en-us, so this node is English-only and you won't find controls for either. The underlying model speaks more languages via kokoro-onnx directly; this wrapper just doesn't expose them. Fine for narration, a dead end if you need French.
The inputs that matter
There are exactly two, and neither is scary.
- text - a multiline box for whatever you want spoken. The default is a YouTube promo for the author's channel, which is a choice; you'll be replacing it immediately.
- speaker - a dropdown of 11 voices. The prefix tells you everything:
af_is American female,am_American male,bf_British female,bm_British male.af_sarah(the default) is the crowd favorite, butam_adamandbf_emmaare worth a listen.
The single output, audio, is ComfyUI's standard AUDIO type, so it plugs into core SaveAudio or PreviewAudio, and anything that accepts audio - like video tools that merge a voiceover track - will take it straight from the wire.
Installing it
Here's the catch the README is upfront about: this pack is not in the ComfyUI Manager registry, so the "search and install" path won't find it. Manual it is:
cd ComfyUI/custom_nodes
git clone https://github.com/Burgstall-labs/ComfyUI-BS_Kokoro-onnx
cd ComfyUI-BS_Kokoro-onnx
pip install -r requirements.txt
Then the part people actually trip on: the model does not auto-download. Grab kokoro-v0_19.onnx and voices.json from the kokoro-onnx model releases and drop both into the custom_nodes/ComfyUI-BS-Kokoro-onnx/ folder. Then restart ComfyUI and hit R in the UI to refresh nodes. If you're on Windows, run the pip step against python_embeded\python.exe, not your system Python - the classic "node is missing" error is really "the dependency landed in the wrong interpreter."
Where people get burned
The dominant failure is the model-not-found error, and it's always the same story: files went into the wrong folder or never got downloaded at all. Check custom_nodes/ComfyUI-BS-Kokoro-onnx/ - not models/, where your diffusion weights live. The other classic is an import error at startup telling you kokoro-onnx isn't installed; that's the Python-environment mismatch above.
One genuine gotcha: the model download links have moved before, so if the README's URLs 404, grab the files from the current kokoro-onnx releases page rather than assuming the node is broken. And since this is a first repository from a solo dev (Burgstall, of BS Labs), treat it as what it is - a small, useful wrapper - and don't expect a pile of features to arrive. It's Apache-2.0-licensed through its dependencies, which makes it comfortable for commercial voiceover work.
Is it the fanciest TTS you can run? No. But it's local, it's fast on CPU, and it sounds good enough that most people stop looking.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Check out BS Labs youtube channel: https://www.youtube.com/channel/UCcYXt5R6tpQgKYxULWYD95Q | — |
| 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 | — |