feat(skills): add modular text-to-audio podcast producer skill

This commit is contained in:
Moritz Graf
2026-09-08 17:35:30 +02:00
parent 2a6709d5bc
commit a610ec32d0
3 changed files with 532 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
---
name: text-to-audio
description: Transformiert Quelltexte, Recherchen, Dossiers, Artikel oder Notizen in ein hochwertiges Audio-Dossier / Podcast. Unterstützt flexible Zieldauer (z.B. 2m, 5m, 10m), filtert Inhalte vorab nach Wichtigkeit (Pacing: ~130 Wörter/Minute) und generiert wahlweise Solo-Briefings oder lebendige Zwei-Sprecher-Dialoge (NotebookLM-Style) über OpenRouter TTS.
---
# 🎙️ Text-to-Audio Dossier & Podcast Producer
Dieser Skill fungiert als spezialisierter **Audio-Producer**. Er nimmt beliebige Quelltexte (Rechercheergebnisse, Dossiers, Notizen aus dem Knowledge-Wiki, tägliche Reports oder Artikel) entgegen, komprimiert sie nach Wichtigkeit auf eine gewünschte Hördauer und generiert eine fertige, abspielbare MP3.
---
## 🧭 Kern-Workflow
Wenn der User ein Audio-Dossier oder einen Podcast wünscht (z.B. *"Erstelle ein 3-Minuten Audio-Dossier über X"*, *"Mach einen Podcast zu Thema Y"*, *"Lies mir das als Audio vor"*), gehe strikt in folgenden 4 Schritten vor:
### 1. Zieldauer & Wortbudget ermitteln
Gesprochenes Deutsch / Englisch hat ein natürliches Sprechtempo von ca. **120–140 Wörtern pro Minute**.
Ermittle das Wortbudget:
* **Kurz-Briefing (`2m`):** ca. 250–300 Wörter.
* **Standard-Dossier (`3m`–`4m`, Default):** ca. 400–550 Wörter.
* **Ausführlicher Deep Dive (`5m`–`8m`):** ca. 650–1.000 Wörter.
* *Formel:* `Zielminuten × 130 Wörter`.
### 2. Redaktionelle Wichtigkeits-Filterung (Preprocessing)
Quelltexte sind für das Auge geschrieben, nicht für das Ohr. Bereite den Inhalt vor:
* **Wichtigkeits-Kompression:** Filter die 3 bis 5 wichtigsten Kernaussagen und Aha-Momente heraus. Streiche Nebensächlichkeiten, Tabellen, rohe URLs, Codeblöcke und Fußnoten.
* **Auditiver Schreibstil:** Formuliere in natürlicher, flüssiger gesprochener Sprache mit klaren Übergängen (*"Ein entscheidender Punkt hierbei ist..."*, *"Was viele überrascht: ..."*, *"Kurz gesagt: ..."*).
* **Keine Markdown-Artefakte:** Verwende im Skript keine Sterne (`**`), Listenstriche oder Links. Zahlen und Akronyme ausschreiben, wenn die Aussprache sonst unklar ist (z.B. "Kubernetes ein Punkt zweiunddreißig" statt "K8s 1.32").
### 3. Format-Entscheidung: Solo vs. Dialog (NotebookLM-Style)
#### A. Dialog-Modus (Empfohlen für Themen-Deep-Dives & Podcasts)
Zwei Sprecher spielen sich die Bälle zu:
* **Julius (`aura-2-julius-de`):** Host, moderiert an, stellt neugierige Fragen, zieht Zwischenfazits.
* **Lara (`aura-2-lara-de`):** Expertin / Co-Host, erklärt Zusammenhänge, bringt Hintergründe und Beispiele.
Schreibe das Skript als JSON-Array:
```json
[
{"speaker": "julius", "text": "Willkommen zum heutigen Audio-Dossier. Wir schauen uns heute das Thema X an. Lara, was ist da gerade los?"},
{"speaker": "lara", "text": "Hi Julius! Spannend ist vor allem, dass sich hier fundamental etwas geändert hat..."},
{"speaker": "julius", "text": "Das klingt nach einem großen Schritt. Wie wirkt sich das in der Praxis aus?"},
{"speaker": "lara", "text": "In der Praxis bedeutet das..."}
]
```
#### B. Solo-Modus (Empfohlen für schnelle Briefings & Reports)
Ein einzelner Erzähler führt durch das Dossier:
* Stimme: `aura-2-julius-de` (Deutsch) oder `aura-2-zeus-en` (Englisch).
---
## 🛠️ Ausführung & Synthese
Nutze das Synthese-Skript `scripts/text_to_audio.py`.
### A. Für Dialog-Modus:
1. Speichere das strukturierte Skript temporär:
```bash
cat << 'EOF' > /tmp/podcast_script.json
[
{"speaker": "julius", "text": "..."},
{"speaker": "lara", "text": "..."}
]
EOF
```
2. Generiere das Audio:
```bash
python3 /home/node/mop-skills/mop-skills/skills/text-to-audio/scripts/text_to_audio.py \
--dialog-file /tmp/podcast_script.json \
--title "Titel des Dossiers" \
--output /tmp/audio-dossier.mp3
```
### B. Für Solo-Modus:
```bash
python3 /home/node/mop-skills/mop-skills/skills/text-to-audio/scripts/text_to_audio.py \
--text "Dein aufbereitetes Skript..." \
--voice aura-2-julius-de \
--title "Titel des Dossiers" \
--output /tmp/audio-dossier.mp3
```
*(Hinweis: `scripts/text_to_audio.py` befindet sich relativ im Skill-Ordner, in OpenClaw erreichbar unter `/home/node/mop-skills/mop-skills/skills/text-to-audio/scripts/text_to_audio.py` oder `./skills/text-to-audio/scripts/text_to_audio.py`).*
---
## 📱 Auslieferung an den User
Das Skript gibt am Ende die Zeile `MEDIA:/tmp/...mp3` aus.
Übergib in deiner Antwort an Telegram:
```markdown
Hier ist dein persönliches Audio-Dossier zu **[Thema]** ([Dauer] Min.):
MEDIA:/tmp/audio-dossier.mp3
```
Telegram bindet daraufhin automatisch den integrierten Podcast-Player ein.