3.6 KiB
3.6 KiB
Projektplan: Artikel-Vorlese-Funktion (Pre-Generation)
Stand: 11. Juni 2026
Prinzip: Audio wird EINMAL bei Artikel-Erstellung generiert, nicht bei jeder Anfrage.
Übersicht
Jeder Artikel auf brettspiel-news.de bekommt automatisch:
- Deutsche Audioversion (Thorsten-Stimme, Piper TTS)
- Englische Audioversion (Joe-Stimme, Piper TTS, optional)
- Play-Button unter dem Artikel
- Download-Link für Offline-Hören
Der Chatbot nutzt dieselben Dateien — null Zusatzaufwand.
Phase 1: TTS-Pipeline (Hermes-Seite)
1.1 Pipeline-Skript
- Input: Artikel-URL oder Artikel-ID
- Fetch: Artikeltext via Content-API
- Clean: HTML → Fließtext (parsbar für TTS)
- Generate DE: Piper Thorsten (de_DE-thorsten-medium)
- Generate EN: Piper Joe (en_US-joe-medium) — optional
- Output: MP3-Datei → Media-Ordner
1.2 Performance
- 2.000 Zeichen → ~3 min Audio → ~30s Generierung (0,15x Echtzeit)
- 5.000 Zeichen → ~8 min Audio → ~75s Generierung
- 10.000 Zeichen → ~15 min Audio → ~150s Generierung
1.3 API-Endpoint
POST /tts/generate— nimmt Artikel-ID/URL, gibt Audio-Pfad zurück- Status-Endpoint für Fortschritt (bei langen Artikeln)
Phase 2: Joomla-Integration
2.1 Trigger
- Joomla-Plugin:
onContentAfterSave→ Webhook an Hermes - Alternativ: Cron-Job, der alle X Minuten auf neue Artikel prüft
- Priorität: Webhook (sofort), Cron (Fallback)
2.2 Audio-Speicherung
- MP3-Dateien auf brettspiel-news.de Server
- Pfad-Schema:
/media/audio/articles/{article-id}-de.mp3 - Auch als Download in Artikel-Metadaten hinterlegt
2.3 Artikel-Template
- Play-Button:
<audio>-Element oder JavaScript-Player - Text: "🔊 Artikel anhören (DE) | (EN)"
- Barrierefrei: ARIA-Labels, Keyboard-Navigation
Phase 3: Chatbot-Integration
3.1 Vorlese-Befehl
- User: „Lies Artikel X vor"
- Chatbot: Holt
article_id→ sucht Audio-Datei → gibt Player zurück - Keine Generation — Datei existiert bereits
3.2 Knowledge-Datenbank
- Tabelle
article_audio: article_id, title, de_audio_path, en_audio_path, generated_at - Schneller Lookup für Chatbot
Phase 4: Batch-Verarbeitung (bestehende Artikel)
4.1 Bestandsaufnahme
- Alle Artikel-IDs via Content-API abrufen
- Prüfen, welche schon Audio haben
4.2 Batch-Lauf
- Parallele Verarbeitung (4 Worker = 4 parallele TTS-Generierungen)
- ~1.200 Artikel × 30s = ~10 Stunden Gesamtlaufzeit
- Priorisierung: Neueste zuerst, dann älteste
4.3 Fehlerbehandlung
- Retry bei Timeout
- Skip bei leeren Artikeln
- Logging pro Artikel
Phase 5: Weitere Sprachen (Zukunft)
| Sprache | Piper-Stimme | Verfügbar |
|---|---|---|
| Deutsch | Thorsten (medium) | ✅ |
| Englisch | Joe (medium) | ✅ |
| Französisch | fr_FR (medium) | ✅ Piper |
| Spanisch | es_ES (medium) | ✅ Piper |
| Niederländisch | nl (medium) | ✅ Piper |
- Pro Sprache: ~30s Generierung extra
- Speicher: ~1 MB MP3 pro Artikel pro Sprache
- 1.200 Artikel × 5 Sprachen × 1 MB = ~6 GB (vernachlässigbar)
Infrastruktur (gemeinsam mit Chatbot)
| Komponente | Status |
|---|---|
| Piper TTS (Thorsten DE) | ✅ Läuft |
| Piper TTS (Joe EN) | ✅ Läuft |
| Content-API (Joomla) | ⏳ Nach Migration |
| Joomla-Plugin (Trigger) | 🔜 Phase 2 |
| Artikel-Template | ⏳ Daniel |
| Speicherplatz | ✅ Ausreichend (50+ GB frei) |
Nächste Schritte
- Pipeline-Skript bauen (jetzt)
- API-Endpoint für TTS-Generierung (jetzt)
- Joomla-Plugin nach Migration (Daniel)
- Template-Play-Button (Daniel)
- Batch-Lauf für Archiv (nach Phase 1+2)