Nodes/ComfyUI_Fill-ChatterBox/FL Chatterbox Dialog TTS
ComfyUI Node

FL Chatterbox Dialog TTS

Turn a script into a 4-voice conversation

By filliptm·Created about a year ago·Updated 2 days ago· 231
FL Chatterbox Dialog TTS
  • speaker_A_Audio
  • speaker_B_Audio
  • speaker_C_Audio
  • speaker_D_Audio
  • dialog_audio
  • speaker_a_audio
  • speaker_b_audio
  • speaker_c_audio
  • speaker_d_audio
  • message
dialog_textSPEAKER A: Test test SPEAKER B: 1 2 3
exaggeration0.50
cfg_weight0.50
temperature0.80
seed0
use_cpufalse
keep_model_loadedfalse

If you've ever pieced together a two-character conversation in ComfyUI by generating each line separately and splicing them on a timeline, this node is the fix you didn't know you wanted. FL Chatterbox Dialog TTS takes a script - lines prefixed with SPEAKER A:, SPEAKER B:, and so on - and generates the whole conversation in one pass, with up to four distinct cloned voices. It's the pack's most fun node and, once you've wrestled with assembling dialog by hand, the most useful.

The clever bit isn't just that it's one node; it's the outputs. You get a single mixed dialog_audio track and an isolated track per speaker, with silence padding on the tracks where a given speaker isn't talking. That's gold if you want to mix, duck, or add per-speaker effects afterward - no manual alignment in an audio editor, the tracks line up by construction.

How it works. Under the hood it's the standard Chatterbox TTS model (the same one the flagship node uses), invoked line by line. Each line is matched to its speaker's reference audio, generated with that speaker's cloned voice, and the node concatenates the results while zero-padding the other speakers' tracks so everything stays time-aligned. It's the standard model's quality, applied to a conversation. Model weights come from ResembleAI/chatterbox and land in ComfyUI/models/chatterbox/ on first run - nothing special to download beyond what the pack already fetches.

The inputs that matter. Three things to get right:

  • dialog_text - the script. Each line must start with a label like SPEAKER A:; anything that doesn't match a label is skipped. Default looks like:
    SPEAKER A: Test test
    SPEAKER B: 1 2 3
    
    If a line is labeled for a speaker whose audio isn't connected (e.g. SPEAKER C: with no speaker_C_Audio), it's silently skipped - so make sure labels match what you've wired up.
  • speaker_A_Audio and speaker_B_Audio (required AUDIO) - the reference voices for speakers A and B.
  • speaker_C_Audio and speaker_D_Audio (optional AUDIO) - bring the cast up to four.

The generation dials mirror the standard node: exaggeration (0.25–2.0), cfg_weight (0.2–1.0), temperature (0.05–5.0), seed, plus use_cpu and keep_model_loaded.

Outputs. Six of them: dialog_audio (the full mixed conversation), speaker_a_audio / speaker_b_audio / speaker_c_audio / speaker_d_audio (per-speaker isolated tracks), and message (status string - if the script has no valid lines, it tells you "No valid dialog lines found."). All audio is 24 kHz like the rest of the pack.

Install. ComfyUI Manager, search "FL ChatterBox" - or:

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

Shared pack dependencies; the optional resemble-perth watermarking is best skipped on Python 3.12+.

Gotchas. Same 40-second-per-generation cap applies per line, so a two-minute script with long lines can trip it - keep lines short, or split the conversation into two nodes. Reference clips should be 5–6+ seconds for good clones. And while keep_model_loaded = True speeds up iteration, remember the dialog node uses the standard TTS model, so you're loading the same heavy weights as the flagship node - one cached model serves both.

CategoryChatterBox

Inputs (11)

NameTypeDefaultDescription
dialog_textSTRINGSPEAKER A: Test test SPEAKER B: 1 2 3
speaker_A_AudioAUDIO
speaker_B_AudioAUDIO
exaggerationFLOAT0.500.25–2
cfg_weightFLOAT0.500.2–1
temperatureFLOAT0.800.05–5
seedINT00–4294967295
speaker_C_AudiooptAUDIO
speaker_D_AudiooptAUDIO
use_cpuoptBOOLEANfalse
keep_model_loadedoptBOOLEANfalse

Outputs (6)

NameTypeDescription
dialog_audioAUDIO
speaker_a_audioAUDIO
speaker_b_audioAUDIO
speaker_c_audioAUDIO
speaker_d_audioAUDIO
messageSTRING