Files
esh-pfi-infrastructure/stacks/zonos/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

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_SHA to a full 40-char commit before relying on this — .env.example ships main, which is not reproducible.
  • The upstream image bundles espeak-ng (required for Zonos's phonemization) via its Dockerfile.
  • GRADIO_SERVER_NAME=0.0.0.0 is set so the in-container Gradio binds all interfaces and the host port-map reaches it. If a future upstream hardcodes server_name, the API fork above is the cleaner path.