Files
esh-pfi-infrastructure/stacks/dia/README.md
T
vh 666f7f31e0 stacks: add dia + zonos to the TTS bench
dia: Nari Labs dialogue TTS (Dia 1.6B / Dia2-1B / Dia2-2B) via
devnen/Dia-TTS-Server — OpenAI-compat, fills the multi-speaker
dialogue-scene slot for skaldsong. Port 8200 on irv-ml1.

zonos: Zyphra Zonos-v0.1 (Apache-2.0, 44kHz, emotion sliders) via the
official Gradio interface. Audition surface only — no OpenAI-compat
endpoint yet (needs the FastAPI fork to become skaldsong-pluggable).
Port 8199 on irv-ml1.

Both follow the chatterbox/fish-s2 convention: local image built from a
pinned wrapper SHA via buildx git-context, .env-driven port/GPU, python
healthcheck, homepage labels.
2026-05-31 10:53:27 -07:00

3.0 KiB

Dia / Dia2

Nari Labs' dialogue-focused TTS — generates ultra-realistic multi-speaker conversation in a single pass — served via devnen/Dia-TTS-Server, the same actively-maintained OpenAI-compat wrapper author as our chatterbox stack. The wrapper carries multi-model support for the whole Dia family:

Model HF repo Notes
Dia 1.6B nari-labs/Dia-1.6B original, dialogue in one pass (in-image default)
Dia2-1B Nari Labs Dia2 family streaming, lower latency
Dia2-2B Nari Labs Dia2 family highest quality

Dia2 was released 2025-11-19 (nari-labs/dia2).

Server: irv-ml1 (Irvine, WireGuard-only) Port: 8200 (container listens on 8003) GPUs: pins to device 0 (RTX 3090) by default; ~7 GB VRAM at BF16 Image: local/dia:v1 — built locally from a pinned git SHA of the wrapper repo via docker buildx's git URL context Upstream wrapper: devnen/Dia-TTS-Server (MIT) Upstream model: nari-labs/dia / nari-labs/dia2 (Apache-2.0 weights)

Why this stack exists

Fills the dialogue-scene slot none of the other TTS own cleanly. Dia generates multi-speaker turn-taking in one pass with inline [S1]/ [S2] speaker tags and nonverbal cues — (laughs), (coughs), (sighs), (clears throat) — directly in the prompt. That's a different shape from the single-speaker engines:

  • Fish S2-Pro / IndexTTS-2 / Chatterbox are excellent single-voice readers (rich emotion, cloning) but you'd have to stitch turns yourself.
  • VibeVoice does long-form multi-speaker but is podcast/narration shaped, not fast turn-taking with nonverbals.
  • Dia is the one built for scene dialogue — the multi-character-storytelling case skaldsong is aimed at.

OpenAI-compatible (POST /v1/audio/speech), so skaldsong can target it by base-URL once we add a dia engine option to its router.

Deploy

# from this workstation (irv-ml1 is WG-only — routes via ana-wg):
scripts/deploy-stack.sh irv-ml1 dia
# then on irv-ml1, first run builds the image from the pinned SHA:
#   docker compose up -d --build

First boot pulls the checkpoint (~6-10 GB) into DIA_CACHE_DIR and can take several minutes; the healthcheck's 600 s start_period covers it.

Notes

  • Pin DIA_SHA to a full 40-char commit before relying on this — .env.example ships main for convenience, but main is not reproducible (chatterbox learned this when an upstream restructure broke its main build).
  • Model switching is config.yaml-driven in the wrapper, or live from the Web UI at http://10.100.79.3:8200/. To pin a non-default model declaratively, mount a host config.yaml (see the commented volume in compose.yaml).
  • Endpoints: /v1/audio/speech (OpenAI-compat), /health (liveness), /api/model-status (download/load progress), /api/model-info.