Nodes/ComfyUI-Chatterbox/Chatterbox Multilingual TTS 🌍
ComfyUI Node

Chatterbox Multilingual TTS 🌍

23 languages, and a version dropdown that actually matters

By wildminderΒ·Created about a year agoΒ·Updated a day agoΒ· 105
Chatterbox Multilingual TTS 🌍
  • audio_prompt
  • audio
β—„model_pack_nameresembleai_default_voiceβ–Ί
β—„model_versiont3_mtl23ls_v3.safetensorsβ–Ί
β—„languageenβ–Ί
β—„textHello, this is a test of Chatterbox multilingual TTS in ComfyUI.β–Ί
β—„exaggeration0.5β–Ί
β—„temperature0.80β–Ί
β—„cfg_weight0.50β–Ί
β—„repetition_penalty1.2β–Ί
β—„min_p0.05β–Ί
β—„top_p1.00β–Ί
β—„seed0β–Ί
β—„use_watermarkfalseβ–Ί
β—„devicedefaultβ–Ί
β—„dtypeautoβ–Ί
β—„attention_modesdpaβ–Ί
β—„crash_protection_templatehmm ,, {seg} hmm ,,β–Ί

Most open TTS is English-first. Chatterbox's multilingual line is the exception that made local non-English voice work boring, and this node is the whole thing in one place: 23 languages, cloning from a reference clip, and three checkpoint versions you get to pick between.

Why you'd reach for it

Chatterbox (Resemble AI, MIT, 0.5B Llama backbone) is the model that made open TTS genuinely competitive with paid voice services - the launch reception was a room full of skeptics slowly agreeing that the ElevenLabs comparison held up - and it did that while staying MIT and cloneable from about five seconds of audio. ChatterboxMTLTTS is the branch of that model for everything that isn't English.

Worth being straight about where it still loses: for production multi-language work where a mispronunciation costs money, ElevenLabs remains the reliability bar. But for a character speaking German in your video, or narration you want to keep local and private, this is the node.

How it works

Upstream Chatterbox's multilingual tokenizer takes a language tag and prepends it itself. So this node never splices a language string into your text - language goes in as a separate keyword argument, and if a node inserted it twice you'd get a doubled prefix that fails deep inside the T3 model with an unhelpful error. The dropdown value and what the model receives are one and the same.

Three checkpoints sit behind model_version, and the default is deliberately not upstream's:

  • t3_mtl23ls_v3.safetensors (default) - the newest, better speaker similarity and fewer hallucinations. It skips the legacy alignment analyzer and trims the final-token artifact.
  • t3_mtl23ls_v2.safetensors - upstream's own default. The only version with the 30 documented special tokens (<giggle>, <whisper>, <clear_throat> and friends).
  • t3_23lang.safetensors - the original 23-language model, no special-token vocabulary.

The widget shows resolved filenames rather than a bare v3, which sounds fussy until you're comparing a workflow against a Hugging Face file listing. Inside text you get the full tag grammar too: [Alice] switches to a named character, [de:Alice] sets both language and character, [pause:1.5] drops silence after a segment, and on v2 the angle-bracket special tokens.

The inputs that matter

Required: model_pack_name, model_version, language (ISO 639-1 codes: ar da de el en es fi fr he hi it ja ko ms nl no pl pt ru sv sw tr zh), text, plus exaggeration, temperature, cfg_weight, repetition_penalty, min_p, top_p, seed, use_watermark and the runtime trio device / dtype / attention_mode.

audio_prompt is the optional one that does the heavy lifting: five or six seconds of clean speech to clone. Leave it unconnected and you get the checkpoint's built-in voice - the multilingual repo and the zh-cmn Single Language Pack ship one, the other five Single Language Packs don't, and for those a reference clip is not optional. crash_protection_template pads any segment under 21 characters (short input is what makes upstream Chatterbox fail in sequential generation); the tooltip offers ...ummmmm {seg}, {seg}... yes... {seg} and Well, {seg} as alternatives to the default hmm ,, {seg} hmm ,,, and '' disables it.

Output is a single audio socket. Wire it into a save-audio node, a video mux, or straight into an audio-driven avatar.

Two things people get wrong

exaggeration does nothing on v3. This is the author's own caveat in the tooltip, repeated here because it will otherwise eat your afternoon: current v3 weights show little or no audible response to the control - which is exactly why the range on this node is 0.0–5.0 instead of the classic node's 0.25–2.0. It's a property of the released weights, not a bug, and there's no fix. v1 and v2 still respond to it, so if you need that dial, switch model_version to v2 - which is also the version that carries the special-token vocabulary.

Language is one per model call. The dropdown is the language of the whole synthesis; per-segment language switching isn't something this node does. There's also no Vietnamese - the Vietnamese and Egyptian-Arabic models out there are community finetunes, and they load as ordinary local checkpoints rather than as dropdown entries.

The Single Language Pack finetunes (zh-cmn, es-mx-latam, es-es, pt-br, pt-pt, hi) ignore model_version entirely: each ships its own per-language T3 checkpoint, and each is pinned to its language.

Install

Manager β†’ Install Custom Nodes β†’ search ComfyUI-Chatterbox β†’ Install β†’ restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/wildminder/ComfyUI-Chatterbox.git
pip install -r ComfyUI-Chatterbox/requirements.txt

The pack adds exactly one package, s3tokenizer, because the vendored Chatterbox core reimplements its audio DSP in pure numpy/torch and drops librosa, scipy, omegaconf and conformer. Needs ComfyUI >=0.37.0 (V3 node API) and Python >=3.10. Packs download on first run into ComfyUI/models/tts/chatterbox/, ~2.5 GB each, shared weights stored once.

For CJK and Korean text, install the optional extras - pip install ComfyUI-Chatterbox[multilingual] pulls pykakasi and spacy-pkuseg. Without them the tokenizer degrades with a warning and keeps going rather than raising, so a Japanese prompt won't hard-fail, it'll just segment worse.

One known wrinkle with the single dependency: s3tokenizer has been reported failing to install on Python 3.10 setups (Stability Matrix ships 3.10) while installing fine on 3.12. If pip dies at install time, that's the first thing to check.

CategoryWMNodes/sound/tts

Inputs (17)

NameTypeDefaultDescription
model_pack_nameCOMBOresembleai_default_voiceSelect the Chatterbox checkpoint directory to load the multilingual T3 weights from.
model_versionCOMBOt3_mtl23ls_v3.safetensorsWhich multilingual T3 checkpoint to load. The options are the resolved filenames, not labels. t3_mtl23ls_v3.safetensors (default) is the newest official checkpoint: better similarity, fewer hallucinations. It skips the legacy alignment analyzer and trims the final-token artifact. t3_mtl23ls_v2.safetensors is upstream's own default (DEFAULT_MULTILINGUAL_T3_MODEL). This node defaults to v3 deliberately. t3_23lang.safetensors is the original 23-language model, with no special-token vocabulary. Only v2 has the 30 documented special tokens (<giggle>, <whisper>, <clear_throat> and the rest). Single Language Packs ignore this widget: each ships its own per-language t3 checkpoint (t3_zh_cmn, t3_es_mx_latam, ...), which loads regardless of what is selected here.
languageCOMBOenLanguage of the text. 23 languages, shown as ISO 639-1 codes: ar da de el en es fi fr he hi it ja ko ms nl no pl pt ru sv sw tr zh. There is no Vietnamese -- the Vietnamese and Egyptian-Arabic models are community finetunes, and load like any other local checkpoint. Single Language Pack finetunes are pinned to their own language: zh-cmn speaks zh, es-mx-latam and es-es speak es, pt-br and pt-pt speak pt, hi speaks hi.
textSTRINGHello, this is a test of Chatterbox multilingual TTS in ComfyUI.Text to be synthesized into speech.
exaggerationFLOAT0.50–5Controls the expressiveness and emotional intensity. Note: current v3 weights show little or no audible response to this control, which is why the range here is 0.0-5.0 rather than the classic node's 0.25-2.0. v1 and v2 still respond. There is no fix for this; it is a property of the released weights.
temperatureFLOAT0.800.05–5Controls the randomness of the sampling process. Higher values produce more diverse speech, while lower values are more deterministic.
cfg_weightFLOAT0.500–1Classifier-Free Guidance (CFG) weight. Controls how strongly the model adheres to the text prompt. Higher values may reduce naturalness.
repetition_penaltyFLOAT1.21–5Penalizes repeated tokens to discourage monotonous or repetitive speech. A value of 1.0 means no penalty.
min_pFLOAT0.050–1Sets a minimum probability threshold for nucleus sampling (Min-P). Filters out tokens with very low probability.
top_pFLOAT1.000.1–1Nucleus sampling (Top-P) parameter. The model samples from the smallest set of tokens whose cumulative probability exceeds this value.
seedINT00–18446744073709550000Seed for random number generation. A value of 0 will use a random seed.
use_watermarkBOOLEANfalseEnable or disable the audio watermark. Requires 'resemble-perth' to be installed.
deviceCOMBOdefaultDevice to run inference on. 'auto' follows ComfyUI's default compute device.
dtypeCOMBOautoData type for model precision. 'auto' lets ComfyUI pick the best type for the target device.
attention_modeCOMBOsdpaAttention implementation. Backends this machine cannot run are left out of the dropdown; a saved graph that names one anyway falls back to 'sdpa'.
crash_protection_templateSTRINGhmm ,, {seg} hmm ,,Padding applied to any segment shorter than 21 characters. Upstream Chatterbox fails on short text in sequential generation; {seg} is replaced by the segment. Set to '' to disable. Presets: '...ummmmm {seg}' (hesitation), '{seg}... yes... {seg}' (repetition), 'Well, {seg}' (natural prefix).
audio_promptoptAUDIOReference audio to clone the voice from. 5-6 seconds of clean speech is recommended. When left unconnected the checkpoint's built-in voice is used. The multilingual repo and the zh-cmn Single Language Pack ship one; the other five Single Language Packs do not -- for them a reference clip is required.

Outputs (1)

NameTypeDescription
audioAUDIOβ€”