666f7f31e0
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.
69 lines
3.0 KiB
Markdown
69 lines
3.0 KiB
Markdown
# Dia / Dia2
|
|
|
|
Nari Labs' dialogue-focused TTS — generates ultra-realistic
|
|
multi-speaker conversation in a single pass — served via
|
|
[devnen/Dia-TTS-Server](https://github.com/devnen/Dia-TTS-Server), the
|
|
same actively-maintained OpenAI-compat wrapper author as our
|
|
[chatterbox](../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](https://huggingface.co/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](https://github.com/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](https://github.com/devnen/Dia-TTS-Server) (MIT)
|
|
**Upstream model:** [nari-labs/dia](https://github.com/nari-labs/dia) / [nari-labs/dia2](https://github.com/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
|
|
|
|
```bash
|
|
# 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`.
|