A React PWA + Python FastAPI bridge that lets you export your NotebookLM notebooks and study them completely offline — including quizzes, flashcards, notes, mind maps, reports, and chat history.
Unofficial tool. Uses
notebooklm-pyunder the hood.
Your Google session is stored locally only and never leaves your machine.
| Feature | Description |
|---|---|
| 📥 Sync | Pull a full notebook bundle from NotebookLM via local API server |
| 📂 Import | Load a previously-exported JSON bundle without the server |
| 📚 Library | Browse all synced entries with full-text search |
| 🃏 Flashcards | Flip-card study mode with known/unknown tracking |
| 🧠 Quiz | Multiple-choice quiz with scoring and answer review |
| 📝 Notes | View notebook notes side-by-side |
| 🗺️ Mind Map | Collapsible JSON tree viewer for mind map data |
| 📄 Reports | Rendered markdown reports with raw/preview toggle |
| 💬 Chat History | Searchable Q&A conversation thread |
| Home | Import |
|---|---|
![]() |
![]() |
| Library | Flashcards |
|---|---|
![]() |
![]() |
| Quiz | Notes |
|---|---|
![]() |
![]() |
| Mind Map | Reports | Chat |
|---|---|---|
![]() |
![]() |
![]() |
- macOS / Linux
- Python 3.10+
- Node.js 18+
- Google Chrome (for auth capture)
cd scripts
chmod +x setup.sh && ./setup.shThis will:
- Create a Python venv and install dependencies
- Launch Chrome so you can log in to your Google account
- Save
scripts/storage_state.json(local only, gitignored)
cd scripts && source .venv/bin/activate
pip install git+https://github.com/teng-lin/notebooklm-py.gitcd scripts && source .venv/bin/activate && python3 server.pyServer runs on http://127.0.0.1:8765 (local only).
npm install
npm run devOpen http://localhost:5173 → Sync → enter your notebook ID.
Your notebook ID is the UUID in the NotebookLM URL:
https://notebooklm.google.com/notebook/0af122fb-9d20-4715-9a88-308fdc0d65df
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cd scripts && source .venv/bin/activate
python3 extract.py <NOTEBOOK_ID> --out ../imports --generateWrites imports/notebook-bundle-<title>.json which you can then import in the UI.
├── scripts/
│ ├── server.py # FastAPI bridge (127.0.0.1:8765)
│ ├── extract.py # CLI export tool
│ ├── capture_session.py # Auth capture via Playwright
│ ├── setup.sh # One-command setup
│ └── requirements.txt
├── src/
│ ├── features/ # Page components (sync, import, quiz, flashcards, …)
│ ├── lib/ # IndexedDB, sync client
│ ├── types/ # TypeScript types
│ └── styles/
├── imports/ # Drop exported JSON bundles here (gitignored)
└── vendor/ # notebooklm-py (install separately — see above)
storage_state.jsonis gitignored — it contains your Google session cookies.- The API server binds to
127.0.0.1only — never exposed to the network. - Exported bundles in
imports/are also gitignored.
This project would not be possible without notebooklm-py by @teng-lin — an unofficial async Python client for the NotebookLM API that handles all notebook, source, artifact, note, and chat interactions.
If you find this project useful, please consider starring their repo too.
MIT








