feat(text-to-audio): switch to Gemini 3.1 Flash TTS, default to solo monologue, preselect DE/EN voices
This commit is contained in:
@@ -1,99 +1,82 @@
|
||||
---
|
||||
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.
|
||||
description: Transformiert Quelltexte, Recherchen, Dossiers, Artikel oder Notizen in ein hochwertiges Audio-Dossier. Erstellt standardmäßig ein Solo-Briefing mit natürlicher Stimme (Google Gemini 3.1 Flash TTS). Schaltet nur dann auf einen Zwei-Sprecher-Dialog um, wenn der Begriff "Podcast" explizit genannt wird.
|
||||
---
|
||||
|
||||
# 🎙️ 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.
|
||||
Dieser Skill transformiert beliebige Quelltexte (Recherchen, Restaurant-Infos, Artikel, Notizen, Reports) in ein professionelles Audio-Dossier mit **Google Gemini 3.1 Flash TTS**.
|
||||
|
||||
---
|
||||
|
||||
## 🧭 Kern-Workflow
|
||||
## 🧭 Kern-Regeln für das Format
|
||||
|
||||
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. Standard-Modus: Solo-Monolog (DEFAULT)
|
||||
* **Immer Standard für:** Audio-Dossiers, Audio-Briefings, Zusammenfassungen, "Lies mir das vor", "Erstelle ein Audio zu X", tägliche News.
|
||||
* **Ein einzelner, charismatischer Sprecher:** Kein künstlicher Dialog, keine erfundenen Zwischenfragen. Ein flüssiger, strukturierter, gut erzählter Vortrag.
|
||||
* **Vorausgewählte Stimmen:**
|
||||
* **Deutsch:** `Puck` (lebendig, warm, dynamisch) oder `Charon` (tief, ruhig, sachlich).
|
||||
* **Englisch:** `Zephyr` (natürlich, ausgewogen, klar).
|
||||
|
||||
### 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.
|
||||
### 2. Dialog-Modus: Nur bei explizitem "Podcast"-Wunsch
|
||||
* **NUR verwenden, wenn:** Der User explizit das Wort **"Podcast"** (oder "Zwei Moderatoren", "Dialog") verwendet!
|
||||
* **Zwei Sprecher (Host & Co-Host):**
|
||||
* **Host:** `Puck` (moderiert an, leitet durch die Themen).
|
||||
* **Co-Host / Expertin:** `Aoede` (bringt Details, Einschätzungen und Praxisbeispiele).
|
||||
|
||||
---
|
||||
|
||||
## ⏱️ Zieldauer & Pacing (~130 Wörter / Minute)
|
||||
|
||||
Ermittle die gewünschte Dauer oder nutze den Standard:
|
||||
* **Kurz-Dossier (`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).
|
||||
### Redaktionelles Skripting
|
||||
* **Wichtigkeit vor Quantität:** Kernaussagen und Aha-Momente priorisieren, Füllmaterial und Wiederholungen streichen.
|
||||
* **Für das Ohr schreiben:** Keine Markdown-Artefakte (Sterne, Listen, rohe URLs, Tabellen). Klare akustische Übergänge nutzen.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Ausführung & Synthese
|
||||
|
||||
Nutze das Synthese-Skript `scripts/text_to_audio.py`.
|
||||
Nutze das Skript `scripts/text_to_audio.py` (bzw. `/home/node/mop-skills/mop-skills/skills/text-to-audio/scripts/text_to_audio.py` im Cluster).
|
||||
|
||||
### 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:
|
||||
### A. Solo-Modus (Standard)
|
||||
```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 \
|
||||
--voice Puck \
|
||||
--lang 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`).*
|
||||
### B. Dialog-Modus (NUR wenn "Podcast" explizit verlangt)
|
||||
```bash
|
||||
cat << 'JSON_EOF' > /tmp/podcast_dialog.json
|
||||
[
|
||||
{"speaker": "host", "text": "Willkommen zum Podcast. Heute sprechen wir über..."},
|
||||
{"speaker": "cohost", "text": "Hi! Ja, das Thema ist super spannend, weil..."}
|
||||
]
|
||||
JSON_EOF
|
||||
|
||||
python3 /home/node/mop-skills/mop-skills/skills/text-to-audio/scripts/text_to_audio.py \
|
||||
--dialog-file /tmp/podcast_dialog.json \
|
||||
--lang de \
|
||||
--title "Podcast Titel" \
|
||||
--output /tmp/audio-dossier.mp3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📱 Auslieferung an den User
|
||||
|
||||
Das Skript gibt am Ende die Zeile `MEDIA:/tmp/...mp3` aus.
|
||||
Übergib in deiner Antwort an Telegram:
|
||||
Das Skript gibt am Ende `MEDIA:/tmp/...mp3` aus. Antworte in Telegram:
|
||||
|
||||
```markdown
|
||||
Hier ist dein persönliches Audio-Dossier zu **[Thema]** ([Dauer] Min.):
|
||||
Hier ist dein Audio-Dossier zu **[Thema]** ([Dauer] Min.):
|
||||
|
||||
MEDIA:/tmp/audio-dossier.mp3
|
||||
```
|
||||
|
||||
Telegram bindet daraufhin automatisch den integrierten Podcast-Player ein.
|
||||
|
||||
Reference in New Issue
Block a user