# ════════════════════════════════════════════════ # 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 # ─── Lokales LLM (Plan B, B0) — llama.cpp-Server (GPU) ──────── # Serviert Qwen3-8B (GGUF Q4_K_M) OpenAI-kompatibel auf :8081, NUR im # Compose-Netz (kein RVS direkt) — die Bruecke macht der llm-adapter. # Modell-Datei nach ./models/ legen: siehe llm-adapter/README.md. # VRAM auf der RTX 3060 (12 GB): whisper-small (~1-2) + f5tts (~1-2) + # qwen3-8b-q4 (~6) ~= 9-10 GB. Passt, aber knapp — bei OOM: LLM_CTX kleiner # oder Modell auf Q4_K_S/IQ4 wechseln. llama: image: ghcr.io/ggml-org/llama.cpp:server-cuda container_name: aria-llama deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] volumes: - ./models:/models command: > -m /models/${LLM_GGUF:-qwen3-8b-q4_k_m.gguf} --host 0.0.0.0 --port 8081 -ngl 99 -c ${LLM_CTX:-8192} --jinja restart: unless-stopped # ─── Local-LLM-Adapter — RVS <-> llama.cpp (Plan B, B0) ────── # Verbindet sich per Token an den RVS (wie f5tts/whisper), nimmt # llm_request entgegen, ruft llama.cpp lokal, antwortet llm_response. llm-adapter: build: ./llm-adapter container_name: aria-llm-adapter depends_on: - llama 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} - LLAMA_URL=http://llama:8081 - LLM_MODEL=${LLM_MODEL:-qwen3-8b} - LLM_TIMEOUT_SEC=${LLM_TIMEOUT_SEC:-60} restart: unless-stopped