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.
57 lines
2.4 KiB
YAML
57 lines
2.4 KiB
YAML
# OmniVoice (k2-fsa/OmniVoice) — zero-shot, massively-multilingual (600+
|
|
# language) voice-cloning + voice-design TTS, diffusion-LM, Apache-2.0.
|
|
# Served behind our OWN thin FastAPI wrapper (stacks/omnivoice/app.py) exposing
|
|
# OpenAI-compatible /v1/audio/speech (+ /v1/audio/voices, /healthz) so the
|
|
# asset-engine can consume it. Upstream ships only a Gradio demo; the wrapper
|
|
# replaced it (2026-06-19). Voices are reference WAVs in ${OMNIVOICE_VOICES_DIR}
|
|
# (the reused chatterbox /refs/*.wav); clone prompts are precomputed at startup.
|
|
#
|
|
# Build: local image from the Dockerfile in this dir. Weights download
|
|
# from HF (k2-fsa/OmniVoice) on first boot into ${OMNIVOICE_CACHE_DIR}.
|
|
#
|
|
# Pinned to the 3090 (device 0) on irv-ml1 — the A6000 (device 1) is
|
|
# ComfyUI-exclusive after the 2026-06-18 VRAM consolidation. OmniVoice
|
|
# runs in well under 5 GB; the 3090 had ~18 GB free.
|
|
#
|
|
# All tunables live in .env — edit that, not this file.
|
|
|
|
# Compose project name MUST equal the catalog lifecycle.stack ("omnivoice") or the
|
|
# asset-engine liveness probe (docker ps project-name match) shows it OFFLINE.
|
|
name: omnivoice
|
|
|
|
services:
|
|
omnivoice:
|
|
image: local/omnivoice:${OMNIVOICE_TAG:-latest}
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
args:
|
|
OMNIVOICE_VERSION: ${OMNIVOICE_VERSION:-}
|
|
container_name: omnivoice
|
|
restart: unless-stopped
|
|
runtime: nvidia
|
|
ports:
|
|
- "${OMNIVOICE_BIND:-0.0.0.0}:${OMNIVOICE_PORT}:8001"
|
|
environment:
|
|
- NVIDIA_VISIBLE_DEVICES=${OMNIVOICE_GPU_DEVICES:-0}
|
|
- HF_HOME=/app/hf_cache
|
|
# Streaming /tts scheduler prior — high = pack aggressively (diffusion has a
|
|
# ~fixed per-call overhead; low priors over-chunk and starve). See app.py.
|
|
- OMNIVOICE_STREAM_RTF_PRIOR=${OMNIVOICE_STREAM_RTF_PRIOR:-20}
|
|
volumes:
|
|
- ${OMNIVOICE_CACHE_DIR}:/app/hf_cache
|
|
- ${OMNIVOICE_VOICES_DIR}:/app/voices
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -q -O /dev/null http://localhost:8001/healthz || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
# First boot: OmniVoice + Whisper ASR pre-warm + cloning every staged voice.
|
|
start_period: 1200s
|
|
labels:
|
|
- homepage.group=AI - Dormant
|
|
- homepage.name=OmniVoice
|
|
- homepage.icon=mdi-account-voice
|
|
- homepage.description=Zero-shot multilingual voice-cloning TTS, OpenAI /v1/audio/speech (irv-ml1, 3090)
|
|
- homepage.href=http://irv-ml1.nh3.internal:${OMNIVOICE_PORT}/docs
|