Turn long PDFs into chunked NotebookLM workflows with Studio outputs
Project description
notebooklm-chunker
Turn long documents into smaller, heading-aware NotebookLM sources so reports, slide decks, quizzes, flashcards, and audio outputs stay more focused and useful.
Two interfaces, one core. The Desktop app provides a visual workflow. The CLI provides scriptable automation. Both use the same
nblmengine underneath.
- This page covers the Desktop app
- CLI.md covers the Python CLI
Desktop App
An Electron desktop client that wraps the nblm CLI into a full visual workflow — from PDF upload to NotebookLM Studio generation.
Features NotebookLM Doesn't Have
| Feature | Description |
|---|---|
| Heading-aware chunking | Splits documents at heading boundaries (H1, H2, etc.) instead of arbitrary page breaks, keeping each source semantically coherent |
| Bulk source upload | Upload dozens or hundreds of chunks to a single notebook in one operation with parallel processing |
| Bulk source delete | Select and delete multiple chunks at once from the catalog |
| Resume interrupted uploads | Sync tracks per-chunk status — come back tomorrow and only the remaining chunks get uploaded |
| Studio queue with retry | Queue reports, slides, quizzes, flashcards, or audio jobs across multiple sources. Failed jobs (including quota exhaustion) are detected and can be retried individually or in bulk |
| Studio filtering by type | Tab bar filters queue and generated outputs by studio type (report, slide deck, quiz, flashcards, audio) with search |
| Prompt library | Save reusable prompts per studio type and apply them from the queue builder |
| Per-source settings | Configure language (80+ languages), format, length, and parallel request limits per studio type |
| Skip pages | Exclude preface, table of contents, index, or bibliography pages before chunking |
| Versioned lineages | Multiple chunk versions of the same PDF, each with independent sync and studio state |
| Offline-first | Chunk and edit locally without a network connection — sync when ready |
Installation
Prerequisites
- Install the Python CLI (needed by the desktop app):
pip install notebooklm-chunker
python -m playwright install chromium
- Login to NotebookLM:
nblm login
Option A: Download Release Binary
Download the latest release for your platform from GitHub Releases:
- macOS:
.dmgor.zip - Windows:
.exe(installer) or portable - Linux:
.AppImageor.deb
The desktop app expects nblm to be available on your system PATH.
Option B: Run From Source
cd desktop
npm install
npm run dev
Setup Check
On first launch, the app verifies:
nblmis available on PATH- Playwright Chromium is installed
- NotebookLM auth state is ready
You can continue into the app for local-only work even if auth is not ready yet.
Workflow
- Document — Upload a PDF to start a new chunk set
- Structure — Set min/max pages per chunk, skip pages from beginning or end, see estimated chunk count
- Sources — Review, search, edit, and bulk-manage the generated chunks
- Sync — Upload changed chunks to a new or existing NotebookLM notebook
- NotebookLM Dashboard — Browse notebooks, inspect synced sources, queue studio jobs, track outputs
NotebookLM Settings
Accessible from Settings in the sidebar:
- Sources tab — Per studio type: language (80+ languages), format, download format, max parallel requests
- Sync tab — Max parallel chunk uploads
Settings persist across sessions and are applied to all future queue items.
Studio Queue
The queue panel mirrors the Studios panel:
- Filter by studio type via tab bar (All, Report, Slide Deck, Quiz, Flashcards, Audio)
- Search jobs by name, source, status, or message
- Retry failed jobs individually or bulk retry all
- Clear submitted jobs when done
- Remove individual jobs from the queue
Quota exhaustion and zero-output runs are automatically detected as failures, enabling retry after the cooldown period.
Build
Platform-specific builds:
cd desktop
npm run build:mac # macOS (.dmg, .zip)
npm run build:win # Windows (.exe, portable)
npm run build:linux # Linux (.AppImage, .deb)
Project Layout
desktop/
├── renderer/
│ ├── app.js # Main UI logic
│ ├── index.html # UI structure
│ ├── styles.css # Styles
│ └── project-utils.js # Helper utilities
├── src/
│ ├── main.js # Electron main process
│ └── preload.js # IPC bridge
└── tests/
└── project-utils.test.js
CLI
The Python CLI is the automation engine. It handles document parsing, heading-aware chunking, NotebookLM uploads, and Studio generation.
For full CLI documentation, installation, config examples, and usage:
Quick start:
pip install notebooklm-chunker
python -m playwright install chromium
nblm login
nblm run --config ./nblm.toml
Development
For setup, testing, packaging, and GitHub release flow, see DEVELOPMENT.md.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file notebooklm_chunker-0.4.1.tar.gz.
File metadata
- Download URL: notebooklm_chunker-0.4.1.tar.gz
- Upload date:
- Size: 64.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
493ead62150b87318eb69179a9d7d65e0207da9479d84d5117c40252cc6e7c71
|
|
| MD5 |
a75d7c8bcbafb13ef4aba221ed108132
|
|
| BLAKE2b-256 |
b0eaee1f29f2756c7f916da67741e5c8c2eeaf5d16d9e9b32906b50db36ee5aa
|
Provenance
The following attestation bundles were made for notebooklm_chunker-0.4.1.tar.gz:
Publisher:
publish.yml on cmlonder/notebooklm-chunker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notebooklm_chunker-0.4.1.tar.gz -
Subject digest:
493ead62150b87318eb69179a9d7d65e0207da9479d84d5117c40252cc6e7c71 - Sigstore transparency entry: 1105217603
- Sigstore integration time:
-
Permalink:
cmlonder/notebooklm-chunker@a7c322fa8f2e07746cd1317cc8814ea4293f53f8 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/cmlonder
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a7c322fa8f2e07746cd1317cc8814ea4293f53f8 -
Trigger Event:
release
-
Statement type:
File details
Details for the file notebooklm_chunker-0.4.1-py3-none-any.whl.
File metadata
- Download URL: notebooklm_chunker-0.4.1-py3-none-any.whl
- Upload date:
- Size: 49.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84c53dcad03f58114957f69c29152159f095d49541440d016eea65455e215e0d
|
|
| MD5 |
853a59c2af5ddb63f2c3cd63291638a0
|
|
| BLAKE2b-256 |
2b0b471b35449d8ea1fdbdc78b7872e46d0b1ea761b70ef698135957c82eeeda
|
Provenance
The following attestation bundles were made for notebooklm_chunker-0.4.1-py3-none-any.whl:
Publisher:
publish.yml on cmlonder/notebooklm-chunker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notebooklm_chunker-0.4.1-py3-none-any.whl -
Subject digest:
84c53dcad03f58114957f69c29152159f095d49541440d016eea65455e215e0d - Sigstore transparency entry: 1105217698
- Sigstore integration time:
-
Permalink:
cmlonder/notebooklm-chunker@a7c322fa8f2e07746cd1317cc8814ea4293f53f8 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/cmlonder
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a7c322fa8f2e07746cd1317cc8814ea4293f53f8 -
Trigger Event:
release
-
Statement type: