Files
esh-pfi-infrastructure/stacks/vibevoice/compose.yaml
T
vh e0d1c44137 chore(fleet): repoint stale irv-ml1 refs (10.100.79.3 -> irv-ml1.nh3.internal)
The 2026-09-06 headscale cutover retired irv-ml1's wg0 tunnel IP 10.100.79.3
(now 10.6.110.50). Repointed all LIVE canonical refs to the DNS NAME so the next
move can't re-break them: homepage.href/siteMonitor labels across 25 stack
composes, load-bearing env defaults (asset-engine INFERENCE_HOST, open-webui
AUDIO_TTS_OPENAI_API_BASE_URL, skaldsong SKALDSONG_TTS_BASE_URL, zonos-gateway
ZONOS_URL, dia), homepage services.yaml manual cards (Voice Design Studio,
IRV-ML1), and servers/irv-ml1/ssh-target. Updated the stale 'WG tunnel' comment
to the mesh reality.

Left as-is: README curl-examples and .env.example comments (docs), and historical
mentions in CLAUDE.md/persistent-memory. NOTE: applying the label repoints to the
RUNNING irv-ml1 containers needs a recreate per service (labels read at creation);
deployed .env values are separate from these canonical defaults.
2026-09-07 15:08:56 -07:00

69 lines
3.0 KiB
YAML

# VibeVoice 1.5B long-form TTS via groxaxo/VibeVoice-FastAPI1
# (fork of ncoder-ai/VibeVoice-FastAPI). Multi-speaker dialogue support
# via the extended /v1/vibevoice/generate endpoint with a Speaker N:
# script format. OpenAI-compat /v1/audio/speech also exposed.
#
# Why this stack exists alongside the other TTS:
# * Long-form / podcast-quality slot — VibeVoice is Microsoft's
# diffusion-based long-form TTS designed for multi-speaker output.
# * Dialogue mode: feed `Speaker 0: ... \n Speaker 1: ...` and the
# model handles voice switching natively.
# * Trade-off: NOT streaming-friendly — generation is single-shot
# latent denoising over the whole sequence, then vocode. For
# low-latency English, use Kokoro or Chatterbox Turbo instead.
#
# Image is built locally from the upstream Dockerfile via docker
# buildx git-context (no source vendored on the host). Pinned to a
# SHA in .env so rebuilds are reproducible.
#
# Default model is VibeVoice-1.5B (~7 GB bf16 VRAM). Switch to
# rsxdalv/VibeVoice-Large for the 7B variant (~18 GB) — pin to A6000
# in that case.
#
# All tunables live in .env — edit that, not this file.
services:
vibevoice:
image: local/vibevoice:${VIBEVOICE_TAG}
build:
context: https://github.com/groxaxo/VibeVoice-FastAPI1.git#${VIBEVOICE_SHA}
dockerfile: Dockerfile
container_name: vibevoice
restart: unless-stopped
runtime: nvidia
ports:
- "${VIBEVOICE_BIND:-0.0.0.0}:${VIBEVOICE_PORT}:8001"
environment:
- NVIDIA_VISIBLE_DEVICES=${VIBEVOICE_GPU_DEVICES:-1}
- VIBEVOICE_MODEL_PATH=${VIBEVOICE_MODEL:-microsoft/VibeVoice-1.5B}
- VIBEVOICE_DEVICE=cuda
- VIBEVOICE_INFERENCE_STEPS=${VIBEVOICE_INFERENCE_STEPS:-10}
- VIBEVOICE_DTYPE=${VIBEVOICE_DTYPE:-bfloat16}
- VIBEVOICE_ATTN_IMPLEMENTATION=${VIBEVOICE_ATTN:-flash_attention_2}
- VIBEVOICE_QUANTIZATION=${VIBEVOICE_QUANT:-}
- TORCH_COMPILE=${VIBEVOICE_TORCH_COMPILE:-false}
- TORCH_COMPILE_MODE=${VIBEVOICE_TORCH_COMPILE_MODE:-default}
- VOICES_DIR=/app/voices
- DEFAULT_CFG_SCALE=${VIBEVOICE_CFG_SCALE:-1.8}
- MAX_GENERATION_LENGTH=${VIBEVOICE_MAX_GEN_LEN:-5400}
- HF_HOME=/root/.cache/huggingface
volumes:
- ${VIBEVOICE_VOICES_DIR}:/app/voices:ro
- ${VIBEVOICE_CACHE_DIR}:/root/.cache/huggingface
healthcheck:
# Upstream Dockerfile exposes /health.
test: ["CMD-SHELL", "curl -fsS -o /dev/null http://localhost:8001/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
# First boot pulls VibeVoice-1.5B (~7 GB) on a cold cache and
# may also build flash-attn / torch.compile JIT cache on the
# first inference. Generous deadline.
start_period: 900s
labels:
- homepage.group=AI Systems
- homepage.name=VibeVoice
- homepage.icon=mdi-podcast
- homepage.description=Long-form / multi-speaker dialogue TTS (irv-ml1)
- homepage.href=http://irv-ml1.nh3.internal:${VIBEVOICE_PORT}