ComfyUI Node

Dia TTS

The node that makes AI voices sound like actual people

By Yuan-ManX·Created about a year ago·Updated about a year ago· 6
Dia TTS
  • model
  • audio_prompt
  • audio
text_input
max_new_tokens3072
cfg_scale3.0
temperature1.30
top_p0.95
cfg_filter_top_k30
speed_factor0.94

Dia TTS is the whole reason to install ComfyUI-Dia. Everything else in the pack - the loader, the audio nodes, the text box - exists to feed this one node. It takes a line of dialogue and a short reference voice clip, and produces realistic English speech in a single pass. Not the flat assistant voice you're used to from older TTS: actual dialogue. Laughing, coughing, clearing your throat, shifting emotional tone mid-line. That's the pitch, and for a 1.6B model that runs entirely on your machine, it's genuinely impressive.

The pack is a wrapper around Nari Labs' Dia, a dialogue model rather than a generic text-to-speech bot. Community takes on it are consistent: it's built for podcast-style multi-speaker reads, and it wants an audio reference to lock in a voice and mood - one reference clip gives you voices of the same gender. Nobody's describing it as a replacement for your ElevenLabs subscription. They're describing it as the thing that finally makes local dialogue sound human.

How it works

Under the hood, Dia doesn't synthesize a waveform the way you might expect. It encodes text as UTF-8 bytes, treats audio as discrete tokens from a DAC (Descript Audio Codec), and generates those audio tokens autoregressively - one at a time, using the transcript and your reference clip as conditioning. The codec then decodes the tokens into a 44.1 kHz waveform. That's why max_new_tokens matters: it's the budget for how much audio gets generated, roughly 35 seconds of speech at the default 3072.

The rest of the sampling knobs are standard transformer fare - CFG-style guidance (cfg_scale, plus a cfg_filter_top_k that narrows the candidate set before top-p sampling), temperature, and top_p. The defaults (cfg_scale 3, temperature 1.3, top_p 0.95) are sane; don't go cranking temperature up expecting more emotion, because the range caps at 1.5 and past the midpoint you mostly get mush.

Inputs that actually matter

You'll set four things, and mostly leave the rest alone:

  • model - the output of Load Dia Model. One gotcha: this input is typed MODEL while the loader's model output is typed NARIMODEL. If the UI refuses to let you draw the wire, that mismatch is why (more in the troubleshooting below).
  • text_input - your transcript. Single-line in the UI, which is why most people wire it from Input Dia Text, a multiline box.
  • audio_prompt - the reference clip that sets voice, tone, and emotion, wired from Load Dia Audio. It's a required input, though the node tolerates silence or an empty clip by just ignoring it and generating with no voice reference.
  • speed_factor - a cheap linear resample of the output. Default 0.94 makes speech a touch slower, and be aware it shifts pitch along with speed, since it's resampling, not proper time-stretching.

The single output is audio (ComfyUI's AUDIO type). Feed it into Save Dia Audio to write a WAV, or into any audio playback/preview node you have installed.

Installing

Install the pack once - ComfyUI Manager (search "ComfyUI-Dia") or clone it manually:

cd ComfyUI/custom_nodes
git clone https://github.com/Yuan-ManX/ComfyUI-Dia.git
cd ComfyUI-Dia
pip install -r requirements.txt

Then restart ComfyUI. The heavy lift is the model, not the install: Load Dia Model downloads a multi-gigabyte checkpoint from Hugging Face on first run. Plan for that wait.

Common issues

  • The wire from Load Dia Model won't connect. The loader emits a custom NARIMODEL type but this node declares its input as MODEL, and ComfyUI won't join mismatched sockets. It's a rough edge of this early pack. Some ComfyUI versions route around it; if yours doesn't, a generic type-conversion node (or matching the loader's socket) is the workaround.
  • Generation "succeeds" but returns silence. When inference throws, the node catches it, prints to the terminal, and returns a silent clip instead of failing loudly. If you get quiet output, check the console - the error is there.
  • Slow on CPU. A 1.6B model on CPU will test your patience. This wants a GPU.
  • English only. Dia only generates English; feed it other languages and you'll get gibberish or silence.
CategoryDia-TTS

Inputs (9)

NameTypeDefaultDescription
modelMODEL
text_inputSTRING
audio_promptAUDIO
max_new_tokensINT3072860–3072
cfg_scaleFLOAT3.01–5
temperatureFLOAT1.301–1.5
top_pFLOAT0.950.8–1
cfg_filter_top_kINT3015–50
speed_factorFLOAT0.940.1–5

Outputs (1)

NameTypeDescription
audioAUDIO