Add reproducible Piper TTS service

This commit is contained in:
Mikei386
2026-08-21 17:02:32 +02:00
parent 53dfffc289
commit a5cf11582a
19 changed files with 316 additions and 34 deletions
+7 -2
View File
@@ -22,6 +22,7 @@ Heimnetz / VPN-Clients
+-- llama-medium > exakt einer aktiv
+-- llama-long --/
+-- llama-experimental
+-- Piper-TTS (CPU, nur intern)
+-- internes MCP-Netz
+-- Web-MCP + TinySearch + SearXNG
+-- Home-Assistant-MCP-Relay
@@ -37,6 +38,7 @@ Heimnetz / VPN-Clients
| Profile Router | nur WireGuard, Port 8081 | OpenAI-API und Profilwahl |
| Profile Controller | nein | startet ausschließlich vier bekannte Profile |
| llama.cpp Profile | nein | Inferenz, Tool Calling, integrierte Vision |
| Piper | nein | lokale deutsche Text-to-Speech-Ausgabe |
| MCP-Tool-Stack | nein | voneinander getrennte Werkzeugbereiche |
| SearXNG/TinySearch | nein | Suchbackend des Web-MCP |
@@ -80,8 +82,11 @@ nicht automatisch in die Produktionsprofile aufgenommen.
## Optionale Erweiterungen
Bildgenerierung, Whisper und TTS benötigen eigene Modelle und bleiben im
Basissystem deaktiviert. Home Assistant, ARR und Unraid sind vorbereitete
Piper läuft als eigener CPU-Container und wird von Open WebUI über den Router
angesprochen. Sein Port wird nicht veröffentlicht. Das Stimmenmodell liegt im
persistenten Volume `piper-data` und wird beim ersten Start reproduzierbar
nachgeladen. Bildgenerierung und Whisper bleiben im Basissystem deaktiviert.
Home Assistant, ARR und Unraid sind vorbereitete
MCP-Profile: Sie werden erst gestartet, wenn die jeweilige root-only
Secret-Datei vorhanden ist. Multimodale Bildanalyse erfolgt direkt über Qwen
plus Projektor. Nicht installierte Worker-Endpunkte antworten klar mit
+1
View File
@@ -38,6 +38,7 @@ Chats oder privaten Nutzdaten.
| Werkzeug-/Kontextschutz | Große MCP-Antworten und wiederholte identische Aufrufe konnten Kontextfenster sprengen beziehungsweise Tool-Schleifen erzeugen. | Globaler Stability Guard begrenzt Resultate, verdichtet alte Inhalte profilabhängig und stoppt Wiederholungen; JSON-Schemas und Bilder werden nicht beschädigt. |
| Leistungsdaten | Benchmarkdaten sollten sichtbar sein, ohne private Chat-Inhalte zu protokollieren. | Ein globaler Abschlussfilter schreibt ausschließlich technische Zahlen in eine lokal rotierende JSONL-Datei und zeigt eine knappe Statuszeile. |
| Antwortaktionen | Wiederkehrende Nachbearbeitungen sollten bewusst per Klick statt als permanenter Zusatzprompt laufen. | Eine versionierte globale Action bietet lokale Kurzfassung, Checkliste, Diagnose, Unsicherheits-/Quellenprüfung, Thinking-Verbesserung und Markdown-Kopie; keine Schreib- oder Profilwechselaktion. |
| Sprachausgabe | Beim ersten Leerhostaufbau war kein TTS-Dienst Bestandteil des Compose-Stacks. | Piper `piper-tts` 1.6.0 läuft als eigener interner CPU-Container mit persistenter deutscher Stimme; Open WebUI nutzt ihn ausschließlich über den authentifizierten Router. |
## Abnahmezustand am 21. August 2026
+1 -1
View File
@@ -12,7 +12,7 @@
| ARR-MCP | `arr-mcp` 1.0.1 plus dokumentierter Sonarr-Patch | eigener optionaler Container | optional |
| Unraid-MCP | lokales `runraid`-Binary | eigener optionaler Container | optional |
| Whisper | ggml-org/whisper.cpp | Service im Router-Deploy | optional |
| XTTS-v2 | Coqui | Worker, Service und Lockdatei | optional |
| Piper TTS | Open Home Foundation, `piper-tts` 1.6.0 | eigener interner CPU-Container, Stimme `de_DE-thorsten-high` | Kern |
| FLUX.2 klein | Black Forest Labs | Worker und Modellmanifest | optional |
| LLama-GUI | separates Upstream-Projekt | nur Betriebsrolle dokumentiert | optional |
| Glances | Distribution | nur Betriebsrolle dokumentiert | optional |
+4 -1
View File
@@ -76,7 +76,7 @@ Der Router übernimmt:
- direkte integrierte Vision in allen Qwen-Profilen
- FLUX-Hotswap zur Bildgenerierung
- Whisper Speech-to-Text
- XTTS Text-to-Speech
- XTTS Text-to-Speech (historische Referenz; Zielsystem verwendet Piper)
- Zustands- und Modellendpunkte
## Vision
@@ -114,6 +114,9 @@ leitet das Bild dann direkt weiter und führt keinen Modellwechsel mehr aus.
### XTTS
Dieser Abschnitt beschreibt ausschließlich den alten Referenzhost. Im neuen
Docker-Zielsystem ersetzt Piper (`de_DE-thorsten-high`) diesen Dienst.
- Modell: Coqui XTTS-v2
- CPU-only
- Stimme: `claribel`
+2 -1
View File
@@ -69,7 +69,8 @@ laufen, sondern alle fachlichen Funktionen geprüft wurden.
- [ ] FLUX erzeugt Standard- und High-Bild
- [ ] Qwen-Profil wird nach FLUX wiederhergestellt
- [ ] Whisper transkribiert deutsche und englische Testdatei
- [ ] XTTS erzeugt deutsche WAV- und MP3-Ausgabe
- [ ] Piper ist gesund und erzeugt über den Router deutsche WAV- und MP3-Ausgabe
- [ ] Stimme und `piper-tts`-Version entsprechen der Installationskonfiguration
- [ ] STT/TTS blockieren das Textmodell nicht unzulässig
## Phase F – Sicherheitsprüfung
+18 -1
View File
@@ -46,6 +46,9 @@ sudo ./install.sh --config config/install.env
Wenn erstmals ein NVIDIA-Treiber installiert wurde, endet das Skript bewusst
mit Code 20. Dann neu starten und denselben Befehl erneut ausführen. Das Skript
ist auf Wiederholung ausgelegt und löscht keine vorhandenen Modelldateien.
Beim ersten Stackstart lädt der interne Piper-Container die konfigurierte
deutsche Stimme in sein persistentes Volume. Dadurch kann seine erste
Bereitschaft je nach Internetverbindung etwas länger dauern.
Der Installer zeigt nur den öffentlichen WireGuard-Schlüssel. Diesen am
Heim-Peer eintragen:
@@ -72,9 +75,23 @@ sudo docker compose --env-file /etc/mike-ai/stack.env \
curl http://<WIREGUARD-IP>:8081/health
```
Die TTS-Verbindung wird für eine frische Open-WebUI-Datenbank automatisch als
OpenAI-kompatibler Audio-Endpunkt des Routers vorbelegt. Der Router reicht sie
intern an Piper weiter; Port 8085 wird nicht am Host veröffentlicht. Ein
Ende-zu-Ende-Test ohne Ausgabe des API-Schlüssels:
```bash
set -a; source /etc/mike-ai/stack.env; set +a
curl -fsS http://127.0.0.1:8081/v1/audio/speech \
-H "Authorization: Bearer $ROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"piper","voice":"alloy","input":"Hallo von Athena.","response_format":"mp3"}' \
-o /tmp/athena-piper-test.mp3
```
Zusätzlich prüfen: Uni-LAN sieht keine KI-Ports; Heimnetz erreicht beide;
gestopptes WireGuard lässt KI-Container nicht ins Internet; jeder Profilwechsel
startet exakt einen llama-Container; Text, Tool Call und Bild funktionieren.
startet exakt einen llama-Container; Text, Tool Call, Bild und Sprachausgabe funktionieren.
## Werkzeug-Container
+2 -2
View File
@@ -6,7 +6,7 @@
- IQ4_XS Pure für Medium
- BF16-`mmproj` für die integrierte Vision aller Qwen-Profile
- festgeschriebener llama.cpp-Commit
- Router, Whisper, XTTS und Websuche
- Router, Piper-TTS, Whisper und Websuche
- spezialisierte MCPs nach Sicherheitsprofil
- relevante Benchmarkresultate
@@ -33,7 +33,7 @@
8. Medium und Long einzeln testen.
9. Router installieren und Profilwechsel testen.
10. Web, HA, ARR und Unraid nacheinander hinzufügen.
11. STT, TTS und den Projektor für integrierte Vision ergänzen.
11. Piper-TTS prüfen; optional STT ergänzen und den Projektor für integrierte Vision prüfen.
12. Standardbenchmark und Sicherheitsprüfung ausführen.
13. Erst danach Clients umstellen.
+2 -1
View File
@@ -38,7 +38,8 @@
- Terminal ausschließlich als isolierten `sandbox-mcp`, nie als Host-Shell.
- Open WebUI, Hermes und weitere Clients mit denselben zentralen Endpunkten
verbinden und pro Chat nur benötigte Werkzeuggruppen aktivieren.
- Whisper, TTS oder Bildgenerierung jeweils als eigener Container.
- Piper-TTS als eigener interner CPU-Container; Whisper oder Bildgenerierung
bei Bedarf ebenfalls jeweils als eigener Container.
## Phase 5 – Betrieb
+3 -3
View File
@@ -34,7 +34,7 @@ Pflichtrollen:
- BF16 Vision-Projektor
- Whisper large-v3-turbo
- FLUX.2 klein
- XTTS-v2 und verwendete Stimme
- Piper `piper-tts` 1.6.0 und Stimme `de_DE-thorsten-high`
## 2. Externe Komponenten und Commits – teilweise gesichert
@@ -140,7 +140,7 @@ Empfehlung: System unter 85 Prozent, Modelllaufwerk unter 90 Prozent halten.
Bereits gesichert:
- llama.cpp-Commit
- zentrale Python-Versionen für FLUX und XTTS
- zentrale Python-Versionen für FLUX und Piper
- TinySearch-/SearXNG-Image-Digests
Noch offen:
@@ -148,7 +148,7 @@ Noch offen:
- vollständiges `pip freeze` je produktivem Venv
- CUDA-kompatible Wheel-Quelle
- FLUX-Revision
- XTTS-Modellrevision
- Piper-Paketversion und exakter Stimmenname
- Whisper-Commit und Buildoptionen
- Docker-Engine-/Compose-Version