Files
BSN-Chatsystem/projektplan-artikel-audio.md
T

127 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
1. Pipeline-Skript bauen (jetzt)
2. API-Endpoint für TTS-Generierung (jetzt)
3. Joomla-Plugin nach Migration (Daniel)
4. Template-Play-Button (Daniel)
5. Batch-Lauf für Archiv (nach Phase 1+2)