Nodes/Higgs v3 TTS/Higgs v3 Multi-Speaker
ComfyUI Node

Higgs v3 Multi-Speaker

Two (or six) cloned voices arguing in one ComfyUI graph

By Saganaki22·Created 3 months ago·Updated 4 days ago· 71
Higgs v3 Multi-Speaker
  • higgs_model
  • audio
text[Speaker_1]: Hello, I am speaker one. [Speaker_2]: And I am speaker two. <|sfx:laughter|>Haha, nice to meet you.
num_speakers
pause_between_speakers0.30
max_new_tokens2048
temperature1.00
top_p0.95
top_k50
seed0
longform_chunkingtrue
words_per_chunk45
pause_between_chunks0.15

The party trick of the Higgs v3 pack. Higgs v3 Multi-Speaker takes a scripted dialogue, pairs each speaker tag with its own reference clip, and generates the whole conversation as one audio pass - no stitching clips together in post. It's the node for podcasts, audiobook dialogue, animated shorts, or "what if these two voices had an argument" experiments. And since ComfyUI runs it locally, you can iterate a scene as many times as your GPU patience allows.

The mechanism is straightforward once you've used Voice Clone: each [Speaker_N]: line is routed through its own clone conditioning, then all turns are concatenated with a configurable silence between them. Longform chunking applies per speaker turn, so a speaker's line gets split at sentence boundaries like any other long text - which means writing short, natural turns gives you clean chunk boundaries and avoids mid-word cuts on long monologues.

How the script works

[Speaker_1]: Hello, I am speaker one.
[Speaker_2]: And I am speaker two. <|sfx:laughter|>Haha, nice to meet you.
  • text - the dialogue. Lines without a speaker tag continue the previous speaker, so you can keep a turn going across multiple lines.
  • num_speakers - 2 to 6. In newer ComfyUI this is a dynamic input that adds/removes the speaker_N_audio and speaker_N_reference_text slots as you change it. On older ComfyUI builds without dynamic inputs, extra slots appear as optional fallback inputs.
  • speaker_N_audio - required for each active speaker. The reference voice for that [Speaker_N]: tag.
  • speaker_N_reference_text - the transcript for that speaker's reference clip. Same rule as Voice Clone: a correct transcript makes the clone markedly better. Whisper Transcribe per speaker, then wire each result into its slot.
  • pause_between_speakers - silence between turns, default 0.3s. Bump it up for a more natural conversation pace.
  • The rest is the shared generation set - max_new_tokens, temperature, top_p, top_k, seed, longform_chunking, words_per_chunk, pause_between_chunks - applied to every turn.

Output: audio (AUDIO), one continuous clip you can preview, save, or feed into a video workflow.

What trips people up

Speaker inputs pair in order - speaker_1_audio then speaker_1_reference_text, then speaker 2, and so on - so it's easy to wire the wrong transcript to the wrong voice if you're not careful. Label your clips. Also note the same emotion-tag quirk as Voice Clone: strong emotion tags at the very start of a turn can drift the cloned speaker, so put them after the first word and attach the next word with no space.

The honest community verdict on this pack carries over here: Higgs v3 is excellent but not infallible - people report it occasionally skips an emotion or SFX tag even with correct syntax, and when it works it sounds great. So treat a full two-voice scene as a couple of takes away from perfect. One silver lining: because each turn is generated with its own conditioning, a failure is usually localized to one line, and fixing it doesn't nuke the whole scene's voice consistency the way re-running a monolithic model would.

Worth repeating since it's easy to get carried away with dialogue toys: Boson's license is research/non-commercial, and it explicitly requires consent before you clone a real person's voice. Fiction voices you own are fine; your neighbor's, not so much.

CategoryHiggs v3 TTS

Inputs (12)

NameTypeDefaultDescription
higgs_modelHIGGSV3TTS_MODEL
textSTRING[Speaker_1]: Hello, I am speaker one. [Speaker_2]: And I am speaker two. <|sfx:laughter|>Haha, nice to meet you.Dialogue script. Use [Speaker_1]:, [Speaker_2]:, etc. Lines without a speaker tag continue the previous speaker.
num_speakersCOMBONumber of active speakers (2-6). Changing this adds or removes speaker audio/reference text inputs.
pause_between_speakersFLOAT0.300–3Seconds of silence inserted when moving from one speaker turn to the next.
max_new_tokensINT204832–8192Maximum audio-code tokens per single pass. 2048 is roughly 25-30 seconds; raise it or enable chunking if speech cuts off.
temperatureFLOAT1.000–2Sampling variety. 0 is greedy; around 0.8-1.1 is usually natural.
top_pFLOAT0.950–1Nucleus sampling cutoff. 1.0 disables it; 0.9-0.98 keeps speech expressive.
top_kINT500–1026Limits each codebook sample to the top K choices. 0 disables it.
seedINT00–21474836470 uses the current random state. A positive value is repeatable and is reused unchanged for every longform chunk.
longform_chunkingBOOLEANtrueSplit long text at sentence or pause-tag boundaries. Off is one direct pass and may stop early on long text.
words_per_chunkINT4520–300Target words per chunk. Around 35-55 fits the 2048-token default better; raise with max_new_tokens for longer chunks.
pause_between_chunksFLOAT0.150–2Seconds of silence inserted between longform chunks. Does not replace inline pause tags.

Outputs (1)

NameTypeDescription
audioAUDIO