Skip to Content

TTS-Pipeline

Das CMS erzeugt Vorlese-Audios für Kategoriebezeichnungen, Storytitel sowie Text- und Linkinhalte von Stories. Audio und Wort-Zeitmarken sind Bestandteil des veröffentlichten Inhalts; die Joblogik bleibt unabhängig vom gewählten Audioanbieter.

Inhalt speichern vertontes Feld + Text-Hash TTS-Job: pending → running → done / failed ├── Qwen3-TTS (lokales Python-Skript) ├── KugelAudio └── ElevenLabs Audio + Wort-Zeitmarken → Media Library → ttsJobs am Inhalt

Jobmodell

Ein Job enthält unter anderem Feldpfad, Locale, Text-Hash, Status, Anzahl der Versuche, Fehler, Audio und Zeitmarken. Der Text-Hash erkennt, ob ein gespeichertes Audio noch zum aktuellen Text passt.

Automatische Auslöser

  • Beim Anlegen einer Kategorie oder Story werden alle benötigten Jobs eingereiht.
  • Beim Ändern einer Kategoriebezeichnung werden deren Jobs synchronisiert.
  • Beim Ändern von Storytitel oder Slides werden die Storyjobs synchronisiert.
  • Unveränderte Text-Hashes behalten ihr fertiges Audio; veränderte Felder werden wieder auf pending gesetzt.
  • Veröffentlichen und Zurückziehen lösen keine neue Generierung aus.
  • Eine Veröffentlichung wird abgewiesen, solange für die Locale Jobs den Status pending oder running haben.

Das CMS entfernt nicht mehr referenzierte, von der Pipeline erzeugte Audiodateien kontrolliert. Die TTS-Metadaten werden vom System verwaltet und sind nicht als redaktionelle Freitextfelder gedacht.

Worker

Der Worker läuft im Strapi-Prozess, beansprucht offene Aufträge und ruft den konfigurierten Adapter auf. Abgebrochene, fehlgeschlagene und nach Neustarts liegengebliebene Aufträge können kontrolliert erneut verarbeitet werden.

Locale-Konfiguration

Provideroptionen können pro vollständiger Locale, Sprache oder global gesetzt werden. Für en-US gilt beispielsweise:

..._EN_US → ..._EN → globaler Wert

Qwen3-TTS

Qwen wird über ein separates Python-Skript aufgerufen. Modellgewichte, Python-Umgebung, Referenzaufnahmen und optionaler Forced Aligner werden nicht mit npm install installiert. Für Voice Cloning muss das Transkript exakt zur Referenzaufnahme passen. Der Forced Aligner liefert Wort-Zeitmarken; ohne lokale GPU ist die Generierung je nach Modell deutlich langsamer.

KugelAudio

KugelAudio wird als Cloud-Dienst über API-Key, Modell und Voice-ID angebunden. Die WebSocket-Übertragung ist der Standard, weil die Wort-Zeitmarken darüber mitgeliefert werden. Mit KUGELAUDIO_REQUIRE_TIMESTAMPS=true gilt ein Audio ohne Zeitmarken als fehlgeschlagen. Sample-Rate, Normalisierung, Sprache und Stimme können global oder je Locale konfiguriert werden.

ElevenLabs

ElevenLabs erzeugt über die API PCM-Audio, das der Adapter als WAV speichert. Für die in der App verwendete wortweise Hervorhebung ruft der Adapter bei ELEVENLABS_FORCE_ALIGNMENT=true zusätzlich Forced Alignment auf. API-Key, Voice-ID, Modell, Ausgabeformat und Sprachcode können global oder je Locale gesetzt werden.

Änderungen an Worker, Lifecycle-Hooks, Wiederherstellung oder automatischem Löschen von Medien sind datenrelevant und benötigen gezielte Tests.