
Anything To Notebooklm
- 6 installs
- Updated February 25, 2026
- hamsterider-m/anything-to-notebooklm
Fetch content from WeChat, YouTube, web URLs, local files, or search, upload it to NotebookLM, and generate podcasts, PPTs, or mind maps.
About
A multi-source processor that automatically pulls content from links, files, or search queries into NotebookLM and generates outputs like podcasts, slide decks, and mind maps. A developer uses it when they want to turn scattered sources into NotebookLM notebooks and derived media.
- Ingests WeChat, YouTube, web, and local files (PDF/EPUB/DOCX/PPTX/MD)
- Generates podcasts, PPTs, and mind maps from natural-language instructions
Anything To Notebooklm by the numbers
- 6 all-time installs (skills.sh)
- Ranked #1,691 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/hamsterider-m/anything-to-notebooklm --skill anything-to-notebooklmAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 6 |
|---|---|
| Last updated | February 25, 2026 |
| Repository | hamsterider-m/anything-to-notebooklm ↗ |
What it does
Fetch content from WeChat, YouTube, web URLs, local files, or search, upload it to NotebookLM, and generate podcasts, PPTs, or mind maps.
Files
多源内容 → NotebookLM 智能处理器
自动从多种来源获取内容,上传到 NotebookLM,并根据自然语言指令生成播客、PPT、思维导图等多种格式。
定位与入口策略(重要)
- 默认入口:对外优先使用
anything-to-notebooklm,适合“给素材/链接/关键词,直接产出内容”的自然语言请求。 - 边界分工:本 Skill 负责内容采集、转换、清洗、意图路由;NotebookLM 侧的创建/上传/生成/等待/下载全部委托给
notebooklmSkill。 - 高级直连:当用户明确要求 CLI 细节、JSON 输出、并行控制、research/fulltext/language 等高级能力时,直接切换到
notebooklmSkill。 - 维护原则:本 Skill 不重复维护 NotebookLM 的完整命令教学,避免与上游
notebooklmSkill 漂移。
Quick Reference
| 任务 | 执行方式 |
|---|---|
| 抓取微信文章 | 本 Skill 调用 MCP read_weixin_article |
| 提取 B 站字幕 | 本 Skill 调用 bilibili-subtitle |
| 转换文档/OCR/转录 | 本 Skill 调用 markitdown |
| 创建 notebook / 上传 source | 委托 notebooklm Skill |
| 生成 audio/video/slide/report/mind-map 等 | 委托 notebooklm Skill |
| 等待任务与下载产物 | 委托 notebooklm Skill |
| JSON/并行/research/fulltext/language | 直接使用 notebooklm Skill(高级模式) |
支持的内容源
1. 微信公众号文章
通过 MCP 服务器自动抓取微信公众号文章内容(绕过反爬虫)
2. 任意网页链接
支持任何公开可访问的网页(新闻、博客、文档等)
3. YouTube 视频
自动提取 YouTube 视频的字幕和元数据
4. Office 文档
- Word (DOCX) - 保留表格和格式
- PowerPoint (PPTX) - 提取幻灯片和备注
- Excel (XLSX) - 表格数据
5. 电子书与文档
- PDF - 全文提取
- EPUB - 电子书全文提取
- Markdown (.md) - 原生支持
6. 图片与扫描件
- Images (JPEG, PNG, GIF, WebP) - OCR 识别文字
- 扫描的 PDF 文档 - OCR 提取文字
7. 音频文件
- Audio (WAV, MP3) - 语音转文字
8. 结构化数据
- CSV - 逗号分隔数据
- JSON - JSON 数据
- XML - XML 文档
9. 压缩包
- ZIP - 自动解压并处理所有支持的文件
10. 纯文本
直接输入或粘贴的文本内容
11. 搜索关键词
通过 Web Search 搜索关键词,汇总多个来源的信息
12. Bilibili 视频
通过 bilibili-subtitle 工具提取字幕或转录音频,生成文字稿
前置条件
1. 安装 wexin-read-mcp
MCP 服务器已安装在:~/.claude/skills/anything-to-notebooklm/wexin-read-mcp/
配置 MCP(需要手动添加到 Claude 配置文件):
macOS: 编辑 ~/.claude/config.json
{
"primaryApiKey": "any",
"mcpServers": {
"weixin-reader": {
"command": "python",
"args": [
"/Users/joe/.claude/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py"
]
}
}
}配置后需要重启 Claude Code。
2. NotebookLM 认证
首次使用前,委托 notebooklm Skill 执行认证流程:
1. 运行认证检查(auth check) 2. 如未登录或已过期,执行登录(login) 3. 返回认证状态给本 Skill,确认后再继续上传/生成
触发方式
微信公众号文章
/anything-to-notebooklm [微信文章链接]- "把这篇微信文章传到NotebookLM"
- "把这篇微信文章生成播客"
网页链接
- "把这个网页做成播客 [URL]"
- "这篇文章帮我做成PPT [URL]"
- "帮我分析这个网页 [URL]"
YouTube 视频
- "把这个YouTube视频做成播客 [YouTube URL]"
- "这个视频帮我生成思维导图 [YouTube URL]"
Bilibili 视频
- "把这个B站视频做成播客 [Bilibili URL]"
- "这个B站视频帮我生成PPT [BV号]"
本地文件
- "把这个PDF上传到NotebookLM /path/to/file.pdf"
- "这个Markdown文件生成PPT /path/to/file.md"
- "这个EPUB电子书生成播客 /path/to/book.epub"
- "把这个Word文档做成思维导图 /path/to/doc.docx"
- "这个PowerPoint生成Quiz /path/to/slides.pptx"
- "把这个扫描PDF做成报告 /path/to/scan.pdf"(自动OCR)
搜索关键词
- "搜索 'AI发展趋势' 并生成报告"
- "搜索关于'量子计算'的资料做成播客"
混合使用
- "把这篇文章、这个视频和这个PDF一起上传,生成一份报告"
自然语言 → 委托动作映射
| 用户说的话 | 识别意图 | 委托动作(由 notebooklm Skill 执行) |
|---|---|---|
| "生成播客" / "做成音频" / "转成语音" | audio | generate-audio |
| "做成PPT" / "生成幻灯片" / "做个演示" | slide-deck | generate-slide-deck |
| "画个思维导图" / "生成脑图" / "做个导图" | mind-map | generate-mind-map |
| "生成Quiz" / "出题" / "做个测验" | quiz | generate-quiz |
| "做个视频" / "生成视频" | video | generate-video |
| "生成报告" / "写个总结" / "整理成文档" | report | generate-report |
| "做个信息图" / "可视化" | infographic | generate-infographic |
| "生成数据表" / "做个表格" | data-table | generate-data-table |
| "做成闪卡" / "生成记忆卡片" | flashcards | generate-flashcards |
如果没有明确指令,默认只上传不生成任何内容,等待用户后续指令。
Progress Updates
执行过程中提供清晰的状态更新:
⏳ 识别内容源类型...
✅ 检测到微信公众号文章
⏳ 抓取文章内容...
✅ 文章抓取成功:《深度学习的未来趋势》
⏳ 保存为临时文件...
✅ 已保存:/tmp/weixin_深度学习_1706234567.txt
⏳ 创建 NotebookLM 笔记本...
✅ 笔记本已创建:ID abc-123-def
⏳ 上传文件到笔记本...
✅ 上传完成,等待处理...
✅ 处理完成!
⏳ 生成播客...
✅ 播客生成完成!
⏳ 下载文件...
✅ Done!Output Summary
任务完成后,按以下格式输出:
仅上传(无生成):
✅ 内容已上传到 NotebookLM!
📓 笔记本:[标题]
ID: abc-123-def
📄 来源:filename.txt
ID: source-xyz-789
💡 后续操作:
- 默认继续使用本 Skill:直接说“基于这个 notebook 生成播客/PPT/Quiz”
- 高级模式:切换 `notebooklm` Skill,对该 notebook 进行精细控制上传并生成:
✅ [内容类型]已转换为[输出格式]!
📄 来源:[标题/文件名]
👤 作者:[作者](如有)
📅 日期:[日期](如有)
🎙️ [输出格式]已生成:
📁 文件:/tmp/output_file.mp3
⏱️ 时长/页数:约 X 分钟/页
📊 大小:X MB工作流程
Step 1: 识别内容源类型
Claude 自动识别输入类型:
| 输入特征 | 识别为 | 处理方式 |
|---|---|---|
https://mp.weixin.qq.com/s/ | 微信公众号 | MCP 工具抓取 |
https://youtube.com/... 或 https://youtu.be/... | YouTube | 直接传递给 NotebookLM |
https://bilibili.com/... 或 BV1xxx | Bilibili 视频 | bilibili-subtitle 提取 → TXT |
https:// 或 http:// | 网页 | 直接传递给 NotebookLM |
/path/to/file.pdf | PDF 文件 | markitdown 转 Markdown → TXT |
/path/to/file.epub | EPUB 电子书 | markitdown 转 Markdown → TXT |
/path/to/file.docx | Word 文档 | markitdown 转 Markdown → TXT |
/path/to/file.pptx | PowerPoint | markitdown 转 Markdown → TXT |
/path/to/file.xlsx | Excel | markitdown 转 Markdown → TXT |
/path/to/file.md | Markdown | 直接上传 |
/path/to/image.jpg | 图片(OCR) | markitdown OCR → TXT |
/path/to/audio.mp3 | 音频 | markitdown 转录 → TXT |
/path/to/file.zip | ZIP 压缩包 | 解压 → markitdown 批量转换 |
| 关键词(无URL,无路径) | 搜索查询 | WebSearch → 汇总 → TXT |
Step 2: 获取内容
微信公众号:
- 使用 MCP 工具
read_weixin_article - 返回:title, author, publish_time, content
- 保存为 TXT:
/tmp/weixin_{title}_{timestamp}.txt
网页/YouTube:
- 保留原始 URL 作为 source 输入
- NotebookLM 自动提取内容
Bilibili 视频:
- 使用 bilibili-subtitle 提取字幕/转录
- 命令:
python -m bilibili_subtitle "URL" -o /tmp --skip-summary - 保存为 TXT:
/tmp/{video_id}.transcript.md
Office 文档/电子书/PDF:
- 使用 markitdown 转换为 Markdown
- 命令:
markitdown /path/to/file.docx -o /tmp/converted.md - 保存为 TXT:
/tmp/{filename}_converted_{timestamp}.txt
本地 Markdown:
- 作为本地文件 source 交给委托层上传
图片(OCR):
- markitdown 自动 OCR 识别文字
- 提取 EXIF 元数据
- 保存为 TXT
音频文件:
- markitdown 自动转录语音为文字
- 提取音频元数据
- 保存为 TXT
ZIP 压缩包:
- 自动解压到临时目录
- 遍历所有支持的文件
- 批量使用 markitdown 转换
- 合并为单个 TXT 或多个 Source
搜索关键词:
- 使用 WebSearch 工具搜索关键词
- 汇总前 3-5 条结果
- 保存为 TXT:
/tmp/search_{keyword}_{timestamp}.txt
Step 3: 上传到 NotebookLM
委托 notebooklm Skill 执行: 1. 创建 notebook(返回 notebook_id) 2. 添加 source(文件或 URL) 3. 等待 source 进入 READY 状态 4. 将 notebook_id/source_id 回传给本 Skill 的后续步骤
等待 source READY 很重要,否则后续生成可能失败。
Step 5: 根据意图生成内容(可选)
如果用户指定了处理意图,自动委托 notebooklm Skill:
| 意图 | 委托动作 | 产物类型 |
|---|---|---|
| audio | generate-audio | mp3 |
| slide-deck | generate-slide-deck | |
| mind-map | generate-mind-map | json |
| quiz | generate-quiz | markdown/json/html |
| video | generate-video | mp4 |
| report | generate-report | md |
| infographic | generate-infographic | png |
| flashcards | generate-flashcards | markdown/json/html |
生成流程: 1. 委托发起生成(返回任务/产物 ID) 2. 委托等待完成 3. 委托下载到本地 4. 告知用户最终文件路径与大小
完整示例
示例 1:微信公众号文章 → 播客
用户输入:
把这篇文章生成播客 https://mp.weixin.qq.com/s/abc123xyz执行流程: 1. 识别为微信公众号链接 2. MCP 工具抓取文章内容 3. 创建 TXT 文件 4. 上传到 NotebookLM 5. 生成播客(generate audio) 6. 下载播客到本地
输出:
✅ 微信文章已转换为播客!
📄 文章:深度学习的未来趋势
👤 作者:张三
📅 发布:2026-01-20
🎙️ 播客已生成:
📁 文件:/tmp/weixin_深度学习的未来趋势_podcast.mp3
⏱️ 时长:约 8 分钟
📊 大小:12.3 MB示例 2:YouTube 视频 → 思维导图
用户输入:
这个视频帮我画个思维导图 https://www.youtube.com/watch?v=abc123执行流程: 1. 识别为 YouTube 链接 2. 直接传递给 NotebookLM(自动提取字幕) 3. 生成思维导图(generate mind-map) 4. 下载思维导图
输出:
✅ YouTube 视频已转换为思维导图!
🎬 视频:Understanding Quantum Computing
⏱️ 时长:23 分钟
🗺️ 思维导图已生成:
📁 文件:/tmp/youtube_quantum_computing_mindmap.json
📊 节点数:45 个示例 3:搜索关键词 → 报告
用户输入:
搜索 'AI发展趋势 2026' 并生成报告执行流程: 1. 识别为搜索查询 2. WebSearch 搜索关键词 3. 汇总前 5 条结果 4. 创建 TXT 文件 5. 上传到 NotebookLM 6. 生成报告(generate report)
输出:
✅ 搜索结果已生成报告!
🔍 关键词:AI发展趋势 2026
📊 来源:5 篇文章
📄 报告已生成:
📁 文件:/tmp/search_AI发展趋势2026_report.md
📝 章节:7 个
📊 大小:15.2 KB示例 4:混合多源 → PPT
用户输入:
把这篇文章、这个视频和这个PDF一起做成PPT:
- https://example.com/article
- https://youtube.com/watch?v=xyz
- /Users/joe/Documents/research.pdf执行流程: 1. 创建新 Notebook 2. 依次添加 3 个 Source 3. 基于所有 Source 生成 PPT
输出:
✅ 多源内容已整合为PPT!
📚 内容源:
1. 网页文章:AI in 2026
2. YouTube:Future of AI
3. PDF:Research Notes (12 页)
📊 PPT 已生成:
📁 文件:/tmp/multi_source_slides.pdf
📄 页数:25 页
📦 大小:3.8 MB示例 5: EPUB 电子书 → 播客
用户输入:
把这本电子书做成播客 /Users/joe/Books/sapiens.epub执行流程: 1. 识别为 EPUB 文件 2. markitdown 转换为 Markdown 3. 保存为 TXT 4. 上传到 NotebookLM 5. 生成播客
输出:
✅ EPUB 电子书已转换为播客!
📚 电子书:Sapiens: A Brief History of Humankind
📄 页数:约 450 页
📊 字数:约 15 万字
🎙️ 播客已生成:
📁 文件:/tmp/sapiens_podcast.mp3
⏱️ 时长:约 45 分钟(精华版)
📊 大小:48.2 MB示例 6:Word 文档 → Quiz
用户输入:
这个Markdown生成Quiz /Users/joe/notes/machine_learning.md执行流程: 1. 识别为本地 Markdown 文件 2. 直接上传到 NotebookLM 3. 生成 Quiz(generate quiz)
输出:
✅ Markdown 已转换为Quiz!
📄 文件:machine_learning.md
📊 大小:8.5 KB
📝 Quiz 已生成:
📁 文件:/tmp/machine_learning_quiz.md
❓ 题目:15 道(10选择 + 5简答)错误处理
1. 微信文章获取失败
- 错误:无法获取文章内容
- 原因:文章已删除、需要登录、网络问题、反爬虫拦截
- 解决:检查链接是否正确,等待 2-3 秒后重试
- 备选:手动复制文章内容
2. NotebookLM 认证失败
- 错误:Auth/cookie error
- 原因:认证过期或未登录
- 解决:切换到
notebooklmSkill 执行认证修复流程(auth check/login) - 验证:由
notebooklmSkill 返回认证状态
3. 文件上传失败
- 错误:Invalid file or upload error
- 原因:文件路径错误、权限问题、文件过大
- 解决:本 Skill 先检查路径/权限/转换结果,再委托
notebooklmSkill 重试上传 - 备选:尝试转换为更小的文件
4. 生成任务失败
- 错误:Generation failed
- 原因:内容太短(<100字)、太长(>50万字)、服务异常
- 解决:由
notebooklmSkill 执行任务状态诊断与重试 - 备选:尝试其他格式(如报告代替播客)
5. MCP 工具未找到
- 错误:Tool not found: read_weixin_article
- 原因:MCP 服务器未配置或未启动
- 解决:检查
~/.claude/config.json配置,重启 Claude Code - 验证:
python ~/.agents/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py
高级功能
1. 多意图处理
用户可以一次性指定多个处理任务:
这篇文章帮我生成播客和PPT https://mp.weixin.qq.com/s/abc123Skill 会依次执行: 1. 生成播客 2. 生成 PPT
2. 自定义 Notebook
默认每篇文章创建新 Notebook,也可以指定已有 Notebook:
把这篇文章加到我的【AI研究】笔记本 https://mp.weixin.qq.com/s/abc123Skill 会: 1. 搜索名为"AI研究"的 Notebook 2. 将文章添加为新 Source 3. 基于所有 Sources 生成内容
3. 自定义生成指令
为生成任务添加具体要求:
这篇文章生成播客,要求:轻松幽默的风格,时长控制在5分钟Skill 会将要求作为 instructions 传给 NotebookLM。
注意事项
1. 频率限制:
- 每次请求间隔 > 2 秒,避免被微信封禁
- NotebookLM 生成任务有并发限制(最多 3 个同时进行)
2. 内容长度:
- 微信文章通常 1000-5000 字,适合生成播客(3-8 分钟)
- 超过 10000 字的长文可能需要更长生成时间
- 少于 500 字的短文可能生成效果不佳
3. 版权遵守:
- 仅用于个人学习研究
- 遵守微信公众号的版权规定
- 生成的内容不得用于商业用途
4. 生成时间:
- 播客:2-5 分钟
- 视频:3-8 分钟
- PPT:1-3 分钟
- 思维导图:1-2 分钟
- Quiz/闪卡:1-2 分钟
5. 文件清理:
- TXT 源文件保存在
/tmp/,系统重启后自动清理 - 生成的文件(MP3/PDF/MD 等)默认保存在
/tmp/ - 可以指定自定义保存路径
相关 Skills
notebooklm- NotebookLM 执行层(高级用户可直接使用)notebooklm-deep-analyzer- 深度分析 NotebookLM 内容markitdown- 转换其他格式文档
默认策略:
- 对外默认使用
anything-to-notebooklm(统一入口) - 高级场景直用
notebooklm(精细控制)
配置 MCP(重要)
⚠️ 第一次使用前必须配置
编辑 ~/.claude/config.json:
{
"primaryApiKey": "any",
"mcpServers": {
"weixin-reader": {
"command": "python",
"args": [
"/Users/joe/.claude/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py"
]
}
}
}配置后重启 Claude Code!
故障排查
# 测试 MCP 服务器
python ~/.agents/skills/anything-to-notebooklm/wexin-read-mcp/src/server.pyNotebookLM 侧故障(认证、上传、生成、下载)统一委托 notebooklm Skill 处理,不在本 Skill 维护完整 CLI 排查手册。
典型使用场景
场景 1:快速学习
我想学习这篇文章,帮我生成播客,上下班路上听
链接:https://mp.weixin.qq.com/s/abc123→ 生成 8 分钟播客,通勤时间听完
场景 2:分享给团队
这篇文章不错,做成PPT分享给团队
https://mp.weixin.qq.com/s/abc123→ 生成 15 页 PPT,直接用于团队分享
场景 3:复习巩固
这篇技术文章帮我出题,想测试一下掌握程度
https://mp.weixin.qq.com/s/abc123→ 生成 10 道选择题 + 5 道简答题
场景 4:可视化理解
这篇文章概念比较多,画个思维导图帮我理清结构
https://mp.weixin.qq.com/s/abc123→ 生成思维导图,一目了然
示例 7:Bilibili 视频 → 播客
用户输入:
把这个B站视频做成播客 https://www.bilibili.com/video/BV1234567890/执行流程: 1. 识别为 Bilibili 链接 2. bilibili-subtitle 提取字幕/转录 3. 保存为 TXT 4. 上传到 NotebookLM 5. 生成播客
输出:
✅ B站视频已转换为播客!
🎬 视频:深度学习入门教程
⏱️ 时长:45 分钟
🎙️ 播客已生成:
📁 文件:/tmp/bilibili_BV1234567890_podcast.mp3
⏱️ 时长:约 12 分钟
📊 大小:18.5 MB---
Skill 创建时间:2026-01-25 最后更新:2026-02-25 版本:v1.2.0
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
venv/
ENV/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# MCP Server (will be cloned during install)
# Keep the directory but ignore its contents
wexin-read-mcp/
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
# Logs
*.log
# Environment
.env
.env.local
# Temporary files
tmp/
temp/
*.tmp
# macOS
.DS_Store
.AppleDouble
.LSOverride
#!/usr/bin/env python3
"""
环境检查脚本 - 验证 anything-to-notebooklm skill 所有依赖
"""
import sys
import os
import json
from pathlib import Path
# 颜色输出
RED = '\033[0;31m'
GREEN = '\033[0;32m'
YELLOW = '\033[1;33m'
BLUE = '\033[0;34m'
NC = '\033[0m'
def print_status(status, message):
"""打印状态信息"""
if status == "ok":
print(f"{GREEN}✅ {message}{NC}")
elif status == "warning":
print(f"{YELLOW}⚠️ {message}{NC}")
elif status == "error":
print(f"{RED}❌ {message}{NC}")
else:
print(f"{BLUE}ℹ️ {message}{NC}")
def check_python_version():
"""检查 Python 版本"""
version = sys.version_info
version_str = f"{version.major}.{version.minor}.{version.micro}"
if version.major >= 3 and version.minor >= 9:
print_status("ok", f"Python {version_str}")
return True
else:
print_status("error", f"Python {version_str} (需要 3.9+)")
return False
def check_module(module_name, import_name=None):
"""检查 Python 模块是否已安装"""
if import_name is None:
import_name = module_name
try:
__import__(import_name)
print_status("ok", f"{module_name} 已安装")
return True
except ImportError:
print_status("error", f"{module_name} 未安装")
return False
def check_command(cmd):
"""检查命令是否可用"""
import shutil
if shutil.which(cmd):
# 尝试获取版本
import subprocess
try:
result = subprocess.run([cmd, "--version"],
capture_output=True,
text=True,
timeout=5)
version = result.stdout.split('\n')[0] if result.stdout else "unknown"
print_status("ok", f"{cmd} 已安装 ({version})")
except:
print_status("ok", f"{cmd} 已安装")
return True
else:
print_status("error", f"{cmd} 未找到")
return False
def check_mcp_config():
"""检查 MCP 配置"""
config_path = Path.home() / ".claude" / "config.json"
if not config_path.exists():
print_status("error", f"未找到 Claude 配置文件: {config_path}")
return False
try:
with open(config_path, 'r') as f:
config = json.load(f)
if "mcpServers" in config and "weixin-reader" in config["mcpServers"]:
print_status("ok", "MCP 服务器已配置")
return True
else:
print_status("warning", "MCP 服务器未配置(需要手动添加)")
return False
except Exception as e:
print_status("error", f"无法读取配置文件: {e}")
return False
def check_mcp_server():
"""检查 MCP 服务器文件"""
skill_dir = Path(__file__).parent
mcp_server = skill_dir / "wexin-read-mcp" / "src" / "server.py"
if mcp_server.exists():
print_status("ok", f"MCP 服务器文件存在")
return True
else:
print_status("error", f"MCP 服务器文件不存在: {mcp_server}")
return False
def check_notebooklm_auth():
"""检查 NotebookLM 认证状态"""
import subprocess
try:
result = subprocess.run(["notebooklm", "list"],
capture_output=True,
text=True,
timeout=10)
if result.returncode == 0:
print_status("ok", "NotebookLM 已认证")
return True
else:
print_status("warning", "NotebookLM 未认证(请运行 notebooklm login)")
return False
except subprocess.TimeoutExpired:
print_status("warning", "NotebookLM 认证检查超时")
return False
except Exception as e:
print_status("error", f"NotebookLM 认证检查失败: {e}")
return False
def main():
print(f"\n{BLUE}========================================{NC}")
print(f"{BLUE} 环境检查 - anything-to-notebooklm{NC}")
print(f"{BLUE}========================================{NC}\n")
results = []
# 1. Python 版本
print(f"{YELLOW}[1/8] Python 版本{NC}")
results.append(check_python_version())
print()
# 2. 核心依赖
print(f"{YELLOW}[2/9] 核心 Python 依赖{NC}")
results.append(check_module("fastmcp"))
results.append(check_module("playwright"))
results.append(check_module("beautifulsoup4", "bs4"))
results.append(check_module("lxml"))
results.append(check_module("markitdown"))
print()
# 3. Playwright 浏览器
print(f"{YELLOW}[3/9] Playwright 可导入性{NC}")
try:
from playwright.sync_api import sync_playwright
print_status("ok", "Playwright 可以正常导入")
results.append(True)
except Exception as e:
print_status("error", f"Playwright 导入失败: {e}")
results.append(False)
print()
# 4. NotebookLM CLI
print(f"{YELLOW}[4/9] NotebookLM CLI{NC}")
results.append(check_command("notebooklm"))
print()
# 5. markitdown CLI
print(f"{YELLOW}[5/9] markitdown CLI{NC}")
results.append(check_command("markitdown"))
print()
# 6. Git 命令
print(f"{YELLOW}[6/9] Git 命令{NC}")
results.append(check_command("git"))
print()
# 7. MCP 服务器文件
print(f"{YELLOW}[7/9] MCP 服务器文件{NC}")
results.append(check_mcp_server())
print()
# 8. MCP 配置
print(f"{YELLOW}[8/9] MCP 配置{NC}")
results.append(check_mcp_config())
print()
# 9. NotebookLM 认证
print(f"{YELLOW}[9/9] NotebookLM 认证{NC}")
results.append(check_notebooklm_auth())
print()
# 总结
print(f"{BLUE}========================================{NC}")
passed = sum(results)
total = len(results)
if passed == total:
print(f"{GREEN}✅ 所有检查通过 ({passed}/{total})!环境配置完整。{NC}")
elif passed >= total * 0.8:
print(f"{YELLOW}⚠️ 大部分检查通过 ({passed}/{total}),但有些问题需要修复。{NC}")
else:
print(f"{RED}❌ 检查失败 ({passed}/{total}),请运行 install.sh 重新安装。{NC}")
print(f"{BLUE}========================================{NC}\n")
if passed < total:
print("💡 修复建议:")
print(" 1. 运行安装脚本:./install.sh")
print(" 2. 配置 MCP:编辑 ~/.claude/config.json")
print(" 3. 认证 NotebookLM:notebooklm login")
print()
sys.exit(0 if passed == total else 1)
if __name__ == "__main__":
main()
#!/bin/bash
# anything-to-notebooklm Skill Installer
# 自动安装所有依赖并配置环境
set -e # 遇到错误立即退出
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_NAME="anything-to-notebooklm"
VENV_DIR="$SKILL_DIR/.venv"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} 多源内容 → NotebookLM 安装程序${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# 1. 检查 Python 版本
echo -e "${YELLOW}[1/6] 检查 Python 环境...${NC}"
if ! command -v python3 &> /dev/null; then
echo -e "${RED}❌ 未找到 Python3,请先安装 Python 3.9+${NC}"
exit 1
fi
PYTHON_VERSION=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
REQUIRED_VERSION="3.9"
if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$PYTHON_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then
echo -e "${RED}❌ Python 版本过低(当前 $PYTHON_VERSION,需要 3.9+)${NC}"
exit 1
fi
echo -e "${GREEN}✅ Python $PYTHON_VERSION${NC}"
# 2. 创建虚拟环境
echo ""
echo -e "${YELLOW}[2/8] 创建虚拟环境...${NC}"
if [ -d "$VENV_DIR" ]; then
echo -e "${GREEN}✅ 虚拟环境已存在${NC}"
else
python3 -m venv "$VENV_DIR"
echo -e "${GREEN}✅ 虚拟环境创建完成${NC}"
fi
source "$VENV_DIR/bin/activate"
pip install --upgrade pip -q
echo -e "${GREEN}✅ 虚拟环境已激活${NC}"
# 3. 检查并克隆 wexin-read-mcp
echo ""
echo -e "${YELLOW}[3/8] 安装 MCP 服务器...${NC}"
MCP_DIR="$SKILL_DIR/wexin-read-mcp"
if [ -d "$MCP_DIR" ]; then
echo -e "${GREEN}✅ MCP 服务器已存在${NC}"
else
echo "正在克隆 wexin-read-mcp..."
git clone https://github.com/Bwkyd/wexin-read-mcp.git "$MCP_DIR"
echo -e "${GREEN}✅ MCP 服务器克隆完成${NC}"
fi
# 4. 安装 Python 依赖
echo ""
echo -e "${YELLOW}[4/8] 安装 Python 依赖...${NC}"
# 检查 MCP 依赖
if python -c "import mcp" 2>/dev/null; then
echo -e "${GREEN}✅ MCP 依赖已安装${NC}"
elif [ -f "$MCP_DIR/requirements.txt" ]; then
echo "安装 MCP 依赖..."
pip install -r "$MCP_DIR/requirements.txt" -q
echo -e "${GREEN}✅ MCP 依赖安装完成${NC}"
fi
# 检查 Skill 依赖
if python -c "import markitdown; import playwright" 2>/dev/null; then
echo -e "${GREEN}✅ Skill 依赖已安装${NC}"
elif [ -f "$SKILL_DIR/requirements.txt" ]; then
echo "安装 Skill 依赖(包括 markitdown 文件转换工具)..."
pip install -r "$SKILL_DIR/requirements.txt" -q
echo -e "${GREEN}✅ Skill 依赖安装完成${NC}"
fi
# 5. 安装 Playwright 浏览器
echo ""
echo -e "${YELLOW}[5/8] 安装 Playwright 浏览器...${NC}"
if ls "$HOME/Library/Caches/ms-playwright/chromium"* &>/dev/null; then
echo -e "${GREEN}✅ Playwright 浏览器已安装${NC}"
elif python3 -c "from playwright.sync_api import sync_playwright" 2>/dev/null; then
echo "安装 Chromium 浏览器..."
playwright install chromium
echo -e "${GREEN}✅ Playwright 浏览器安装完成${NC}"
else
echo -e "${RED}❌ Playwright 导入失败,请检查安装${NC}"
exit 1
fi
# 6. 检查并安装 notebooklm
echo ""
echo -e "${YELLOW}[6/8] 检查 NotebookLM CLI...${NC}"
if [ -f "$VENV_DIR/bin/notebooklm" ]; then
NOTEBOOKLM_VERSION=$("$VENV_DIR/bin/notebooklm" --version 2>/dev/null || echo "unknown")
echo -e "${GREEN}✅ NotebookLM CLI 已安装 ($NOTEBOOKLM_VERSION)${NC}"
else
echo "正在安装 notebooklm-py..."
pip install git+https://github.com/teng-lin/notebooklm-py.git -q
if [ -f "$VENV_DIR/bin/notebooklm" ]; then
echo -e "${GREEN}✅ NotebookLM CLI 安装完成${NC}"
else
echo -e "${RED}❌ NotebookLM CLI 安装失败${NC}"
echo "请手动安装:pip install git+https://github.com/teng-lin/notebooklm-py.git"
exit 1
fi
fi
# 7. 检查 bilibili-subtitle(可选)
echo ""
echo -e "${YELLOW}[7/8] 检查 bilibili-subtitle(可选)...${NC}"
BILIBILI_SKILL_DIR="$HOME/.agents/skills/bilibili-subtitle"
if [ -d "$BILIBILI_SKILL_DIR" ] && [ -f "$BILIBILI_SKILL_DIR/.venv/bin/python" ]; then
echo -e "${GREEN}✅ bilibili-subtitle 已安装${NC}"
elif [ -d "$BILIBILI_SKILL_DIR" ] && [ -f "$BILIBILI_SKILL_DIR/install.sh" ]; then
echo "安装 bilibili-subtitle(B站视频支持)..."
(cd "$BILIBILI_SKILL_DIR" && ./install.sh)
echo -e "${GREEN}✅ bilibili-subtitle 安装完成${NC}"
else
echo -e "${YELLOW}⚠️ bilibili-subtitle 目录不存在,跳过${NC}"
fi
# 8. 配置指导
echo ""
echo -e "${YELLOW}[8/8] 配置指导${NC}"
echo ""
CLAUDE_CONFIG="$HOME/.claude/config.json"
CONFIG_SNIPPET=" \"weixin-reader\": {
\"command\": \"$VENV_DIR/bin/python\",
\"args\": [
\"$MCP_DIR/src/server.py\"
]
}"
echo -e "${BLUE}📝 下一步:配置 MCP 服务器${NC}"
echo ""
echo "请编辑 $CLAUDE_CONFIG"
echo ""
echo "在 \"mcpServers\" 中添加:"
echo -e "${GREEN}$CONFIG_SNIPPET${NC}"
echo ""
echo "完整配置示例:"
echo -e "${GREEN}{
\"primaryApiKey\": \"any\",
\"mcpServers\": {
$CONFIG_SNIPPET
}
}${NC}"
echo ""
# 检查是否已配置
if [ -f "$CLAUDE_CONFIG" ]; then
if grep -q "weixin-reader" "$CLAUDE_CONFIG"; then
echo -e "${GREEN}✅ 检测到已有 weixin-reader 配置${NC}"
else
echo -e "${YELLOW}⚠️ 未检测到 weixin-reader 配置,请手动添加${NC}"
fi
else
echo -e "${YELLOW}⚠️ 未找到 Claude 配置文件,请手动创建${NC}"
fi
echo ""
echo -e "${BLUE}🔐 NotebookLM 认证${NC}"
echo ""
echo "首次使用前,请运行:"
echo -e "${GREEN} $VENV_DIR/bin/notebooklm login${NC}"
echo -e "${GREEN} $VENV_DIR/bin/notebooklm list # 验证认证成功${NC}"
echo ""
# 最终检查
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}✅ 安装完成!${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo "📦 安装位置:$SKILL_DIR"
echo ""
echo "⚠️ 重要提醒:"
echo " 1. 配置 MCP 服务器后需要重启 Claude Code"
echo " 2. 首次使用前运行 notebooklm login"
echo ""
echo "🚀 使用示例:"
echo " 把这篇文章生成播客 https://mp.weixin.qq.com/s/xxx"
echo ""
MIT License
Copyright (c) 2026 Joe
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
#!/bin/bash
# 打包 anything-to-notebooklm skill 用于分享
# 生成一个不包含大文件的精简版 tar.gz
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_NAME="anything-to-notebooklm"
OUTPUT_DIR="${1:-$HOME/Desktop}"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
OUTPUT_FILE="$OUTPUT_DIR/${SKILL_NAME}_${TIMESTAMP}.tar.gz"
# 颜色
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} 打包 ${SKILL_NAME} Skill${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# 要打包的文件列表
FILES=(
"SKILL.md"
"README.md"
"install.sh"
"check_env.py"
"requirements.txt"
".gitignore"
)
# 创建临时目录
TEMP_DIR=$(mktemp -d)
TEMP_SKILL="$TEMP_DIR/$SKILL_NAME"
mkdir -p "$TEMP_SKILL"
echo "📦 正在打包文件..."
# 复制文件
for file in "${FILES[@]}"; do
if [ -f "$SKILL_DIR/$file" ]; then
cp "$SKILL_DIR/$file" "$TEMP_SKILL/"
echo " ✓ $file"
fi
done
# 创建 tar.gz
cd "$TEMP_DIR"
tar -czf "$OUTPUT_FILE" "$SKILL_NAME"
# 清理
rm -rf "$TEMP_DIR"
# 显示结果
FILE_SIZE=$(du -h "$OUTPUT_FILE" | cut -f1)
echo ""
echo -e "${GREEN}✅ 打包完成!${NC}"
echo ""
echo "📦 文件:$OUTPUT_FILE"
echo "📊 大小:$FILE_SIZE"
echo ""
echo "📤 分享说明:"
echo " 用户收到文件后,执行:"
echo " cd ~/.claude/skills/"
echo " tar -xzf ${SKILL_NAME}_${TIMESTAMP}.tar.gz"
echo " cd ${SKILL_NAME}"
echo " ./install.sh"
echo ""
echo "💡 注意:wexin-read-mcp 会在安装时自动克隆,无需打包"
echo ""
<div align="center">
🎯 多源内容 → NotebookLM 智能处理器
一句话变播客、PPT、思维导图、Quiz...
      
</div>
---
✨ 这是什么?
一个 Claude Code Skill,让你用自然语言把任何内容变成任何格式。
你说:把这篇微信文章生成播客
AI :✅ 8 分钟播客已生成 → podcast.mp3
你说:这本 EPUB 电子书做成思维导图
AI :✅ 思维导图已生成 → mindmap.json
你说:这个 YouTube 视频做成 PPT
AI :✅ 25 页 PPT 已生成 → slides.pdf原理:自动从多种来源获取内容 → 上传到 Google NotebookLM → AI 生成你想要的格式
🚀 支持的内容源(15+ 种格式)
<table> <tr> <td width="50%">
📱 社交媒体
- 微信公众号(绕过反爬虫)
- YouTube 视频(自动提取字幕)
🌐 网页
- 任意网页(新闻、博客、文档)
- 搜索关键词(自动汇总结果)
📄 Office 文档
- Word (.docx)
- PowerPoint (.pptx)
- Excel (.xlsx)
</td> <td width="50%">
📚 电子书与文档
- PDF(支持扫描件 OCR)
- EPUB(电子书)
- Markdown (.md)
🖼️ 图片与音频
- 图片(JPEG/PNG/GIF,自动 OCR)
- 音频(WAV/MP3,自动转录)
📊 结构化数据
- CSV/JSON/XML
- ZIP 压缩包(批量处理)
</td> </tr> </table>
技术支持: Microsoft markitdown
🎨 可以生成什么?
| 输出格式 | 用途 | 生成时间 | 触发词示例 |
|---|---|---|---|
| 🎙️ 播客 | 通勤路上听 | 2-5 分钟 | "生成播客"、"做成音频" |
| 📊 PPT | 团队分享 | 1-3 分钟 | "做成PPT"、"生成幻灯片" |
| 🗺️ 思维导图 | 理清结构 | 1-2 分钟 | "画个思维导图"、"生成脑图" |
| 📝 Quiz | 自测掌握 | 1-2 分钟 | "生成Quiz"、"出题" |
| 🎬 视频 | 可视化 | 3-8 分钟 | "做个视频" |
| 📄 报告 | 深度分析 | 2-4 分钟 | "生成报告"、"写个总结" |
| 📈 信息图 | 数据可视化 | 2-3 分钟 | "做个信息图" |
| 📋 闪卡 | 记忆巩固 | 1-2 分钟 | "做成闪卡" |
完全自然语言,无需记命令!
⚡ 快速开始
前置需求
- ✅ Python 3.9+
- ✅ Git(macOS/Linux 自带)
就这两样! 其他依赖一键自动安装。
安装(3 步)
# 1. 克隆到 Claude skills 目录
cd ~/.claude/skills/
git clone https://github.com/joeseesun/anything-to-notebooklm
cd anything-to-notebooklm
# 2. 一键安装所有依赖
./install.sh
# 3. 按提示配置 MCP,然后重启 Claude Code首次使用
# NotebookLM 认证(只需一次)
notebooklm login
notebooklm list # 验证成功
# 环境检查(可选)
./check_env.py💡 使用示例
场景 1:快速学习 - 文章 → 播客
你:把这篇文章生成播客 https://mp.weixin.qq.com/s/abc123
AI 自动执行:
✓ 抓取微信文章内容
✓ 上传到 NotebookLM
✓ 生成播客(2-5 分钟)
✅ 结果:/tmp/article_podcast.mp3(8 分钟,12.3 MB)
💡 用途:通勤路上听完一篇深度文章场景 2:团队分享 - 电子书 → PPT
你:这本书做成 PPT /Users/joe/Books/sapiens.epub
AI 自动执行:
✓ 提取电子书内容(15 万字)
✓ AI 精炼核心观点
✓ 生成专业 PPT
✅ 结果:/tmp/sapiens_slides.pdf(25 页,3.8 MB)
💡 用途:直接用于读书会分享场景 3:自测学习 - 视频 → Quiz
你:这个 YouTube 视频生成 Quiz https://youtube.com/watch?v=abc
AI 自动执行:
✓ 提取视频字幕
✓ AI 分析关键知识点
✓ 自动出题
✅ 结果:/tmp/video_quiz.md(15 道题,10 选择 + 5 简答)
💡 用途:检验学习效果场景 4:信息整合 - 多源 → 报告
你:把这些内容一起做成报告:
- https://example.com/article1
- https://youtube.com/watch?v=xyz
- /Users/joe/research.pdf
AI 自动执行:
✓ 汇总 3 个不同来源
✓ AI 整合分析
✓ 生成综合报告
✅ 结果:/tmp/multi_source_report.md(7 个章节,15.2 KB)
💡 用途:全面的主题研究报告场景 5:文档数字化 - 扫描件 → 文字
你:把这个扫描图片做成文档 /Users/joe/scan.jpg
AI 自动执行:
✓ OCR 识别图片中的文字
✓ 提取为纯文本
✓ 生成结构化文档
✅ 结果:/tmp/scan_document.txt(识别准确率 95%+)
💡 用途:扫描件数字化归档🎯 核心特性
🧠 智能识别
自动判断输入类型,无需手动指定
https://mp.weixin.qq.com/s/xxx → 微信公众号
https://youtube.com/watch?v=xxx → YouTube 视频
/path/to/file.epub → EPUB 电子书
"搜索 'AI 趋势'" → 搜索查询🚀 全自动处理
从获取到生成,一气呵成
输入 → 获取 → 转换 → 上传 → 生成 → 下载
︿________全自动________︿🌐 多源整合
支持混合多种内容源
文章 + 视频 + PDF + 搜索结果 → 综合报告🔒 本地优先
敏感内容本地处理
微信文章 → 本地 MCP 抓取 → 本地转换 → NotebookLM📦 技术架构
┌─────────────────────────────────────┐
│ 用户自然语言输入 │
│ "把这篇文章生成播客 https://..." │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Claude Code Skill │
│ • 智能识别内容源类型 │
│ • 自动调用对应工具 │
└──────────────┬──────────────────────┘
│
┌────────┴────────┐
│ │
▼ ▼
┌──────────┐ ┌─────────────┐
│ 微信公众号 │ │ 其他格式 │
│ MCP 抓取 │ │ markitdown │
└─────┬────┘ └──────┬──────┘
│ │
└────────┬────────┘
│
▼
┌─────────────────────────────────────┐
│ NotebookLM API │
│ • 上传内容源 │
│ • AI 生成目标格式 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 生成的文件 │
│ .mp3 / .pdf / .json / .md │
└─────────────────────────────────────┘🔧 高级用法
指定已有 Notebook
把这篇文章加到我的【AI研究】笔记本 https://example.com批量处理
把这些文章都生成播客:
1. https://mp.weixin.qq.com/s/abc123
2. https://example.com/article2
3. /Users/joe/notes.mdZIP 批量转换
把这个压缩包里的所有文档做成播客 /path/to/files.zip自动解压、识别、转换、合并
🐛 故障排查
MCP 工具未找到
# 测试 MCP 服务器
python ~/.claude/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py
# 重新安装依赖
cd ~/.claude/skills/anything-to-notebooklm/wexin-read-mcp
pip install -r requirements.txt
playwright install chromiumNotebookLM 认证失败
notebooklm login # 重新登录
notebooklm list # 验证环境检查
./check_env.py # 13 项全面检查
./install.sh # 重新安装🤝 贡献
欢迎 PR、Issue、建议!
❓ 常见问题
<details> <summary><b>Q: 支持哪些语言?</b></summary>
A: NotebookLM 支持多语言,中文、英文效果最佳。 </details>
<details> <summary><b>Q: 播客是谁的声音?</b></summary>
A: Google AI 语音合成。英文是两个 AI 主持人对话,中文是单人叙述。 </details>
<details> <summary><b>Q: 内容长度限制?</b></summary>
A:
- 最短:约 500 字
- 最长:约 50 万字
- 推荐:1000-10000 字效果最佳
</details>
<details> <summary><b>Q: 可以商用吗?</b></summary>
A:
- 本 Skill:MIT 开源,可自由使用
- 生成内容:遵守 NotebookLM 服务条款
- 原始内容:遵守原内容版权
- 建议:仅用于个人学习研究
</details>
<details> <summary><b>Q: 为什么需要 MCP?</b></summary>
A: 微信公众号有反爬虫,MCP 用浏览器模拟绕过。其他内容源(网页、YouTube、PDF)不需要 MCP。 </details>
📄 许可证
MIT License
🙏 致谢
- Google NotebookLM - AI 内容生成
- Microsoft markitdown - 文件转换
- wexin-read-mcp - 微信抓取
- notebooklm-py - NotebookLM CLI
📮 联系
- Issues: GitHub Issues
- Discussions: GitHub Discussions
---
<div align="center">
如果觉得有用,请给个 ⭐ Star!
Made with ❤️ by Joe
</div>
# Core MCP dependencies
fastmcp>=0.1.0
playwright>=1.40.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
# File format conversion
markitdown>=0.0.1
# NotebookLM (will be installed from PyPI if available, or from git)
# notebooklm-py