Skip to Content
3. EntwicklungReferenzVorlese-Audios (TTS)

Vorlese-Audios einrichten und betreiben

Diese Anleitung richtet sich an Personen, die den CMS-Audiobetrieb einrichten. Die redaktionelle Nutzung steht unter Vorlese-Audios erzeugen und prüfen.

Anbieter konfigurieren

Wählen Sie mit TTS_PROVIDER genau einen Anbieter. qwen führt die Generierung lokal über Python aus. Dafür müssen Modellgewichte, eine passende Python-Umgebung, je nach Modus Referenzaufnahmen und der Aligner auf dem CMS-Host erreichbar sein. kugelaudio und elevenlabs verwenden externe Dienste mit serverseitigen Zugangsdaten und passenden Stimmen. Modell- und Sprachoptionen sowie alle benötigten Variablen stehen unter Umgebungsvariablen: KI-Queue und Provider.

# Beispiel: externer Anbieter TTS_PROVIDER=elevenlabs ELEVENLABS_API_KEY=<serverseitiges-secret> ELEVENLABS_VOICE_ID=<stimmen-id> ELEVENLABS_FORCE_ALIGNMENT=true

Zugangsdaten gehören ausschließlich in geschützte Laufzeit-Secrets. Für jede verwendete Sprache sollten passende Stimmen oder Referenzen vorhanden sein. Bei einem regionalen Locale-Override wie en-US prüft das CMS zuerst _EN_US, dann _EN und schließlich den Wert ohne Suffix.

Qwen3 lokal einrichten

npm ci installiert weder Python-Pakete noch Modellgewichte. Für den lokalen Qwen-Anbieter benötigen Sie eine Python-Umgebung, das Base-Modell und für Wort-Zeitmarken den Qwen3-ForcedAligner. Eine mögliche isolierte Installation:

conda create -n qwen3-tts python=3.12 -y conda activate qwen3-tts pip install -U qwen-tts qwen-asr "huggingface_hub[cli]" mkdir -p ../Qwen3-TTS huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-Base --local-dir ../Qwen3-TTS/Qwen3-TTS-12Hz-1.7B-Base huggingface-cli download Qwen/Qwen3-ForcedAligner-0.6B --local-dir ../Qwen3-TTS/Qwen3-ForcedAligner-0.6B

Auf unterstützter NVIDIA/CUDA-Hardware kann flash-attn optional mit pip install -U flash-attn --no-build-isolation installiert werden. Falls es nicht verfügbar ist, wählen Sie für QWEN_TTS_ATTN eine von Ihrer lokalen PyTorch-Installation unterstützte Alternative wie sdpa.

Setzen Sie TTS_PROVIDER=qwen, QWEN_TTS_PYTHON_BIN, QWEN_TTS_BASE_MODEL_PATH und QWEN_ALIGNER_CHECKPOINT passend zu den installierten Pfaden. Für Voice Cloning braucht das Base-Modell eine Referenzaufnahme und ein exakt zu dieser Aufnahme passendes Transkript. Hinterlegen Sie nach Möglichkeit je Sprache eine eigene Aufnahme über QWEN_TTS_REFERENCE_AUDIO_PATH_DE beziehungsweise _EN und die passenden QWEN_TTS_REFERENCE_TEXT_*-Werte. Für eine Sprache ohne Referenzaufnahme können Sie stattdessen ein CustomVoice-Modell und eine Preset-Stimme über QWEN_TTS_MODE_<SPRACHE>=custom-voice, QWEN_TTS_CUSTOM_VOICE_MODEL_PATH und QWEN_TTS_SPEAKER_<SPRACHE> konfigurieren. Die genaue Variablenliste steht unter Qwen3-TTS.

Prüfen Sie Python und Modell vor dem CMS-Start mit einem kurzen lokalen Aufruf. Ersetzen Sie dabei Pfade und das Transkript durch Ihre tatsächlichen Werte:

/path/to/python scripts/qwen_tts_generate.py \ --model ../Qwen3-TTS/Qwen3-TTS-12Hz-1.7B-Base \ --text "Dies ist ein Test." --language German \ --ref-audio ./public/tts-reference/reference_de.wav \ --ref-text "<exaktes Transkript der Referenzaufnahme>" \ --output /tmp/digeko-qwen-test.wav \ --device cuda:0 --dtype bfloat16 --attn flash_attention_2

Eine erzeugte WAV-Datei belegt nur, dass der lokale Syntheseaufruf läuft. Hören Sie sie an und prüfen Sie nach dem CMS-Start zusätzlich die Wortmarken in der App. Für kurze Labels begrenzt QWEN_TTS_DYNAMIC_MAX_NEW_TOKENS=true die Generierung abhängig von der Textlänge; optional schneidet QWEN_TTS_TRIM_TO_ALIGNMENT=true das Audio auf das erkannte Sprachfenster zu. Beide Optionen und ihre Grenzwerte sind in der Variablenreferenz beschrieben.

Automatischer Ablauf

Beim Speichern einer Kategorie oder Story legt das CMS für neue oder geänderte vertonten Felder TTS-Aufträge an. Der Worker erzeugt Audio und Wort-Zeitmarken und lädt die Datei in die Media Library. Ein unveränderter Text behält sein passendes Audio. Die Redaktion kann einzelne Jobs bei Bedarf erneut starten; für den normalen Ablauf ist kein manueller Start erforderlich.

Ausstehende oder laufende Audiojobs verhindern die Veröffentlichung der betroffenen Sprachfassung. Das zuletzt veröffentlichte Audio bleibt während der Bearbeitung eines Entwurfs verfügbar. Die Redaktion hört neue Audios vor der Veröffentlichung an und prüft die Wortmarkierung. Wenn das Audio fehlt, nutzt die Webapp gegebenenfalls die Browser-Sprachausgabe.

Die Queue und die TTS-Felder sind systemverwaltet. Die Media Library verwendet den konfigurierten Upload-Speicher; TTS_MEDIA_FOLDER_NAME benennt nur den logischen Ordner. Bereinigung berücksichtigt Draft, Published und noch benötigte Queue-Einträge. Der technische Ablauf steht unter KI-Jobs, TTS, Bild und Text.

Verwaltungsrouten

Für Stories stehen /api/stories/:id/tts/enqueue, status, cancel, recover und restore-published zur Verfügung; für Kategorien entsprechend /api/categories/:id/tts/.... Die zentrale Audioübersicht nutzt zusätzlich GET /api/tts-dashboard/overview und POST /api/tts-dashboard/enqueue-open. Alle Verwaltungsrouten erfordern eine aktive Admin-Session. Lesende Aufrufe benötigen read, Änderungen update für den jeweiligen Content-Type. Öffentliche Aufrufe und Content-API-Tokens werden abgewiesen; verändernde Routen sind zusätzlich rate-limitiert.

Zugriff und Funktionsprüfung

TTS-Routen verlangen eine aktive Admin-Session und das passende Content-Manager-Recht. Prüfen Sie nach der Einrichtung je eine deutsche und englische Kategorie oder Story: Text speichern, Status bis Fertig verfolgen, Audio vollständig anhören, Wortmarkierung prüfen und erst dann veröffentlichen. Prüfen Sie einen Fehlerfall und einen gezielten Neustart des Jobs. Hinweise für die Redaktion stehen unter TTS-Fehler beheben.