DiaTTS Run
Make two cloned voices have a conversation in one pass
- audio_s1
- audio_s2
- audio
What it is
This is the node the whole ComfyUI_Dia pack exists for: it takes two reference voice clips and a script, and generates a complete two-person conversation in a single pass - both voices cloned, no per-line generation, no stitching. The TTS landscape covered in the audio-generation doc is almost all single-speaker (Chatterbox, F5-TTS, Kokoro). This is the dialogue corner of that map, and it's a genuinely different thing.
Under the hood it's the nari-labs Dia-1.6B model, a sequence-to-sequence speech model that turns text into audio-codec tokens (via the Descript Audio Codec, the DAC.speech.v1.0 weights the pack asks for) and decodes them back to a 44.1 kHz waveform. The clever part is how cloning works: it's in-context. The two reference clips aren't fine-tuned into the model - they're fed in as an audio prompt alongside a text transcript, and the model imitates both voices for the new lines. That's why the wiring is what it is.
The inputs that matter
The two inputs that matter most:
audio_s1/audio_s2- the reference voices. Wire twoLoadAudionodes (orDiaSpeakersPreviewif you saved a pair before). These are your cast.prompt- the transcript of those reference clips, in[S1] ... [S2] ...format. Do not skip this. Community testing of the Dia model is blunt: without a transcript of the sample audio, cloning comes out as gibberish. The reference clips teach the timbre; the transcript tells the model who says what.text- the new dialogue you want, same[S1]/[S2]format. For long scripts, split into blocks separated by blank lines; each block generates separately and gets concatenated, which is how arbitrary-length output works here.
The rest of the inputs are generation dials with sensible author defaults: max_new_tokens (3000), cfg_scale (3.0), temperature (1.3), top_p (0.95), cfg_filter_top_k (30). Leave them alone until you're chasing a specific artifact. One you will touch: unload_model defaults to true, which frees your VRAM after every run - but the model is ~10GB, so that means reloading it each time. For back-to-back runs set it false and let it sit in memory. The two optional inputs, save_speakers and speakers_id, persist the voice pair so DiaSpeakersPreview can reload it next session.
The single audio output is a normal ComfyUI AUDIO tensor - feed it to PreviewAudio, SaveAudio, or pass it to anything that takes audio. Since the pack generates and concatenates internally, one run out is the whole conversation.
Install
Install from the README:
cd ComfyUI/custom_nodes
git clone https://github.com/billwuhao/ComfyUI_Dia.git
cd ComfyUI_Dia
pip install -r requirements.txt # pydantic + descript-audio-codec
Then two model downloads, both under ComfyUI/models/TTS/: the entire Dia-1.6B directory from HuggingFace (nari-labs/Dia-1.6B), and descript-audio-codec's weights.pth renamed to weights_44khz_8kbps_0.0.1.pth and placed in TTS/DAC.speech.v1.0/. ComfyUI Manager search "ComfyUI_Dia" handles the code side if you prefer.
What to expect, honestly
What to expect, honestly. This is a niche, fresh pack - there are a couple of competing Dia wrappers around, and this one's edge is speaker save/load plus a Gemini-scripted workflow. The model itself wants a decent GPU (people have run it on 6GB cards, 10GB VRAM is the comfortable zone) and a single dialogue takes on the order of 30–45 seconds. Two real limitations from the community: because both voices come from reference clips, you generally get two voices of the same gender, so don't plan a man-woman duet from two female clips; and the text has to use the dialogue format - no freeform assistant-style TTS. It also supports oral tags like (laughs), (sighs), (clears throat) in the script for a bit of life.
Where people get burned: empty text or prompt throws a hard error, a missing reference transcript makes the clone garbled, and the unload_model default makes repeat runs feel glacial. Respect the format, keep unload_model off when you're iterating, and this is one of the few local setups where you can have two cloned voices argue convincingly in a single node.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| prompt | STRING | — | |
| audio_s1 | AUDIO | — | |
| audio_s2 | AUDIO | — | |
| max_new_tokens | INT | 3000860–3072 | — |
| cfg_scale | FLOAT | 3.01–5 | — |
| temperature | FLOAT | 1.301–1.5 | — |
| top_p | FLOAT | 0.950.8–1 | — |
| cfg_filter_top_k | INT | 3015–50 | — |
| unload_model | BOOLEAN | true | — |
| save_speakersopt | BOOLEAN | true | — |
| speakers_idopt | STRING | A_and_B | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |