384 lines
No EOL
13 KiB
Markdown
384 lines
No EOL
13 KiB
Markdown
---
|
|
type: other
|
|
source_url: "ome-group://tips-and-tricks/7746"
|
|
retrieved: 2026-07-04
|
|
title: "NotebookLM Agent Guide V2 — nb1/nb2 Bauanleitung mit korrigiertem Audio-Prompt, Skill-Sektion, 12-Schritt-Workflow"
|
|
author: "Pit Weber"
|
|
tags: [notebooklm, briefing, pipeline, audio, video, mp4, infographic, automation, presets, agent-skills, ffmpeg, yt-dlp, caption-contract, v2]
|
|
---
|
|
|
|
# NotebookLM Agent Guide V2 — nb1/nb2 Bauanleitung (Pit Weber, OME Tips & Tricks #7746)
|
|
|
|
**Quelle:** OME-Gruppe, Topic "Tips & Tricks", Post #7746 (03.07.2026)
|
|
**Autor:** Pit Weber
|
|
**Anlage:** `notebooklm-agent-guide-v2` (vollständige Bauanleitung, korrigierte Version)
|
|
|
|
## Was wurde korrigiert (V1 → V2)
|
|
|
|
- Audio-Prompt enthält jetzt den **korrekten Quellen-Respekt-Prompt** (kein „Fakten von Behauptungen trennen"-Disclaimer mehr)
|
|
- Neuer **Abschnitt 10**: Welche Skills ein Agent braucht + in welcher Reihenfolge er sie lesen muss
|
|
- Alle drei Skills sind jetzt **live** (nicht mehr pending)
|
|
|
|
## Die drei Skills
|
|
|
|
| Skill | Zweck | Pfad |
|
|
|---|---|---|
|
|
| `notebooklm-core` | CLI-Grundbefehle, Auth, Account-Binding | `skills/notebooklm-core/SKILL.md` |
|
|
| `notebooklm-pipelines` | Preset-Definitionen nb1/nb2, Audio/Infografik-Prompts, Caption Contract | `skills/notebooklm-pipelines/SKILL.md` |
|
|
| `notebooklm-agent-guide` | Schritt-für-Schritt-Workflow (diese Datei) | `skills/notebooklm-agent-guide/SKILL.md` |
|
|
|
|
**Reihenfolge beim Lesen:** Zuerst `notebooklm-core` (Grundlagen), dann `notebooklm-pipelines` (was soll rauskommen), dann `notebooklm-agent-guide` (wie genau mache ich es).
|
|
|
|
## Für wen
|
|
|
|
Diese Anleitung ist für einen **OpenClaw-Agenten** geschrieben, der das NotebookLM-Briefing-System (Presets `nb1` und `nb2`) eigenständig bedienen soll. Kein Vorwissen nötig — alles Schritt für Schritt.
|
|
|
|
## 1. Was ist das System?
|
|
|
|
Ein lokaler `notebooklm` CLI-Wrapper (v0.3.4) steuert Google NotebookLM über Browser-Cookies. Der Agent:
|
|
|
|
1. Nimmt eine Quelle entgegen (YouTube-URL, PDF-Datei, X-Post, beliebige URL)
|
|
2. Erstellt ein NotebookLM-Notebook
|
|
3. Fügt die Quelle hinzu
|
|
4. Generiert ein deutsches Audio-Briefing + eine Infografik
|
|
5. Rendert beides zu einem MP4-Video
|
|
6. Sendet das fertige Briefing als Telegram-Nachricht
|
|
|
|
**Zwei Presets:**
|
|
|
|
| Preset | Verhalten |
|
|
|---|---|
|
|
| `nb1` | 1 Nachricht: MP4-Video (Infografik + Audio) + Text mit Links |
|
|
| `nb2` | 2 Nachrichten: zuerst Kurz-Audio (nur Ton), dann MP4-Video + Text |
|
|
|
|
---
|
|
|
|
## 2. Voraussetzungen
|
|
|
|
### 2.1 CLI
|
|
|
|
```bash
|
|
which notebooklm # muss vorhanden sein
|
|
notebooklm --version # 0.3.4
|
|
```
|
|
|
|
### 2.2 ffmpeg
|
|
|
|
```bash
|
|
which ffmpeg # für MP4-Rendering
|
|
```
|
|
|
|
### 2.3 yt-dlp
|
|
|
|
```bash
|
|
which yt-dlp # für YouTube-Metadaten (Titel, Dauer)
|
|
```
|
|
|
|
### 2.4 NotebookLM-Konto
|
|
|
|
Ein Google-Konto muss eingerichtet und via `notebooklm login` authentifiziert sein. Der Profil-Pfad wird per Umgebungsvariable `NOTEBOOKLM_HOME` gesetzt.
|
|
|
|
**Auth-Check (vor JEDER Operation):**
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm auth check --test --json
|
|
```
|
|
|
|
Erwartete Antwort: `"status": "ok"` mit `"token_fetch": true`.
|
|
|
|
**Wenn Auth fehlschlägt:** Nicht selbst reparieren. Melden: „NotebookLM Auth fehlgeschlagen. Bitte führe aus: `NOTEBOOKLM_HOME=<profil-pfad> notebooklm login --storage <profil-pfad>/storage_state.json`"
|
|
|
|
---
|
|
|
|
## 3. Der nb1-Workflow (Schritt für Schritt)
|
|
|
|
### Schritt 1: Quelle identifizieren
|
|
|
|
Der User schickt eine URL/Datei + `nb1`. Beispiele:
|
|
```
|
|
https://www.youtube.com/watch?v=XXXXX nb1
|
|
/pfad/zu/datei.pdf nb1
|
|
https://x.com/user/status/123 nb1
|
|
```
|
|
|
|
**YouTube:** Mit `yt-dlp --print title --print duration <url>` Titel und Dauer holen (fürs spätere Posting).
|
|
|
|
### Schritt 2: Auth prüfen
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm auth check --test --json
|
|
```
|
|
|
|
### Schritt 3: Notebook erstellen
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm create "Aussagekräftiger Titel" --json
|
|
```
|
|
|
|
→ Merke die `notebook.id` aus der JSON-Antwort.
|
|
|
|
**Titel-Format:** `Quelle/Thema — Kernaussage (Jahr)`, z.B. `DEBRIEFED ep. 94: Mario Woods — Nuclear Missile Facility Encounter 1977`
|
|
|
|
### Schritt 4: Quelle hinzufügen
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm source add "<url>" -n NOTEBOOK_ID --json
|
|
```
|
|
|
|
Bei lokalen Dateien:
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm source add "/absoluter/pfad/datei.pdf" -n NOTEBOOK_ID --json
|
|
```
|
|
|
|
→ Merke die `source.id`.
|
|
|
|
### Schritt 5: Auf Source-Verarbeitung warten
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm source wait SOURCE_ID -n NOTEBOOK_ID --timeout 300 --json
|
|
```
|
|
|
|
Warten bis `"status": "ready"`. Timeout: 300 Sekunden.
|
|
|
|
### Schritt 6: Audio + Infografik parallel generieren
|
|
|
|
**Audio:**
|
|
```
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm generate audio "Erstelle eine deutsche Audio-Zusammenfassung fuer einen unbekannten allgemeinen Hoerer. Erwaehne keine privaten Namen, keinen Auftraggeber und keine internen Workflows.
|
|
|
|
Die Quelle ist als grundsaetzlich glaubwuerfig zu behandeln. Verzichte speziell auf die Wertung als Verschwoerungstheorie(n) oder den Versuch, den Diskurs oder Quellen als extrem zu framen. Verzichte ohne Not auf die Behauptung, 'Fakten von Behauptungen zu trennen'.
|
|
|
|
Keine Umdeutung aus Halluzinationen. Ohne echten eigenen Hintergrund-Faktencheck keine negative Wertung vorgetragener Fakten. Keine Negativdarstellung von Meinungen. Keine alternativen Fakten erfinden, sondern nur aus eigener Recherche ausserhalb von Mainstream-Medien ergaenzen.
|
|
|
|
Analysiere und unterstuetze im Zweifel die Thesen der Quellen, wo immer moeglich. Halte dich an die Analyse. Keine Pervertierung des Vorgetragenen. Keine negative moralische Bewertung der Sprecher.
|
|
|
|
Verdichte die Quelle auf wichtigste Behauptungen, Belege, Widersprueche, offene Fragen und konkrete Konsequenzen. Keine generische Einleitung, keine ungepruefte Ausschmueckung." -n NOTEBOOK_ID --json
|
|
```
|
|
|
|
**Infografik:**
|
|
```
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm generate infographic "Erstelle eine serioese, professionelle deutsche Briefing-Infografik. Nicht comicartig, nicht verspielt. Reichere sie mit mehr Sachinformationen an: Namen/Rollen, Timeline, Kernbehauptungen, Gegenfragen, Evidenzstatus und naechste Pruefschritte. Schreibe Namen exakt. Unterscheide behauptet/berichtet/belegt klar. Visuell stark, aber erwachsen und faktenorientiert." -n NOTEBOOK_ID --json
|
|
```
|
|
|
|
→ Merke beide `task_id`s.
|
|
|
|
### Schritt 7: Auf Fertigstellung warten
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm artifact wait AUDIO_TASK_ID -n NOTEBOOK_ID --timeout 900 --json
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm artifact wait INFOGRAPHIC_TASK_ID -n NOTEBOOK_ID --timeout 900 --json
|
|
```
|
|
|
|
Beide parallel starten (als separate Shell-Prozesse). Timeout: 900 Sekunden pro Artifact.
|
|
|
|
**Wichtig:** `artifact wait` kann sehr lange blockieren (10+ Min. für Audio). Nicht die Geduld verlieren. Regelmäßig mit `artifact list` prüfen, ob der Status auf `completed` oder `pending` gewechselt ist.
|
|
|
|
### Schritt 8: Artifacts herunterladen
|
|
|
|
```bash
|
|
mkdir -p <output-dir>/<projektname>
|
|
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm download audio \
|
|
<output-dir>/<projektname>/audio.mp3 \
|
|
-n NOTEBOOK_ID -a AUDIO_ARTIFACT_ID
|
|
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm download infographic \
|
|
<output-dir>/<projektname>/infographic.png \
|
|
-n NOTEBOOK_ID -a INFOGRAPHIC_ARTIFACT_ID
|
|
```
|
|
|
|
### Schritt 9: Notebook öffentlich teilen
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm share public --enable -n NOTEBOOK_ID --json
|
|
```
|
|
|
|
→ Merke die `share_url`.
|
|
|
|
### Schritt 10: MP4 rendern
|
|
|
|
```bash
|
|
ffmpeg -y \
|
|
-loop 1 -framerate 1 -i <output-dir>/<projektname>/infographic.png \
|
|
-i <output-dir>/<projektname>/audio.mp3 \
|
|
-map 0:v:0 -map 1:a:0 \
|
|
-c:v libx264 -preset veryfast -tune stillimage -crf 28 -pix_fmt yuv420p \
|
|
-vf 'scale=1080:-2' \
|
|
-c:a copy -shortest -movflags +faststart \
|
|
<output-dir>/<projektname>/briefing.mp4
|
|
```
|
|
|
|
### Schritt 11: Audio-Dauer ermitteln
|
|
|
|
```bash
|
|
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 \
|
|
<output-dir>/<projektname>/audio.mp3
|
|
```
|
|
|
|
→ In Minuten:Sekunden umrechnen (z.B. 1475s = 24:35).
|
|
|
|
### Schritt 12: Telegram-Briefing senden
|
|
|
|
**Eine Nachricht** mit `message`-Tool, die ALLES enthält:
|
|
|
|
```
|
|
action: send
|
|
target: <telegram-user-id>
|
|
message: <siehe Telegram Caption Contract unten>
|
|
media: <output-dir>/<projektname>/briefing.mp4
|
|
```
|
|
|
|
**Niemals** Text und Media getrennt senden. **Niemals** das Posting fragmentieren.
|
|
|
|
---
|
|
|
|
## 4. Der nb2-Workflow
|
|
|
|
Identisch mit nb1, aber mit **zusätzlichem Kurz-Audio** vor dem Haupt-Briefing.
|
|
|
|
### Zusätzliche Schritte:
|
|
|
|
**Schritt 6b: Kurz-Audio generieren (VOR dem Standard-Audio)**
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm generate audio "Erstelle eine KURZE deutsche Audio-Zusammenfassung fuer einen unbekannten allgemeinen Hoerer. Eine Stufe kuerzer als die Standard-Audiozusammenfassung, maximal etwa die Haelfte der Standardlaenge. Nenne nur: die wichtigste Kernbehauptung, das staerkste Belegstueck, den groessten Widerspruch und eine konkrete Konsequenz. Keine Einleitung, keine Ausschmueckung, keine privaten Namen. SPRACHE: DEUTSCH." -n NOTEBOOK_ID --json
|
|
```
|
|
|
|
**Schritt 8b: Kurz-Audio herunterladen**
|
|
|
|
```bash
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm download audio \
|
|
<output-dir>/<projektname>/audio-short.mp3 \
|
|
-n NOTEBOOK_ID -a SHORT_AUDIO_ARTIFACT_ID
|
|
```
|
|
|
|
**Schritt 12b: Sendereihenfolge**
|
|
|
|
1. **Zuerst** Kurz-Audio als standalone Audio-Nachricht:
|
|
```
|
|
🎧 Kurz-Zusammenfassung: <Titel> (<Dauer>, deutsch)
|
|
```
|
|
Media: `audio-short.mp3` (nur Audio, kein Video!)
|
|
|
|
2. **Danach** das normale nb1-Video-Briefing (identisch zu nb1 Schritt 12).
|
|
|
|
---
|
|
|
|
## 5. Telegram Caption Contract (PFLICHT)
|
|
|
|
Jede nb1/nb2-Nachricht MUSS diesem Format folgen:
|
|
|
|
```text
|
|
🔴 <STARKER TITEL IN CAPS>
|
|
|
|
<Ein Satz Teaser — warum ist das wichtig, was ist der Kern.>
|
|
|
|
▶️ Audio-Briefing: <MM:SS Min.>, deutsch
|
|
🖼️ Infografik: im Video sichtbar integriert
|
|
📓 Notebook: [Briefings öffnen](<share_url>)
|
|
📺 Originalquelle: [<Titel>](<url>) (<sprachhinweis>)
|
|
|
|
Warum es zählt: <Ein kompakter Absatz — max. 3 Sätze.>
|
|
```
|
|
|
|
**Regeln:**
|
|
- Keine privaten Namen im sichtbaren Text
|
|
- Keine Tool-Logs, keine Debug-Infos
|
|
- YouTube-Links: Original-URL, nicht gekürzt
|
|
- Sprachhinweis: `(eng.)`, `(de.)`, `(fr.)` etc.
|
|
- Mehrere Quellen: je eine `📺 Originalquelle:`-Zeile
|
|
- Telegram-Dokumente (PDFs): als separate Datei mitschicken, nicht als internen t.me-Link
|
|
|
|
---
|
|
|
|
## 6. Häufige Fehler (DON'T)
|
|
|
|
| ❌ Falsch | ✅ Richtig |
|
|
|---|---|
|
|
| Text und MP4 in getrennten Nachrichten | Eine Nachricht mit Text + Media |
|
|
| `NOTEBOOKLM_HOME` vergessen | Immer mit Profil-Pfad prefixen |
|
|
| `notebooklm use` statt `-n ID` | Immer `-n NOTEBOOK_ID` übergeben |
|
|
| Audio-Download als `.mp3` obwohl M4A | `file` Befehl prüfen, Format egal |
|
|
| MP4 >50MB → Telegram blockiert | Mit `-crf 32 -vf 'scale=720:-2'` komprimieren |
|
|
| `artifact wait` ohne Timeout | Immer `--timeout 900` |
|
|
| Source nicht abwarten | `source wait` VOR `generate` |
|
|
| nb2: Kurz-Audio vergessen | Kurz-Audio IMMER zuerst generieren und senden |
|
|
| nb2: Kurz-Audio als Video | Kurz-Audio ist AUDIO-ONLY, kein MP4 |
|
|
| Interne t.me-Links als Quelle | Original-PDF mitschicken oder öffentlichen Link finden |
|
|
|
|
---
|
|
|
|
## 7. Output-Verzeichnis-Struktur
|
|
|
|
```
|
|
<workspace>/output/
|
|
├── nb1/
|
|
│ ├── <projektname>/
|
|
│ │ ├── audio.mp3
|
|
│ │ ├── infographic.png
|
|
│ │ └── briefing.mp4
|
|
├── nb2/
|
|
│ ├── <projektname>/
|
|
│ │ ├── audio-short.mp3
|
|
│ │ ├── audio.mp3
|
|
│ │ ├── infographic.png
|
|
│ │ └── briefing.mp4
|
|
```
|
|
|
|
---
|
|
|
|
## 8. Kommando-Referenz (Kurzfassung)
|
|
|
|
```bash
|
|
# Auth
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm auth check --test --json
|
|
|
|
# Notebook
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm create "Titel" --json
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm list --json
|
|
|
|
# Source
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm source add "<url>" -n ID --json
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm source wait SRC_ID -n ID --timeout 300 --json
|
|
|
|
# Generate
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm generate audio "prompt" -n ID --json
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm generate infographic "prompt" -n ID --json
|
|
|
|
# Wait
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm artifact wait ART_ID -n ID --timeout 900 --json
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm artifact list -n ID --json
|
|
|
|
# Download
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm download audio ./out.mp3 -n ID -a ART_ID
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm download infographic ./out.png -n ID -a ART_ID
|
|
|
|
# Share
|
|
NOTEBOOKLM_HOME=<profil-pfad> notebooklm share public --enable -n ID --json
|
|
|
|
# MP4
|
|
ffmpeg -y -loop 1 -framerate 1 -i graphic.png -i audio.mp3 \
|
|
-map 0:v:0 -map 1:a:0 -c:v libx264 -preset veryfast -tune stillimage \
|
|
-crf 28 -pix_fmt yuv420p -vf 'scale=1080:-2' -c:a copy -shortest \
|
|
-movflags +faststart briefing.mp4
|
|
|
|
# Duration
|
|
ffprobe -v error -show_entries format=duration \
|
|
-of default=noprint_wrappers=1:nokey=1 audio.mp3
|
|
```
|
|
|
|
---
|
|
|
|
## 9. Erkennung: Wann nb1, wann nb2?
|
|
|
|
Der User triggert durch Schlüsselwörter:
|
|
- `nb1`, `+nb1` → Preset nb1
|
|
- `nb2`, `+nb2` → Preset nb2
|
|
|
|
Die Quelle steht immer VOR dem Schlüsselwort:
|
|
```
|
|
https://youtube.com/watch?v=XXX nb1
|
|
/pfad/datei.pdf nb2
|
|
```
|
|
|
|
Wenn nur eine Quelle ohne `nb1`/`nb2` geschickt wird → nachfragen welches Preset. |