Better than Google NotebookLM. Runs 100% on your own machine.
| π Upload PDFs URLs & YouTube too |
π¬ Ask Questions AI answers from your docs |
π 100% Private Zero data leaves your PC |
π 12 AI Engines Never goes offline |
No Docker. No cloud account. No subscription. No data upload. Everything runs on your machine, even the AI.
π Quick Start Β· β¨ Features Β· π Prerequisites Β· βοΈ Settings Β· π Security Β· π Structure
![]() π Home: projects, stats, sidebar clock |
![]() π¬ Research Chat: grounded AI answers |
![]() βοΈ Settings: AI engines, timezone, clock |
"I was doing serious research: 30+ papers, 3 projects. Google NotebookLM was uploading everything to Google's servers. I wanted the same power, but private, free, and mine."
- Pavel Blank, creator
The problem with cloud research tools:
- π€ Your documents leave your machine the moment you upload them
- π You're locked to one AI. Google only offers Gemini, nothing else
- πΈ Free tiers run out when you actually need them
- πΆ Requires constant internet. No wifi, no research
- π’ Their servers, their rules. What happens to your data?
ResearchNotebookLM is the answer:
- β PDFs, notes, and chat history never leave your disk
- β 12 AI engines: OpenRouter, NVIDIA, DeepSeek, Gemma, or run 100% offline with Ollama
- β No subscription, no limits, no account required
- β Works on a plane, in a hospital, in a lab with no internet required
- β Open source, so you can audit every line and change anything
| Feature | ResearchNotebookLM | Google NotebookLM |
|---|---|---|
| π Your data stays on your machine | β Always | β Uploaded to Google |
| π€ Choose your AI model | β 12 providers + local Ollama | β Gemini only |
| π° Free to use | β Free (use your own keys) | |
| π Unlimited projects | β No limits | |
| π Works offline | β Ollama local fallback | β Needs internet |
| π§ Self-hostable | β Your server | β Google's cloud |
| π Notes system | β Built-in, expandable cards | β Built-in |
| π₯ YouTube ingestion | β Auto captions via yt-dlp | β Yes |
| π Sidebar clock & timezone | β Configurable | β No |
| π Cross-project file search | β Search files across all projects | β Per-notebook only |
| π‘οΈ API key security | β Masked in browser, never exposed | N/A |
|
|
||||||||||||||||||||||||||||
|
Select one or more sources, then click any action β results appear instantly in Research Chat. Works from the right panel or the mobile bottom sheet:
|
|
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
|
Nothing complex. You only need Python installed. Everything else is optional.
| Requirement | Version | Required? | Notes |
|---|---|---|---|
| Python | 3.10+ | β Yes | python.org/downloads |
| Ollama | Any | β Recommended | Local AI fallback. Get it at ollama.ai |
| OpenRouter key | n/a | π‘ Optional | Free tier available, with much better AI quality |
| NVIDIA NIM key | n/a | π‘ Optional | Free GPU inference. See build.nvidia.com |
| RAM | 4 GB min | β Yes | 8 GB recommended for large PDFs |
| Disk | ~3 GB | β Yes | ~2 GB for local AI model + your documents |
|
That's it. |
πͺ Windows: Step by Step
# 1. Clone the repo
git clone https://github.com/pavelblank/ResearchNotebookLM.git
cd ResearchNotebookLM
# 2. Install Python packages
pip install -r requirements.txt
# 3. Install Ollama (local AI)
winget install Ollama.Ollama
# 4. Pull a local model (~2 GB)
ollama pull qwen2.5:3b
# 5. Copy config files
copy .env.example .env
copy data\providers.example.json data\providers.json
# 6. Run
python webapp\app.pyThen open: http://localhost:8080
π macOS: Step by Step
# 1. Clone the repo
git clone https://github.com/pavelblank/ResearchNotebookLM.git
cd ResearchNotebookLM
# 2. Install Python packages
pip3 install -r requirements.txt
# 3. Install Ollama
brew install ollama
# 4. Pull a local model (~2 GB)
ollama pull qwen2.5:3b
# 5. Copy config files
cp .env.example .env
cp data/providers.example.json data/providers.json
# 6. Run
ollama serve &
python3 webapp/app.pyThen open: http://localhost:8080
π§ Linux: Step by Step
# 1. Clone the repo
git clone https://github.com/pavelblank/ResearchNotebookLM.git
cd ResearchNotebookLM
# 2. Install Python packages
pip3 install -r requirements.txt
# 3. Install Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# 4. Pull a local model (~2 GB)
ollama pull qwen2.5:3b
# 5. Copy config files
cp .env.example .env
cp data/providers.example.json data/providers.json
# 6. Run
ollama serve &
python3 webapp/app.pyThen open: http://localhost:8080
β οΈ First install note: Docling (PDF engine) downloads OCR models (~15 MB) on first PDF upload. This is a one-time download. All future uploads are fast.
The app works with Ollama only, no keys needed. But free cloud keys give significantly better AI quality.
|
50+ free models (Gemini, Llama, Qwen, etc.)
Free tier includes Gemini 2.5 Flash, Llama 3, Qwen and more |
Free GPU inference, no credit card needed
Free tier includes DeepSeek, Gemma, GLM, MiniMax and more |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β YOUR DOCUMENT COMES IN β
β β
β PDF βββΆ Docling (OCR + tables + headings) βββΆ Markdown β
β URL βββΆ Trafilatura (full article text) βββΆ Plain text β
β YouTube βΆ yt-dlp (auto captions) βββΆ Transcript β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β text chunks
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ChromaDB (local vector DB) β
β Text is split into chunks and stored as embeddings on disk β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
You ask a question
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Semantic Search (cosine similarity) β
β Top 8 most relevant chunks retrieved β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β source excerpts
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Fallback Chain β
β β
β 1. OpenRouter ββfailβββΆ 2. NVIDIA NIM ββfailβββΆ 3. ... β
β ββfailβββΆ Ollama β
β β
β Each failure is handled silently; next provider takes over β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
βΌ
Answer grounded strictly in YOUR source excerpts
AI cannot use internet, training data, or memory
Open the app and click βοΈ Settings in the sidebar.
| Section | What You Can Do |
|---|---|
| AI Engines | Add, remove, enable/disable, reorder providers |
| Clock & Timezone | Choose your local timezone for the sidebar clock |
| Deleted Projects | Restore or permanently delete from Trash |
Click to see full providers.json format
{
"providers": [
{
"id": "p1",
"name": "OR Gemini 2.5 Flash",
"description": "Often free on OpenRouter",
"url": "https://openrouter.ai/api/v1",
"model": "google/gemini-2.5-flash",
"api_key": "sk-or-YOUR_KEY_HERE",
"enabled": true
},
{
"id": "p2",
"name": "NV DeepSeek V4",
"description": "Free NVIDIA inference",
"url": "https://integrate.api.nvidia.com/v1",
"model": "deepseek-ai/deepseek-v4-flash",
"api_key": "nvapi-YOUR_KEY_HERE",
"enabled": true
},
{
"id": "p3",
"name": "Ollama Local",
"description": "No key needed, works offline",
"url": "http://localhost:11434",
"model": "qwen2.5:3b",
"api_key": "ollama",
"enabled": true,
"is_ollama": true
}
]
}Field reference:
| Field | Required | Description |
|---|---|---|
id |
β | Any unique string |
name |
β | Display name in UI |
url |
β | Base API URL (any OpenAI-compatible endpoint) |
model |
β | Model ID for this provider |
api_key |
β | Your key, or "ollama" for local |
enabled |
β | true to use, false to skip |
is_ollama |
optional | true only for local Ollama entries |
Any OpenAI-compatible API works: Groq, Together AI, Mistral, self-hosted vLLM, etc.
| What changed | File to update | Action needed |
|---|---|---|
| New Python package added | requirements.txt |
pip install -r requirements.txt |
| New AI provider available | data/providers.json |
Add via Settings > AI Engines |
| UI / template change | webapp/templates/*.html |
Browser refresh (auto-reloads) |
| Backend logic change | webapp/app.py or engine/*.py |
Restart: stop.bat then start.bat |
| New version released | Auto-updated | git pull origin main then restart |
# To update to latest version
git pull origin main
pip install -r requirements.txt
# Then restart start.batResearchNotebookLM/
β
βββ π README.md β You are here
βββ π requirements.txt β All Python dependencies
βββ π .env.example β Environment config template
βββ π LICENSE β Apache 2.0
βββ π LICENSE-MIT β MIT License
βββ π SETUP.md β Full non-technical setup guide
β
βββ πͺ install.bat β Windows one-click installer
βββ π install.ps1 β Windows PowerShell installer script
βββ βΆοΈ start.bat β Windows: start the app
βββ βΉοΈ stop.bat β Windows: stop the app
β
βββ π docs/
β βββ π screenshots/ β App screenshots (used in README)
β
βββ π webapp/ β Flask web application
β βββ π app.py β Main server (all routes + API endpoints)
β βββ π templates/ β HTML templates (Jinja2)
β βββ π base.html β Shared layout: sidebar, topbar, search, JS
β βββ π index.html β Home page with project list + stats
β βββ π notebook.html β Workspace: sources, chat, notes
β βββ π settings.html β AI engines, clock/timezone, trash
β
βββ π engine/ β AI and data processing core
β βββ π rag.py β Fallback chain + RAG query engine
β βββ π ingest.py β PDF / URL / YouTube to ChromaDB
β βββ π db.py β ChromaDB vector store manager
β
βββ π data/ β Auto-created on first run
βββ π providers.example.json β Copy to providers.json, then add your keys
βββ π chroma/ β Vector DB (your indexed documents)
βββ π projects/ β Projects, uploads, notes, chat history
βββ π trash/ β Soft-deleted projects (restorable)
|
|
If you expose the app online, add authentication at the edge. The app has no built-in login system:
Recommended: Cloudflare Access (Zero Trust) - free, easy, blocks all
unauthenticated access before it reaches your app
β οΈ Without edge auth, anyone who knows your URL can use the app and access Settings.
- 12-provider AI fallback chain
- PDF / URL / YouTube ingestion
- Notes system with expandable cards
- Cross-project file search
- API key masking (security)
- Trash & restore
- Sidebar clock & timezone settings
- Home page stats (projects / sources / notes)
- AI grounding (strictly source-only answers)
- Mind Map: interactive knowledge graph (vis.js)
- Quiz: auto-generated multiple-choice questions
- Flashcards: flip-card study deck with keyboard navigation
- Suggested Questions: auto-generates 5 research questions when a project opens
- Mac/Linux one-click install script (
install.sh) - Export session as PDF or Markdown
- Source deduplication on upload
- Dark/light theme toggle
- Do More panel: 8 one-click action buttons (Briefing, Themes, FAQ, Timeline, Mind Map, Quiz, Flashcards, Knowledge Stats) β all trigger rich AI responses in the Research Chat
- Research Chat as primary screen: all AI outputs β including structured quiz, flashcards, mind map, and knowledge analysis β appear inline in chat
- Quiz format: properly structured 10-question multiple-choice with answers and explanations
- Flashcards format: 12-card Term/Definition deck with source attribution
- Mind Map format: hierarchical text concept map with branches and subtopics
- Knowledge Stats: concept importance scores, overview, and knowledge gaps
- 12-hour clock (AM/PM) in sidebar and Settings
- Do More panel: default visible, hide/show button in panel header plus floating right-edge tab
- Responsive layout: mobile, tablet, and large screen CSS improvements; no overlapping elements
- Confirmation on chat clear: prevents accidental deletion
- MIT licence added alongside Apache 2.0
- Mind Map tab: vis.js force-directed knowledge graph extracted from your sources
- Quiz tab: AI-generated multiple-choice questions with scoring and explanations
- Flashcards tab: flip-card study deck with keyboard navigation (arrow keys + space to flip)
- Backend caching: graph, quiz, and flashcard results cached per project
- Security hardening: path traversal protection, file type whitelist, 100 MB upload limit, API key masking, trash path validation
- AI grounding strengthened: system prompt now explicitly forbids outside knowledge and training data
- Sidebar clock & timezone: live clock with configurable timezone (25+ regions)
- Home page stats strip: total projects, sources, and notes at a glance
- Smart Search: searches project names and files within projects in real time
- Source count fix: sidebar now shows real source file count, not ChromaDB chunk count
- Note cards: click to expand full content (was truncated to 300 chars)
- Model indicator: single status dot in topbar (green = active, red = unavailable)
- Settings: new Clock & Timezone tab added
- Flask web app with full project management
- 12-provider AI fallback chain with Ollama local fallback
- PDF / URL / YouTube ingestion pipeline
- ChromaDB vector search
- Do More AI actions (Briefing, Themes, FAQ, Timeline, Mind Map, Quiz, Flashcards, Knowledge Stats)
- Notes system, Trash & Restore
- Windows one-click installer
App won't start
# Check Python version (needs 3.10+)
python --version
# Reinstall packages
pip install -r requirements.txt
# Check if port is in use
netstat -ano | findstr :8080 # Windows
lsof -i :8080 # Mac/Linux"All AI engines unavailable" error
- Go to Settings > AI Engines. At least one provider must have
enabled: true - If using Ollama only: make sure it is running with
ollama serve - If using API keys: verify the keys are valid and the service is up
First PDF upload is slow (1-2 min)
This is normal. Docling downloads OCR models (~15 MB) once on first use. All future uploads are fast.
Sources disappeared after restart
Your data lives in the data/ folder. Never delete this folder.
If you moved the project folder, the ChromaDB path may be broken.
Run the app from the original install location.
Port 8080 already in use
# Windows
stop.bat
# or:
netstat -ano | findstr :8080
taskkill /PID <pid> /F
# Mac/Linux
kill $(lsof -t -i:8080)Ollama model not found
ollama list # see what's installed
ollama pull qwen2.5:3b # install the default modelContributions are welcome!
# 1. Fork this repo
# 2. Create your branch
git checkout -b feature/your-idea
# 3. Make changes & commit
git commit -m "add: your feature description"
# 4. Push and open a Pull Request
git push origin feature/your-ideaFound a bug? Open an Issue with steps to reproduce.
- MIT License β free to use, copy, modify, distribute, no conditions
- Apache 2.0 License β includes patent grant and attribution requirements
Copyright 2026 Pavel Blank. Dual-licensed β use whichever suits your project.
Built by Pavel Blank
If this project helps your research, give it a star. It helps other researchers find it.


