NotebookLM Distiller: Batch knowledge extraction from Google NotebookLM into Obsidian. Supports Q&A generation (15-20 deep questions), structured summaries, glossary extraction, web research sessions, and direct markdown persistence.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add dvcrn/openclaw-skills-marketplace --skill notebooklm-distiller --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Notebooklm Distiller?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/dvcrn-notebooklm-distiller)More formats (shields.io, HTML) on the badges page.
---
name: notebooklm-distiller
description: "NotebookLM Distiller: Batch knowledge extraction from Google NotebookLM into Obsidian. Supports Q&A generation (15-20 deep questions), structured summaries, glossary extraction, web research sessions, and direct markdown persistence."
---
# NotebookLM Distiller
Automated knowledge extraction pipeline: search NotebookLM notebooks by keyword → generate deep questions or structured summaries → write linked Obsidian markdown notes.
**Five subcommands:**
- `distill` — extract knowledge from existing notebooks (qa / summary / glossary)
- `quiz` — generate quiz questions as JSON for Discord-based interactive sessions
- `evaluate` — evaluate a user's answer against notebook sources (JSON output)
- `research` — start a web research session inside NotebookLM on any topic
- `persist` — write any markdown content directly into the Obsidian vault
## When to use (trigger phrases)
Trigger `distill` subcommand when:
- User types `/notebooklm-distill` or `/notebooklm-distill-summary`
- User says "蒸馏", "提取知识", "distill notebooks", "extract from notebook"
- User wants NotebookLM content structured into Obsidian notes
Trigger `research` subcommand when:
- User says "研究一下 <topic>", "做网络调研", "research this topic in NotebookLM"
- User wants NotebookLM to gather web sources on a topic without providing URLs
Trigger `quiz` + `evaluate` subcommands when:
- User says "quiz me on X", "考考我", "出题测试我", "测验"
- User wants an interactive Q&A session in Discord on a NotebookLM topic
- **Orchestration flow (Discord)**:
1. Call `quiz --keywords X` → get JSON with `notebook_id` + `notebook_name` + `questions[]`
2. **MUST** announce source before Q1: `来,N 道题(来源:{notebook_name} · ID: {notebook_id[:8]})`
3. Send Q1 to Discord, wait for user reply
4. Call `evaluate --notebook-id X --question Q1 --answer <reply>` → get JSON feedback
5. Post feedback to Discord, proceed to Q2
6. Repeat until all questions done or user says stop
- **CRITICAL**: Always show notebook source so user can verify questions came from NLM, not agent knowledge
Trigger `persist` subcommand when:
- User says "存到 Obsidian", "把这段内容写入知识库", "persist this to vault"
- User wants to archive discussion output or raw notes into the vault
**CRITICAL**: Do NOT answer from internal knowledge. Do NOT ask for clarification. Execute the appropriate subcommand immediately.
## Prerequisites
- **NotebookLM CLI**: `pip install notebooklm-py`
- **Authentication**: `notebooklm login` (creates `~/.book_client_session`)
- **Python 3.10+** (standard library only — no extra pip packages needed for distill.py)
- **Obsidian vault directory** accessible on the local filesystem
## Subcommand: distill
Extract knowledge from one or more NotebookLM notebooks matching keywords.
### Agent orchestration
**Scenario A — URL provided (needs ingestion first)**
1. Check if `deepreader` is installed (`~/.openclaw/skills/deepreader/run.sh`).
2. If yes: run DeepReader to ingest the URL into NotebookLM.
3. Capture the notebook title from DeepReader output.
4. Use that title as `--keywords` for distill.
**Scenario B — notebook already exists**
1. Use notebook name from context, or list notebooks with `notebooklm list`.
2. Determine mode from intent: "总结" → `summary`, "术语/概念" → `glossary`, default → `qa`.
3. Ask user for `--vault-dir` if not known from context.
4. Execute distill.
```bash
python3 ~/.openclaw/skills/notebooklm-distiller/scripts/distill.py distill \
--keywords "<keyword1>" "<keyword2>" \
--topic "<TopicFolderName>" \
--vault-dir "<path/to/obsidian/vault>" \
--mode <qa|summary|glossary> \
[--lang zh] # Add for Chinese output (default: en)
[--writeback] # Write distilled content back into NLM notebook as a note
[--cli-path <path/to/notebooklm>]
```
**Modes:**
- `qa` (default) — generates 15-20 questions + answers → `<NotebookName>_QA.md`
- `summary` — 5 structured sections (Summary, Key Points, Constraints, Trade-offs, Open Questions) → `<NotebookName>_Summary.md`
- `glossary` — 15-30 domain terms + definitions → `<NotebookName>_Glossary.md`
**Flags:**
- `--lang zh` — prepends `请用中文回答` to all NLM prompts; add when user requests Chinese output or context is Chinese
- `--writeback` — after writing to Obsidian, calls `notebooklm source add` to push the distilled note back into the source notebook as a text source titled `Distill Log: {mode} | {notebook_name} | {date}`. Add when user says "写回 NLM", "记录到笔记本", or wants the distill log visible in NotebookLM
## Subcommand: research
Start a NotebookLM web research session on a topic. Creates a new notebook, imports web sources, and waits for completion.
```bash
python3 ~/.openclaw/skills/notebooklm-distiller/scripts/distill.py research \
--topic "<Research Topic>" \
[--mode deep|fast] \
[--cli-path <path/to/notebooklm>]
```
Output: notebook ID and name. Follow up with `distill` to extract into Obsidian.
## Subcommand: persist
Write any markdown content into the Obsidian vault with auto-generated YAML frontmatter.
```bash
# From inline content
python3 ~/.openclaw/skills/notebooklm-distiller/scripts/distill.py persist \
--vault-dir "<path/to/obsidian/vault>" \
--path "Notes/2026-03-09-meeting.md" \
--title "Meeting Notes" \
--content "Key decisions: ..." \
--tags "meeting,notes"
# From a file
python3 ~/.openclaw/skills/notebooklm-distiller/scripts/distill.py persist \
--vault-dir "<path/to/obsidian/vault>" \
--path "Notes/draft.md" \
--file ~/Desktop/draft.md
```
## Output format (distill)
Each notebook produces one file at `<vault-dir>/<topic>/<NotebookName>_<Mode>.md`:
```markdown
---
title: "<NotebookName> | Deep Q&A"
date: YYYY-MM-DD
type: knowledge-note
author: notebooklm-distiller
tags: ["distillation", "qa", "<topic-slug>"]
source: "NotebookLM/<NotebookName>"
project: "<topic>"
status: draft
---
# <NotebookName> — Deep Q&A
## Q01
> [!question]
> <question text>
**Answer:**
<answer from notebook sources>
---
```
## Output language
Add `--lang zh` to `distill`, `quiz`, or `evaluate` to get Chinese output. Default is English.
## NLM CLI session behaviour
`notebooklm ask --new` creates ephemeral sessions that are **not visible in the NotebookLM web UI**. This is by design — the CLI and web interface use separate conversation spaces. Answers are still scoped to the specified notebook's sources.
## Error handling
- **No notebooks found**: verify keywords match notebook titles (use `notebooklm list`).
- **Timeout / rate limit**: built-in retry logic and delays. Monitor with `ps aux | grep notebooklm`.
- **Auth failure**: run `notebooklm login` to refresh `~/.book_client_session`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!