Mikael SvensonandClaude Opus 4.6 036b919537 Fix voice encoder float64 crash on numpy 2.x
The VoiceEncoder LSTM expects float32 input but receives float64 mel
spectrograms on numpy 2.x. Patch VoiceEncoder.forward() to cast mels
to float32. Also patch chatterbox's bundled s3tokenizer (not just pip
package) and add double-patch guard.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 13:04:41 +01:00
2026-03-02 22:52:43 +01:00

ComfyUI-ChatterBox-Turbo

ComfyUI custom nodes for ChatterBox Turbo — a fast 350M-parameter text-to-speech model with paralinguistic emotion tag support by Resemble AI.

Features

  • Fast generation — 1-step mel decoder, significantly faster than the original ChatterBox
  • 19 emotion/paralinguistic tags — [dramatic], [sarcastic], [happy], [whispering], and more
  • Voice cloning — pass a short WAV reference to clone any voice
  • Multi-speaker dialogue — generate full conversations with automatic voice switching
  • Auto model download — model weights download automatically from HuggingFace on first use

Nodes

ChatterBox Turbo TTS (ChatterboxTurboGenerate)

Single text-to-speech generation. Good for experimentation and manual workflows.

Input Type Default Notes
text STRING (multiline) required Supports emotion tags: [dramatic] Breaking news!
audio_prompt_path STRING "" Path to voice reference WAV inside the container
reference_audio AUDIO (optional) — Alternative: connect audio from another node
temperature FLOAT 0.8 0.05–5.0
top_p FLOAT 0.95 0.0–1.0
repetition_penalty FLOAT 1.2 1.0–2.0
seed INT 0 0 = random

Output: AUDIO (24 kHz)

ChatterBox Turbo Dialogue (ChatterboxTurboDialogue)

Multi-speaker dialogue generation. Designed for pipeline integration and batch scripts.

Input Type Default Notes
script STRING (multiline) required One Speaker: text per line
voice_map STRING "{}" JSON mapping speaker names to WAV paths
pause_s FLOAT 0.35 Pause between lines (seconds)
temperature FLOAT 0.8
top_p FLOAT 0.95
repetition_penalty FLOAT 1.2
seed INT 0

Outputs: AUDIO (concatenated dialogue), STRING (generation info)

Script format:

Mac: [dramatic] Breaking news everyone!
Luna: [surprised] That's right Mac, incredible!
Mac: [sarcastic] Can you believe it?

Voice map example:

{
  "Mac": "/path/to/Mac.wav",
  "Luna": "/path/to/Luna.wav"
}

Emotion & Paralinguistic Tags

ChatterBox Turbo supports 19 special tokens trained into the model as added_tokens on top of the GPT-2 vocabulary (token IDs 50257–50275). The full list is defined in added_tokens.json in the model repo. The upstream ChatterBox README mentions [cough], [laugh], [chuckle] as examples — the complete set of 19 is listed below.

Place a tag at the start of a line to set the delivery style for that line.

Emotion Tags (affect the entire delivery)

Tag Best for Example
[dramatic] Breaking news, reveals, cliffhangers [dramatic] This changes everything!
[sarcastic] Irony, dry humor, deadpan delivery [sarcastic] Oh sure, that went perfectly.
[happy] Upbeat, celebratory, good news [happy] We just hit a million subscribers!
[surprised] Reactions, plot twists, disbelief [surprised] Wait, are you serious right now?
[angry] Outrage, frustration, intensity [angry] This is completely unacceptable!
[fear] Tension, warnings, alarm [fear] Something is very wrong here.
[crying] Sadness, emotion, sympathy [crying] I cannot believe they are gone.
[whispering] Secrets, asides, intimacy [whispering] Nobody is supposed to know this.
[narration] Neutral storytelling, documentary tone [narration] The year was nineteen sixty nine.
[advertisement] Sales pitch, promo, upbeat sell [advertisement] Try it free for thirty days!

Vocal Sound Effects (inject a specific sound)

Tag Effect
[laugh] Full laugh
[chuckle] Soft/brief laugh
[gasp] Sharp intake of breath
[sigh] Exhalation, weariness
[groan] Displeasure, frustration
[sniff] Nasal sound
[cough] Cough
[clear throat] Throat clearing
[shush] Shushing sound

Tips for Script Writing

  • One tag per line. Place it at the start: [dramatic] The verdict is in.
  • Emotion tags work best at sentence start. Sound effects can go mid-sentence: Well [chuckle] that was unexpected.
  • Don't overuse. Not every line needs a tag — untagged lines get natural delivery from the voice reference.
  • Match tag to content. [surprised] on mundane text sounds odd. Use it for genuine reveals.
  • Best tags for news/TikTok scripts:
    • [dramatic] — opening lines, breaking news, reveals
    • [surprised] — reactions to the other speaker
    • [sarcastic] — commentary, humor, disbelief
    • [happy] — positive stories, celebrations
    • [narration] — factual context, transitions
    • [laugh] / [chuckle] — between speakers for natural feel

Installation

ComfyUI Manager

Search for "ChatterBox Turbo" in ComfyUI Manager and install.

Manual

cd ComfyUI/custom_nodes
git clone https://github.com/wobba/ComfyUI-ChatterBox-Turbo.git
pip install -r ComfyUI-ChatterBox-Turbo/requirements.txt

Restart ComfyUI after installation.

Model Download

The model (~700 MB) downloads automatically from ResembleAI/chatterbox-turbo on HuggingFace the first time either node runs. Files are stored in the standard ComfyUI models directory:

ComfyUI/models/TTS/chatterbox-turbo/

The folder is registered with ComfyUI's folder_paths system and respects extra_model_paths.yaml overrides. No manual download needed.

Runtime Patches

This node includes three compatibility patches applied at import time:

  1. Perth watermarker — The perth audio watermarking library uses pkg_resources, which was removed in Python 3.13. If the real Perth module loads successfully, watermarking works normally. On Python 3.13+ where Perth fails to import, a no-op mock is installed so generation still works — but output audio will not be watermarked. This is logged at startup.

  2. s3tokenizer float32 — On numpy 2.x, STFT operations return float64 instead of float32. The patch casts magnitudes back to float32 after STFT.

  3. prepare_conditionals float32 — On numpy 2.x, librosa.load() returns float64 arrays. The patch ensures audio arrays are cast to float32 before being passed to the model.

Requirements

  • ComfyUI with CUDA GPU
  • Python 3.11+ (tested on 3.13)
  • Dependencies: chatterbox-tts, soundfile, librosa, huggingface_hub, perth
  • PyTorch, torchaudio, and numpy are expected from the ComfyUI environment

Credits

License

MIT

S
Description
No description provided
Readme MIT
69 KiB
Languages
Python 100%