Add Wyoming voice stack to pyinfra + landscape doc

- Move piper-compose.yaml / whisper-compose.yaml from repo root into
  pyinfra/framework/compose/{piper,whisper}.yml; bind paths shifted to
  /srv/docker/{piper,whisper}/data on the box.
- deploy.py registers both stacks and provisions the data dirs.
- Homepage gets a "Voice" group with informational tiles (Wyoming has
  no web UI, so tiles show container status without click-through).
- New VoiceModels.md captures the May 2026 STT/TTS landscape, why the
  current Wyoming defaults aren't SOTA, and concrete upgrade paths
  (whisper-large-v3-turbo + faster-whisper-server, Kokoro, Sesame CSM,
  F5-TTS for cloning).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-08 13:33:17 -04:00
parent 1816ae2458
commit 36b8cfe835
10 changed files with 292 additions and 32 deletions

View File

@@ -339,6 +339,8 @@ for svc in (
"phoenix",
"openhands",
"homepage",
"whisper",
"piper",
):
files.directory(
name=f"compose/{svc} dir",
@@ -470,6 +472,24 @@ for cfg in (
_sudo=True,
)
# Voice stack — Wyoming-protocol Whisper (STT) and Piper (TTS). Models
# are downloaded on first start; bind-mounting these dirs survives
# container recreation.
files.directory(
name="Whisper data dir",
path=f"{COMPOSE_DIR}/whisper/data",
group="docker",
mode="2775",
_sudo=True,
)
files.directory(
name="Piper data dir",
path=f"{COMPOSE_DIR}/piper/data",
group="docker",
mode="2775",
_sudo=True,
)
# --- Cleanup of artifacts from the prior native-build deploy ----------------
# All idempotent — `present=False` is a no-op when the target is absent.