Das aktuelle LLM-basierte Modell mit der höchsten Natürlichkeit. Läuft auf der CPU, spielt seine Stärke aber erst mit einer NVIDIA-GPU richtig aus — dort etwa 16-mal schneller als reine CPU-Berechnung. Genau wie bei Kokoro reicht ein einziger docker run-Befehl.
Docker Desktop für Windows/Mac oder Docker Engine für Linux installieren, falls noch nicht vorhanden.
Docker herunterladen ↗Einmaliger docker run-Befehl. Beim allerersten Start lädt der Container die Modelle automatisch herunter (rund 8,5 GB) — das dauert je nach Verbindung 5 bis 15 Minuten. Spätere Starts sind dank Volume in etwa 30 Sekunden erledigt.
docker run -p 8000:8000 \
-v cosyvoice_models:/app/CosyVoice/pretrained_models \
thorstenvoice/cosyvoice-tts:cosyvoice3 Sobald im Log „Uvicorn running on http://0.0.0.0:8000“ erscheint, ist der Server bereit.
Für den Dauerbetrieb eine docker-compose.yml anlegen:
services:
cosyvoice-tts:
image: thorstenvoice/cosyvoice-tts:cosyvoice3
ports:
- "8000:8000"
volumes:
- cosyvoice_models:/app/CosyVoice/pretrained_models
restart: unless-stopped
volumes:
cosyvoice_models: und danach starten mit:
docker compose up Mit einer NVIDIA-Grafikkarte und installiertem NVIDIA Container Toolkit die deploy-Sektion ergänzen:
services:
cosyvoice-tts:
image: thorstenvoice/cosyvoice-tts:cosyvoice3
ports:
- "8000:8000"
volumes:
- cosyvoice_models:/app/CosyVoice/pretrained_models
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
volumes:
cosyvoice_models: Hochdeutsch und Hessisch sind zwei getrennte Docker-Images — für beide gleichzeitig einfach unterschiedliche Volume-Namen und Host-Ports verwenden, dann laufen sie nebeneinander, ohne sich das Modell-Cache-Volume zu teilen.
Sobald der Container läuft, lässt er sich einfach per HTTP ansprechen — kein SDK, keine Installation auf deiner Seite nötig.
Text per HTTP POST schicken (als Formularfeld, nicht JSON), WAV-Datei zurückbekommen.
curl -X POST http://localhost:8000/tts \
-F "text=Hallo, ich bin Thorsten. Schön, dass du da bist." \
--output thorsten.wav Der Wert für speed liegt zwischen 0.5 (langsam) und 2.0 (schnell), Standard ist 1.0.
curl -X POST http://localhost:8000/tts \
-F "text=Das hier wird etwas langsamer gesprochen." \
-F "speed=0.85" \
--output output.wav Über den tts_batch-Endpunkt lassen sich mehrere Sätze (durch Zeilenumbruch getrennt) zu einer einzigen Audiodatei zusammenfassen.
curl -X POST http://localhost:8000/tts_batch \
-F $'texts=Erster Satz.\nZweiter Satz.\nDritter Satz.' \
--output batch.wav Zeigt, ob der Server läuft und welches Modell aktiv ist (der Wert bei model unterscheidet sich je nachdem, welches der beiden Images läuft).
curl http://localhost:8000/health Gemessen mit einem kurzen Testsatz (~8 Wörter) und einem langen Testsatz (~80 Wörter).
GPU-Unterstützung funktioniert nur unter Linux mit einer NVIDIA-Karte und setzt das NVIDIA Container Toolkit voraus (nvidia-container-toolkit). Ohne dieses Toolkit ignoriert Docker die deploy-Sektion in der docker-compose.yml stillschweigend und rechnet auf der CPU weiter.
Beim allerersten Start werden rund 8,5 GB an Modelldaten heruntergeladen — je nach Internetverbindung realistisch 5 bis 15 Minuten. Das Terminal wirkt dabei oft so, als würde nichts passieren. Einfach warten, bis „Uvicorn running on …“ im Log erscheint; danach ist der Cache im Volume gespeichert und der nächste Start dauert nur noch Sekunden.
CosyVoice ist das rechenhungrigste der Thorsten-Voice-Modelle und profitiert extrem von einer NVIDIA-GPU (in etwa 16-mal schneller als reine CPU-Berechnung). Ohne GPU sind mehrere Sekunden bis Minuten pro Satz normal. Auf schwächerer oder GPU-loser Hardware sind Kokoro oder Piper die praktikablere Wahl.
Container-internen und Host-Port zusammen über die Umgebungsvariable PORT ändern, z. B. -p 9000:9000 -e PORT=9000. Nur den Host-Port in -p umzubiegen reicht hier nicht, weil der Server sonst weiterhin intern auf 8000 lauscht.
Meist fehlt die Berechtigung, mit dem Docker-Daemon zu sprechen. Entweder den Befehl mit sudo ausführen, oder den eigenen Benutzer einmalig zur docker-Gruppe hinzufügen (sudo usermod -aG docker $USER, danach neu einloggen).