Skip to content

Latest commit

Β 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


ResearchNotebookLM

Your Private AI Research Assistant

Better than Google NotebookLM. Runs 100% on your own machine.


Python Flask ChromaDB License License: MIT Version Platform


πŸ“„
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



πŸ“Έ Screenshots

Home Page
🏠 Home: projects, stats, sidebar clock
Research Chat
πŸ’¬ Research Chat: grounded AI answers
Settings
βš™οΈ Settings: AI engines, timezone, clock

πŸ’‘ Why ResearchNotebookLM?

"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

πŸ†š ResearchNLM vs Google NotebookLM

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)⚠️ Limited free tier
πŸ“ Unlimited projectsβœ… No limits⚠️ Capped
🌐 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 exposedN/A

✨ Features in Detail

πŸ€– AI-Grounded Chat

  • Answers come only from your uploaded documents
  • AI is explicitly forbidden from using training data or outside knowledge
  • Says "Not found in provided sources" if the answer is not there
  • Cites the source title for every fact

πŸ”— 12-Engine Fallback Chain

  • Providers are tried in order; if one fails, the next takes over automatically
  • Handles rate limits, outages, timeouts, and bad responses
  • Final fallback: local Ollama (works with no internet)
  • The system never stops mid-session

✨ Do More β€” AI Actions in Chat

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:

Action Output
πŸ“‹ Briefing Executive summary + key findings
🏷️ Key Themes 5+ themes with evidence per source
❓ FAQ 8 grounded questions & answers
πŸ“… Timeline Chronological events with dates
πŸ—Ί Mind Map Hierarchical text knowledge tree
❓ Quiz 10-question multiple-choice test
πŸƒ Flashcards 12 study cards β€” Term / Definition
πŸ“Š Knowledge Stats Concept scores, gaps, source overview

Type a keyword in chat (quiz, briefing, flashcard, timeline…) and it auto-expands to the full action β€” with your selected source scope applied.

πŸ“„ Multi-Source Ingestion

Type Engine
PDF Docling (OCR + tables) with pypdf fallback
Web URL Trafilatura (full article text)
YouTube yt-dlp (auto captions)
Text / Markdown Direct paste or file upload

πŸ“– Source Viewer

  • PDF button to read the original extracted text
  • MD button to view AI-converted Markdown (tables, headings preserved)
  • Opens in the left panel; the chat area stays full width

πŸ“ Notes System

  • Save any AI answer as a note in one click
  • Write your own manual notes
  • Click a note card to expand the full content
  • Notes persist between sessions, stored per project

πŸ” Smart Search

  • Searches project names and files inside projects
  • Results show file name and parent project
  • Click to navigate directly
  • Real-time as you type

πŸ• Sidebar Clock & Timezone

  • Live time and date displayed in the sidebar
  • Fully configurable timezone (25+ regions)
  • Gear icon links directly to Clock settings
  • Stored in your browser, per-user, no server needed

πŸ—‘οΈ Trash & Restore

  • Deleting a project moves it to Trash (not permanent)
  • Restore from Settings > Trash at any time
  • Permanently delete when you are sure
  • Project data fully preserved until permanent delete

πŸ“Š Workspace Stats

  • Home page shows total Projects, Sources, and Notes at a glance
  • Per-project source count shown in sidebar (not chunk count)
  • "How it works" guide shown for new users

πŸ“‹ Prerequisites

Nothing complex. You only need Python installed. Everything else is optional.

RequirementVersionRequired?Notes
Python3.10+βœ… Yespython.org/downloads
OllamaAny⭐ RecommendedLocal AI fallback. Get it at ollama.ai
OpenRouter keyn/aπŸ’‘ OptionalFree tier available, with much better AI quality
NVIDIA NIM keyn/aπŸ’‘ OptionalFree GPU inference. See build.nvidia.com
RAM4 GB minβœ… Yes8 GB recommended for large PDFs
Disk~3 GBβœ… Yes~2 GB for local AI model + your documents

πŸš€ Quick Start

⚑ Windows: One Click

Step 1 β”‚ Download this repo
       β”‚ Click green "Code" button > Download ZIP
       β”‚ Extract to any folder

Step 2 β”‚ Double-click  install.bat
       β”‚ Installs Python packages + Ollama
       β”‚ (takes ~5 min on first run)

Step 3 β”‚ Double-click  start.bat
       β”‚ Browser opens automatically

Step 4 β”‚ Open  http://localhost:8080
       β”‚ You're ready to research πŸŽ‰

That's it.

No Docker.
No cloud account.
No terminal needed.

Just double-click and go.

πŸ“– Full Setup Guide β†’ SETUP.md
Step-by-step for non-technical users


πŸ› οΈ Manual Install (All Platforms)

πŸͺŸ 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.py

Then 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.py

Then 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.py

Then 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.


πŸ”‘ Getting Free API Keys

The app works with Ollama only, no keys needed. But free cloud keys give significantly better AI quality.

OpenRouter

50+ free models (Gemini, Llama, Qwen, etc.)

  1. Go to openrouter.ai and sign up
  2. Dashboard > Keys > Create Key
  3. Copy the key (sk-or-...)
  4. App > Settings > AI Engines > paste key

Free tier includes Gemini 2.5 Flash, Llama 3, Qwen and more

NVIDIA NIM

Free GPU inference, no credit card needed

  1. Go to build.nvidia.com and sign up
  2. Click Get API Key
  3. Copy the key (nvapi-...)
  4. App > Settings > AI Engines > paste key

Free tier includes DeepSeek, Gemma, GLM, MiniMax and more


πŸ—οΈ How It Works

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                    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

βš™οΈ Settings & Configuration

In-App Settings

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

Configuring AI Providers (data/providers.json)

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.


πŸ“ Where to Update for New Versions

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.bat

πŸ“ Project Structure

ResearchNotebookLM/
β”‚
β”œβ”€β”€ πŸ“„ 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)

πŸ”’ Security

Protections Built In

Threat How It's Handled
πŸ“ Path traversal on upload secure_filename() strips ../ from all filenames
🦠 Malicious file types Whitelist: only .pdf .txt .md accepted
πŸ’Ύ Oversized uploads Hard 100 MB limit
πŸ”‘ API key theft Keys masked in browser (sk-ab***cdef); the raw key is never sent to the frontend
πŸ’‰ Meta injection Project metadata endpoint whitelists allowed keys only
πŸ—‚οΈ Trash path traversal Path validated against trash directory before any operation
πŸ€– AI hallucination System prompt explicitly forbids outside knowledge and training data
πŸ’₯ All providers fail Caught and returns a clean 503 error instead of crashing Flask

Data Privacy

βœ…  Projects stored on your disk
βœ…  Vector DB runs locally (ChromaDB)
βœ…  API keys never committed to git
βœ…  data/providers.json in .gitignore
βœ…  Masked keys in Settings UI
βœ…  No telemetry, no analytics
βœ…  No accounts required

Running Publicly (e.g. behind Cloudflare Tunnel)

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.


πŸ—ΊοΈ Roadmap

βœ… Shipped

  • 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

πŸ”œ Coming Next

  • 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

πŸ“… Changelog

v3.0 (June 2026)

  • 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

v2.2 (June 2026)

  • 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

v2.1 (June 2026)

  • 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

v2.0 (May 2026) - Initial public release

  • 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

πŸ› οΈ Troubleshooting

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 model

🀝 Contributing

Contributions 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-idea

Found a bug? Open an Issue with steps to reproduce.


πŸ“œ License (MIT) & Apache 2.0

  • 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 With

Flask ChromaDB Docling
Ollama marked.js Trafilatura


Built by Pavel Blank


If this project helps your research, give it a star. It helps other researchers find it.


Star

About

πŸ”¬ Private AI research assistant like Google NotebookLM but 100% local. Upload PDFs, URLs & YouTube. Ask questions grounded in your sources. 12-provider AI fallback. Works offline.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages