e0d1c44137
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.
69 lines
3.0 KiB
YAML
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}
|