6e19adab87
Speaker-ID-Modul (Hermes-Style „echtes Gespraech ohne Wake-Word"-Vision, Phase 1 von 5). Erkennt Stefans Stimme via 192-dim Embedding + Cosine- Match gegen einen persistierten Fingerprint. Module: - speaker_id.py: lazy-loaded ECAPA-TDNN (HuggingFace), enroll/verify/ status/delete. Fingerprint = L2-normalisierter Mittelwert aus N Enrollment-Samples in /voice-id/fingerprint.json. Fail-open: kein Fingerprint → verify() returnt (True, 0.0). - bridge.py: 3 Message-Handler — voice_id_status_request, voice_id_enroll_request (samples[]: base64 16kHz int16 PCM), voice_id_delete_request. Enrollment laeuft im Executor (Torch blockt sonst die Event-Loop). - Dockerfile: torch 2.3.1 + torchaudio mit CUDA-12.1-Wheels (sonst zieht speechbrain CPU-only Torch rein). Container ~1 GB groesser. - docker-compose.yml: ./voice-id:/voice-id Bind-Mount fuer Fingerprint- Persistenz (ueberlebt Container-Restart). - rvs/server.js: 6 neue Message-Types in ALLOWED_TYPES. Phase 2 (next): App-Enrollment-Flow + Diagnostic-Voice-ID-Section. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
92 lines
4.2 KiB
YAML
92 lines
4.2 KiB
YAML
# ════════════════════════════════════════════════
|
|
# ARIA Gamebox Stack — GPU F5-TTS + Whisper STT
|
|
# Laeuft auf dem Gaming-PC (RTX 3060)
|
|
# Verbindet sich zum RVS fuer TTS/STT-Requests
|
|
#
|
|
# FLUX-Bildgenerierung liegt im /flux Verzeichnis im Repo-Root —
|
|
# eigener Compose-Stack, kann auch auf einer anderen Maschine laufen.
|
|
# ════════════════════════════════════════════════
|
|
#
|
|
# Voraussetzungen:
|
|
# - Docker Desktop mit WSL2
|
|
# - NVIDIA Container Toolkit
|
|
# - .env mit RVS-Verbindungsdaten
|
|
#
|
|
# Start: docker compose up -d
|
|
# ════════════════════════════════════════════════
|
|
|
|
services:
|
|
|
|
# ─── F5-TTS Bridge (GPU) ──────────────────────
|
|
# Ersetzt den frueheren XTTS-Stack. Empfaengt xtts_request via RVS,
|
|
# rendert via F5-TTS mit Voice-Cloning, streamt PCM an die App.
|
|
# Voice-Upload: speichert WAV und laesst whisper-bridge den Referenz-
|
|
# text transkribieren — der User muss nichts eintippen.
|
|
f5tts-bridge:
|
|
build: ./f5tts
|
|
container_name: aria-f5tts-bridge
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: 1
|
|
capabilities: [gpu]
|
|
volumes:
|
|
- ./voices:/voices # WAV + TXT Referenz
|
|
- ./hf-cache:/root/.cache/huggingface # HF-Cache als Bind-Mount.
|
|
# Direkt sichtbar im xtts/hf-cache/,
|
|
# einfach manuell zu loeschen, kein
|
|
# Docker-Desktop .vhdx Bloat.
|
|
# Wird mit whisper-bridge geteilt.
|
|
environment:
|
|
# Bootstrap-only — alle anderen F5-TTS-Settings (Modell, cfg_strength,
|
|
# nfe_step, Custom-Checkpoint) kommen ueber Diagnostic via RVS-config.
|
|
- RVS_HOST=${RVS_HOST}
|
|
- RVS_PORT=${RVS_PORT:-443}
|
|
- RVS_TLS=${RVS_TLS:-true}
|
|
- RVS_TLS_FALLBACK=${RVS_TLS_FALLBACK:-true}
|
|
- RVS_TOKEN=${RVS_TOKEN}
|
|
- F5TTS_DEVICE=${F5TTS_DEVICE:-cuda}
|
|
- VOICES_DIR=/voices
|
|
restart: unless-stopped
|
|
|
|
# ─── Whisper STT (GPU) ────────────────────────
|
|
# Faster-Whisper auf der Gamebox statt auf der VM (CPU) —
|
|
# deutlich schneller. Verbindet sich selbst per WebSocket an
|
|
# den RVS und nimmt dort stt_request Nachrichten der aria-bridge
|
|
# entgegen, antwortet mit stt_response. Zusaetzlich nutzt die
|
|
# f5tts-bridge Whisper intern fuer die Referenz-Transkription bei
|
|
# Voice-Uploads. Laedt das Modell beim Start vor; auf Config-
|
|
# Broadcasts (Diagnostic → whisperModel) wird zur Laufzeit hot-
|
|
# swapped.
|
|
whisper-bridge:
|
|
build: ./whisper
|
|
container_name: aria-whisper-bridge
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: 1
|
|
capabilities: [gpu]
|
|
environment:
|
|
- RVS_HOST=${RVS_HOST}
|
|
- RVS_PORT=${RVS_PORT:-443}
|
|
- RVS_TLS=${RVS_TLS:-true}
|
|
- RVS_TLS_FALLBACK=${RVS_TLS_FALLBACK:-true}
|
|
- RVS_TOKEN=${RVS_TOKEN}
|
|
- WHISPER_MODEL=${WHISPER_MODEL:-small}
|
|
- WHISPER_DEVICE=${WHISPER_DEVICE:-cuda}
|
|
- WHISPER_COMPUTE_TYPE=${WHISPER_COMPUTE_TYPE:-float16}
|
|
- WHISPER_LANGUAGE=${WHISPER_LANGUAGE:-de}
|
|
volumes:
|
|
- ./hf-cache:/root/.cache/huggingface # gleicher Cache wie f5tts-bridge —
|
|
# ein Modell muss nur einmal pro
|
|
# Maschine geladen werden, kein
|
|
# Re-Download bei Container-Restart.
|
|
- ./voice-id:/voice-id # Speaker-ID-Fingerprint (Stefans
|
|
# Stimm-Embedding) persistent zwischen
|
|
# Container-Restarts.
|
|
restart: unless-stopped
|