qiaomu-anything-to-notebooklm: a Claude Skill that feeds NotebookLM from 15+ source types
Claude Skill: Multi-source content processor for NotebookLM. Supports WeChat articles, web pages, YouTube, PDF, Markdown, search queries → Podcast/PPT/MindMap/Quiz etc.
At a glance
- What is it?
- This MIT-licensed Python skill sits in ~/.claude/skills and turns a natural-language instruction plus a URL or file path into a NotebookLM upload, with a six-level paywall bypass cascade in front of it. The interesting part is the cascade; the fragile part is everything it depends on outside the repository.
- Who is it for?
- Adopt this if you already live in Claude Code, already have a NotebookLM account, and your recurring job is dragging mixed sources (a WeChat post, a paywalled article, a podcast episode) into one notebook. Do not adopt it if you need unattended batch processing, if you cannot accept a Google account as the processing destination, or if you want a stable API contract rather than a skill whose behaviour changes when a publisher changes its markup.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 141 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The gap between a URL and a NotebookLM source
NotebookLM accepts documents. Getting a document out of a WeChat article, a paywalled news page, a YouTube video or an EPUB is a separate problem, and it is the problem this skill addresses. The README frames the pipeline as 多源内容获取(含付费墙绕过)→ 上传 Google NotebookLM → AI 生成目标格式: acquire content from many sources, including paywall bypass, upload it to NotebookLM, then let NotebookLM generate the target format. The skill is the acquisition half plus the upload. NotebookLM remains the generation half.
The intended user is someone who works inside Claude Code and wants to type a sentence rather than run a scraper. The README's examples are all conversational: 把这篇微信文章生成播客, 这个付费文章做成思维导图, 这期播客(小宇宙)做成 PPT. There is no batch mode described, no queue, no scheduler. This is an interactive tool for a person who is present and can correct the model when source detection goes wrong.
Source detection, then a tool call, then NotebookLM
The architecture diagram in the README is a fan-out. Natural-language input goes to the Claude Code Skill, which classifies the content source and dispatches to one of four backends: a WeChat MCP browser emulation, the paywall bypass cascade, podcast transcription through the Get笔记 API, and markitdown for file conversion. All four converge on a single upload step to NotebookLM.
Classification is pattern-based on the input string. The README lists the mappings explicitly: an mp.weixin.qq.com URL is a WeChat article, xiaoyuzhoufm.com/episode is a 小宇宙 podcast, x.com/user/status is an X/Twitter post, youtube.com/watch is a YouTube video, a .epub path is an EPUB, and a string beginning 搜索 is a search query. That is a small set of prefixes and extensions, not a content-type sniffer, so a URL shortener or a self-hosted mirror of one of these platforms will not be recognised.
For files, markitdown does the conversion, and the README claims coverage of PDF with scanned-document OCR, EPUB, Markdown, plain text, Word, PowerPoint, Excel, images with OCR, audio with transcription, and ZIP archives for batch handling. The README does not document how ZIP contents are ordered or reported, so treat that as unverified.
The six-level paywall cascade is the actual engineering
This is the part worth reading the repository for. The README describes a cascading strategy that tries six approaches in order and falls through on failure. Level 1 is a proxy service, r.jina.ai or defuddle.md. Level 2 sends a site-specific bot user agent, Googlebot for roughly 50 sites and Bingbot for about 4. Level 3 is generic: user-agent spoofing plus X-Forwarded-For plus Referer spoofing plus AMP pages plus an EU IP. Level 4 is archive.today, with CAPTCHA auto-detection. Level 5 is Google Cache. Level 6 is a local tool called agent-fetch.
The README attributes the techniques to Bypass Paywalls Clean and gives a coverage table: Googlebot UA with X-Forwarded-For at roughly 50 sites, Bingbot UA at roughly 4, cookie clearing with Referer spoofing against metered paywalls, AMP pages at roughly 10 sites, JSON-LD extraction for the articleBody field as a general method, and archive.today as the fallback. The named site list spans US, UK, German, French, Australian, Chinese and other outlets, including NYT, WSJ, FT, The Economist, Spiegel, Le Monde and SCMP.
Two things follow from this design. First, it is a best-effort cascade, not a guarantee: the README itself labels archive.today a 兜底方案, a fallback, which implies the earlier levels are expected to fail sometimes. Second, every level depends on a third party's current behaviour. Proxy services change their terms, publishers change their bot rules, Google Cache has been deprecated in many regions, and archive.today availability is uneven. A skill that works today can stop working without a commit to this repository.
Installation, authentication and the one environment variable that matters
The README states two prerequisites: Python 3.9 or later, and Git. Installation is three commands. Clone into the Claude skills directory, run the installer, then configure MCP and restart Claude Code:
cd ~/.claude/skills/ git clone https://github.com/joeseesun/qiaomu-anything-to-notebooklm cd qiaomu-anything-to-notebooklm ./install.sh
After that, NotebookLM authentication is a one-time step: notebooklm login, verified with notebooklm list. An optional environment check is ./check_env.py.
The optional transcription path needs two environment variables, GETNOTE_API_KEY and GETNOTE_CLIENT_ID, exported before use. The README ties these specifically to 小宇宙, 喜马拉雅 and B站 transcription and notes a 2-5 minute transcription time for a podcast episode. If you skip them, those three source types are unavailable and nothing else breaks.
The README says MCP configuration is done 按提示, following prompts, and does not print the resulting config. That is the weakest part of the setup documentation. If the MCP server entry is wrong, the WeChat path fails at runtime rather than at install time, and the error you see will come from Claude Code, not from this repository.
Where the skill is the wrong tool
The paywall bypass is the feature most likely to be misread as a general-purpose capability. It is not. It is a set of heuristics tuned against a named list of publishers, and the README's own coverage numbers are small: roughly 50 sites for the Googlebot approach, roughly 4 for Bingbot, roughly 10 for AMP. A site outside that list falls through to the generic levels and then to archive.today, which may have no snapshot. The README does not describe what happens when all six levels fail. There is no documented error contract.
Second, the skill assumes a Google account and an interactive NotebookLM session. Everything you feed it is uploaded to NotebookLM. For a paywalled article you have a personal subscription to, that may be fine; for internal documents, it is a decision the tool does not make for you and does not warn about.
Third, there is no batch or headless mode in the README. Every example is a single conversational request. If your workflow is 500 PDFs overnight, this is the wrong shape of tool, and the ZIP support described under file conversion is not documented well enough to change that judgement.
Fourth, the quality of the final artifact is NotebookLM's, not this project's. The README's example outputs, a 25-page PPT from a podcast or a 12-question analysis from an EPUB, are outputs of Google's product. This repository gets content in the door.
What it is not: a comparison with the underlying tools
The closest thing to an alternative is to skip the skill and drive the underlying components yourself. Bypass Paywalls Clean, which the README credits as the source of the bypass techniques, is a browser extension that applies those techniques inside your own browser session, using your own cookies and your own logged-in state. The difference in approach is not cosmetic. The extension runs where you are already authenticated, so metered paywalls you have legitimately consumed are handled by your existing session. This skill runs server-side-ish, spoofing user agents and forwarding headers, which is why it needs a cascade of fallbacks in the first place.
The second alternative is the plain toolchain: yt-dlp or a subtitle downloader for YouTube, markitdown directly for files, and the NotebookLM web interface for upload and generation. You lose the natural-language dispatch and the automatic paywall handling. You gain a pipeline you can script, log and retry, and whose failure modes you can read in your own code rather than infer from a skill's behaviour.
The third alternative, for paywalled reading specifically, is a library subscription or the publisher's own API. It is slower and it costs money, but it does not break when a publisher rotates its bot detection.
Maintenance cost and the MIT licence
The repository is MIT-licensed, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are retained. That is a permissive licence and it does not obligate you to publish changes. It also carries no warranty, which matters here because the bypass cascade is the kind of code that fails silently. Nothing in the licence gives you any right to the content you fetch; the README does not discuss the terms of service of the sites in its list, and that question is yours to resolve.
The maintenance picture is uneven. The code in this repository is small and stable. The dependencies are not. The bypass techniques track Bypass Paywalls Clean, which is an external project the maintainer does not control. The proxy services at Level 1 are third-party endpoints. Google Cache at Level 5 is a moving target. The Get笔记 API behind transcription is a separate service with its own key rotation. When something breaks, the failure will usually be outside this repository, and the fix will usually be an update to a list of user agents or a swapped proxy host.
Version history is short: v1.0.0 on 2026-01-25 and v1.0.1 the same day, the latter a rename to Anything to NotebookLM. That tells you the project is at the start of its life, and that the naming has already changed once. Pin to a commit if you depend on it.
Editorial conclusion
Adopt this if you already live in Claude Code, already have a NotebookLM account, and your recurring job is dragging mixed sources (a WeChat post, a paywalled article, a podcast episode) into one notebook. Do not adopt it if you need unattended batch processing, if you cannot accept a Google account as the processing destination, or if you want a stable API contract rather than a skill whose behaviour changes when a publisher changes its markup. Verify first that ./check_env.py passes, that notebooklm login and notebooklm list both succeed, and that GETNOTE_API_KEY is set if you intend to use the 小宇宙, 喜马拉雅 or B站 transcription paths, because those fail without it.
Community notes