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

57 lines
2.4 KiB
YAML

# Zonos-v0.1 (Zyphra's expressive multilingual open-weight TTS) served
# via the OFFICIAL Zyphra/Zonos repo's Gradio interface.
#
# Why this stack exists alongside the other TTS:
# * Apache-2.0, 44 kHz output, zero-shot voice cloning from a
# 10-30 s sample, and explicit emotion/conditioning sliders —
# a different control surface from tag-based engines.
# * Multilingual (EN/JA/ZH/FR/DE), trained on 200k+ hours.
# * Cheap to run (~6 GB VRAM, transformer variant ~3.6 GB weights).
#
# CAVEAT — this is an AUDITION/EVAL surface, not a skaldsong-pluggable
# engine yet: the official repo ships a Gradio WebUI + Python SDK, NOT
# an OpenAI-compatible /v1/audio/speech endpoint. To wire Zonos into
# skaldsong's router we'd need the community FastAPI fork (Zyphra/Zonos
# PR #73) or a thin adapter. Bench it by ear first; promote later if it
# earns a slot.
#
# Image is built locally from the upstream repo's Dockerfile via docker
# buildx git-context. All tunables live in .env — edit that, not this.
services:
zonos:
image: local/zonos:${ZONOS_TAG}
build:
# Single Dockerfile at repo root; bundles espeak-ng (required for
# Zonos's eSpeak phonemization).
context: https://github.com/Zyphra/Zonos.git#${ZONOS_SHA}
dockerfile: Dockerfile
container_name: zonos
restart: unless-stopped
runtime: nvidia
ports:
- "${ZONOS_BIND:-0.0.0.0}:${ZONOS_PORT}:7860"
environment:
- NVIDIA_VISIBLE_DEVICES=${ZONOS_GPU_DEVICES:-0}
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
# Make Gradio bind all interfaces inside the container so the host
# port-map reaches it (Gradio otherwise may bind 127.0.0.1 only).
- GRADIO_SERVER_NAME=0.0.0.0
- HF_HOME=/app/hf_cache
volumes:
- ${ZONOS_CACHE_DIR}:/app/hf_cache
healthcheck:
# No JSON status route on the Gradio app — just probe the root
# page for liveness. start_period covers the first-boot model pull.
test: ["CMD-SHELL", "python3 -c \"import urllib.request,sys; urllib.request.urlopen('http://127.0.0.1:7860/', timeout=5); sys.exit(0)\""]
interval: 30s
timeout: 10s
retries: 3
start_period: 600s
labels:
- homepage.group=AI Systems
- homepage.name=Zonos
- homepage.icon=mdi-waveform
- homepage.description=Expressive multilingual TTS + cloning, 44kHz (Gradio eval, irv-ml1)
- homepage.href=http://10.100.79.3:${ZONOS_PORT}