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.
2.8 KiB
Zonos
Zyphra's expressive multilingual open-weight TTS (Zyphra/Zonos) — 44 kHz output, zero-shot voice cloning, and explicit emotion/conditioning controls — served via the official repo's Gradio interface.
Models (Zonos.from_pretrained()):
| Variant | HF repo | Notes |
|---|---|---|
| transformer | Zyphra/Zonos-v0.1-transformer | ~3.6 GB, no special kernels (default) |
| hybrid | Zyphra/Zonos-v0.1-hybrid | Mamba-SSM; needs Ampere+ GPU + extra build deps |
Server: irv-ml1 (Irvine, WireGuard-only)
Port: 8199 (container Gradio listens on 7860)
GPUs: pins to device 0 (RTX 3090) by default; ~6 GB VRAM
Image: local/zonos:v1 — built locally from a pinned git SHA of the
upstream repo via docker buildx's git URL context
Upstream: Zyphra/Zonos (Apache-2.0),
trained on 200k+ hours; multilingual EN/JA/ZH/FR/DE
Why this stack exists
A different control surface from the rest of the bench: Zonos exposes emotion/conditioning sliders plus pitch/rate conditioning and 44 kHz output, where Chatterbox/Dia use inline tags and Fish uses natural-language paralinguistic tags. Worth A/B-ing by ear against Chatterbox-Turbo (the research that prompted this stack explicitly said "benchmark Zonos against Chatterbox before choosing").
⚠️ Audition surface, not skaldsong-pluggable (yet)
The official repo ships a Gradio WebUI + Python SDK only — there is
no OpenAI-compatible /v1/audio/speech endpoint. So this stack is
for auditioning quality, not for wiring into skaldsong's engine
router as-is. To promote Zonos to a real engine slot we'd need either:
- the community FastAPI fork (Zyphra/Zonos PR #73, adds REST + basic streaming), or
- a thin OpenAI-compat adapter in front of the Python SDK.
Both are a follow-up if Zonos earns a slot in the ear test.
Deploy
# from this workstation (irv-ml1 is WG-only — routes via ana-wg):
scripts/deploy-stack.sh irv-ml1 zonos
# then on irv-ml1, first run builds the image from the pinned SHA:
# docker compose up -d --build
Open http://10.100.79.3:8199/ for the Gradio UI. First boot pulls the
model (~3.6 GB) into ZONOS_CACHE_DIR; the 600 s start_period covers
it.
Notes
- Pin
ZONOS_SHAto a full 40-char commit before relying on this —.env.exampleshipsmain, which is not reproducible. - The upstream image bundles espeak-ng (required for Zonos's phonemization) via its Dockerfile.
GRADIO_SERVER_NAME=0.0.0.0is set so the in-container Gradio binds all interfaces and the host port-map reaches it. If a future upstream hardcodesserver_name, the API fork above is the cleaner path.