Higgs v3 Multi-Speaker
Two (or six) cloned voices arguing in one ComfyUI graph
- higgs_model
- audio
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_audioandspeaker_N_reference_textslots 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.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| higgs_model | HIGGSV3TTS_MODEL | — | |
| text | STRING | [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_speakers | COMBO | Number of active speakers (2-6). Changing this adds or removes speaker audio/reference text inputs. | |
| pause_between_speakers | FLOAT | 0.300–3 | Seconds of silence inserted when moving from one speaker turn to the next. |
| max_new_tokens | INT | 204832–8192 | Maximum audio-code tokens per single pass. 2048 is roughly 25-30 seconds; raise it or enable chunking if speech cuts off. |
| temperature | FLOAT | 1.000–2 | Sampling variety. 0 is greedy; around 0.8-1.1 is usually natural. |
| top_p | FLOAT | 0.950–1 | Nucleus sampling cutoff. 1.0 disables it; 0.9-0.98 keeps speech expressive. |
| top_k | INT | 500–1026 | Limits each codebook sample to the top K choices. 0 disables it. |
| seed | INT | 00–2147483647 | 0 uses the current random state. A positive value is repeatable and is reused unchanged for every longform chunk. |
| longform_chunking | BOOLEAN | true | Split long text at sentence or pause-tag boundaries. Off is one direct pass and may stop early on long text. |
| words_per_chunk | INT | 4520–300 | Target words per chunk. Around 35-55 fits the 2048-token default better; raise with max_new_tokens for longer chunks. |
| pause_between_chunks | FLOAT | 0.150–2 | Seconds of silence inserted between longform chunks. Does not replace inline pause tags. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |