The upstream Chatterbox README documents paralinguistic tags ([laugh], [chuckle], [sigh], ...) as native to the Turbo family, and the vendored Turbo pack passes them straight to the tokenizer -- it never parses them. Our engine deleted them before the model saw them, so the feature looked implemented and was inaudible. * the text engine keeps a Turbo tag verbatim and records its name; on any other pack the nine Turbo names stay literal text instead of being swallowed as a voice name, and the run says so * the v2 angle tokens are re-spelled for Turbo (<giggle> -> [giggle]) and left untouched everywhere else * generate_audio now builds one plan for every family, synthesises one chunk per model call and joins the chunks; the classic path goes through the engine too, which is what makes "[Alice]" open a character segment * per-chunk seeds (seed + index) keep a chunked run reproducible without giving every chunk the same prosody * four appended widgets on ChatterboxTTS: enable_chunking, max_chars_per_chunk, chunk_combination_method, silence_between_chunks_ms * chunk boundaries prefer a sentence end and never land inside a tag * Turbo's exaggeration is passed as 0.0: the family ignores it for sampling and upstream warns about every non-zero value, once per chunk
◇ ComfyUI-Chatterbox ◆ Revised ◆
Chatterbox, refactored. Text-to-Speech and Voice Conversion for ComfyUI on a leaner core. Supports: classic, Turbo, Nano, Flash, Multilingual.
Less to import. No temp files. Same voices, faster to a result.
Note
ComfyUI-Chatterbox runs a refactored Chatterbox core. The vendored model code reimplements its audio DSP in pure numpy/torch, bit-for-bit with the original (verified against librosa 1.0.0 on the trained featurization parameters), and drops
librosa,scipy,omegaconfandconformer. Reference clips are handed to the model in memory, never through a temp.wav. The only package this node adds iss3tokenizer. Models download on first run intoComfyUI/models/tts/chatterbox/.
Table of Contents
◆◇◆◇◆◇◆◇◆◇◆
❖ Features
| Capability | Detail |
|---|---|
| One TTS node, every pack | classic, Turbo 350M, Nano 110M and Flash are routed automatically from the pack's contents |
| Multilingual TTS | 23 languages, v1 / v2 / v3 weights, plus six Single Language Pack finetunes (zh-cmn, es-mx, es-es, pt-br, pt-pt, hi) |
| Voice cloning | any .wav / .mp3 as the voice prompt, passed to the model in memory |
| Voice conversion | re-voice a source recording into a target timbre |
| Multi-speaker dialog | up to four cloned voices in one output, with SRT subtitle alignment |
| Lean core | DSP in pure numpy/torch, bit-exact with the original; s3tokenizer is the only dependency |
| Devices | CUDA, ROCm, XPU, MPS and CPU, under ComfyUI's VRAM manager |
◆◇◆◇◆◇◆◇◆◇◆
⌸ Models
Downloaded on first run into ComfyUI/models/tts/chatterbox/ (~2.5 GB each).
Shared weights (ve.safetensors, s3gen*) are stored once and reused across
packs.
| Family | Members | Notes |
|---|---|---|
| Classic | chatterbox |
English TTS, built-in reference voice in conds.pt |
| Turbo | chatterbox-turbo, chatterbox-turbo-nano |
Paralinguistic tags, top-k sampler; 350M / 110M |
| Flash | chatterbox-flash |
Block-diffusion sampler; a reference clip is required |
| Multilingual | chatterbox-mtl |
23 languages, v1 / v2 / v3 |
| Single Language Packs | zh-cmn, es-mx-latam, es-es, pt-br, pt-pt, hi | MTL node only |
Tip
Picks appear in the node's model dropdown; nothing to configure by hand. Ready-made graphs for every family live in
example_workflows/.
◆◇◆◇◆◇◆◇◆◇◆
⇩ Getting started
ComfyUI Manager — Manager → Install Custom Nodes → search
ComfyUI-Chatterbox → Install → restart.
Manual installation
cd ComfyUI/custom_nodes
git clone https://github.com/wildminder/ComfyUI-Chatterbox.git
pip install -r ComfyUI-Chatterbox/requirements.txt
Restart ComfyUI. Nodes appear under WMNodes/sound/*.
| Requirement | Version |
|---|---|
| Python | >=3.10 (tested through 3.13) |
| ComfyUI | >=0.37.0 (V3 node API) |
| Added dependency | s3tokenizer only, a pure-Python wheel |
Optional extras, installed as pip install ComfyUI-Chatterbox[extra]:
watermarking (resemble-perth), multilingual (pykakasi, spacy-pkuseg) and
turbo (pyloudnorm). Nothing else is required; the rest of the stack comes
from ComfyUI itself.
◆◇◆◇◆◇◆◇◆◇◆
❯ Usage
- Add a node from
WMNodes/sound/*. - Pick the model; connect an
AUDIOinput to clone a voice. - Queue the prompt.
| Node | Menu name | Does |
|---|---|---|
ChatterboxTTS |
Chatterbox TTS 📢 | Speech from text, optional voice cloning. One node for every TTS pack. |
ChatterboxMTLTTS |
Chatterbox Multilingual TTS 🌍 | Speech in 23 languages, plus the Single Language Packs. |
ChatterboxVC |
Chatterbox Voice Conversion 🗣️ | Re-voices a source recording into a target voice. |
ChatterboxDialog |
Chatterbox Multi-Speaker Dialog 🎭 | Multi-speaker conversation, up to four cloned voices. |
ChatterboxSRT |
Chatterbox SRT / Subtitles 📝 | Speaks a timed SRT script and returns adjusted subtitles. |
Every widget is documented in its node tooltip. Load a graph from
example_workflows/ to see the nodes wired up.
When a node fails at execution — a missing reference clip, a pack with no
conversion model — the message shows up as a toast in the web UI, naming the
node and the error. Add Chatterbox.ErrorToasts to the Comfy.Extension.Disabled
list in ComfyUI's settings to turn the toasts off.
◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆
⌗ Good to know
| No version pins | ComfyUI Manager resolves the stack; a pin could force a downgrade of the host's torch build. |
| Offline | Packs are fetched by a first-run download and a local pack is never re-downloaded afterwards. |
| VRAM | Weights load under ComfyUI's manager and offload between runs; ~2.5 GB per pack on disk as safetensors. |
| Layout | Node code lives in nodes/, the vendored Chatterbox core in src/chatterbox/. |
| Emotion tags & chunking | Turbo and Nano packs speak the paralinguistic tags natively: write [laugh], [chuckle], [sigh], [clear throat] and the rest into the text box and the model says them. Classic, multilingual and Flash packs have no such vocabulary, so the same words are read out as plain text and the run says so in the log. <giggle>-style v2 tokens are re-spelled for Turbo and left alone elsewhere. Long scripts are cut into chunks, spoken one chunk at a time and joined again -- auto picks the join by script length (clean under 500 characters, crossfaded above it, padded with silence above 1000), and the cut never lands inside a tag. |
| Upgrading from 1.x | 2.0.0 moved packs from models/chatterbox_tts/ to models/tts/chatterbox/. No compatibility shim is provided, so delete the old directory by hand. Widget order did not change and node ids did not change, so saved workflows still load. |
| Changelog | CHANGELOG.md |
◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆
❖ Acknowledgments
- Resemble AI for the Chatterbox models
- comfyanonymous for ComfyUI