An open source, privacy-focused alternative to Google's Notebook LM!
Join our Discord server for help, to share workflow ideas, and suggest features!
Checkout our website »
📚 Get Started
·
📖 User Guide
·
✨ Features
·
🚀 Deploy

In a world dominated by Artificial Intelligence, having the ability to think 🧠 and acquire new knowledge 💡, is a skill that should not be a privilege for a few, nor restricted to a single provider.
Open Notebook empowers you to:
Learn more about our project at https://www.open-notebook.ai
If you're upgrading from a previous version, please note:
latest tag is now frozen at the last Streamlit versionv1-latest tag for the new React/Next.js version (recommended)New users: You can ignore this notice and proceed with the Quick Start below using the v1-latest-single tag.
| Feature | Open Notebook | Google Notebook LM | Advantage |
|---|---|---|---|
| Privacy & Control | Self-hosted, your data | Google cloud only | Complete data sovereignty |
| AI Provider Choice | 16+ providers (OpenAI, Anthropic, Ollama, LM Studio, etc.) | Google models only | Flexibility and cost optimization |
| Podcast Speakers | 1-4 speakers with custom profiles | 2 speakers only | Extreme flexibility |
| Context Control | 3 granular levels | All-or-nothing | Privacy and performance tuning |
| Content Transformations | Custom and built-in | Limited options | Unlimited processing power |
| API Access | Full REST API | No API | Complete automation |
| Deployment | Docker, cloud, or local | Google hosted only | Deploy anywhere |
| Citations | Comprehensive with sources | Basic references | Research integrity |
| Customization | Open source, fully customizable | Closed system | Unlimited extensibility |
| Cost | Pay only for AI usage | Monthly subscription + usage | Transparent and controllable |
Why Choose Open Notebook?
Docker Images Available:
lfnovo/open_notebook:v1-latest-singleghcr.io/lfnovo/open-notebook:v1-latest-singleBoth registries contain identical images - choose whichever you prefer!
|
Perfect if Docker runs on the same computer where you'll access Open Notebook.
Access at: http://localhost:8502 |
Use this for servers, Raspberry Pi, NAS, Proxmox, or any remote machine.
Replace Access at: http://YOUR_SERVER_IP:8502 |
⚠️ Critical Setup Notes:
Both ports are required:
- Port 8502: Web interface (what you see in your browser)
- Port 5055: API backend (required for the app to function)
API_URL must match how YOU access the server:
- ✅ Access via
http://192.168.1.100:8502→ setAPI_URL=http://192.168.1.100:5055- ✅ Access via
http://myserver.local:8502→ setAPI_URL=http://myserver.local:5055- ❌ Don't use
localhostfor remote servers - it won't work from other devices!
Create a docker-compose.yml file:
services:
open_notebook:
image: lfnovo/open_notebook:v1-latest-single
# Or use: ghcr.io/lfnovo/open-notebook:v1-latest-single
ports:
- "8502:8502" # Web UI
- "5055:5055" # API (required!)
environment:
- OPENAI_API_KEY=your_key_here
# For remote access, uncomment and set your server IP/domain:
# - API_URL=http://192.168.1.100:5055
# Database connection (required for single-container)
- SURREAL_URL=ws://localhost:8000/rpc
- SURREAL_USER=root
- SURREAL_PASSWORD=root
- SURREAL_NAMESPACE=open_notebook
- SURREAL_DATABASE=production
volumes:
- ./notebook_data:/app/data
- ./surreal_data:/mydata
restart: always
Start with: docker compose up -d
What gets created:
open-notebook/ ├── docker-compose.yml # Your configuration ├── notebook_data/ # Your notebooks and research content └── surreal_data/ # Database files
| Problem | Solution |
|---|---|
| "Unable to connect to server" | Set API_URL environment variable to match how you access the server (see remote setup above) |
| Blank page or errors | Ensure BOTH ports (8502 and 5055) are exposed in your docker command |
| Works on server but not from other computers | Don't use localhost in API_URL - use your server's actual IP address |
| "404" or "config endpoint" errors | Don't add /api to API_URL - use just http://your-ip:5055 |
| Still having issues? | Check our 5-minute troubleshooting guide or join Discord |
┌─────────────────────────────────────────────────────────┐ │ Your Browser │ │ Access: http://your-server-ip:8502 │ └────────────────┬────────────────────────────────────────┘ │ ▼ ┌───────────────┐ │ Port 8502 │ ← Next.js Frontend (what you see) │ Frontend │ Also proxies API requests internally! └───────┬───────┘ │ proxies /api/* requests ↓ ▼ ┌───────────────┐ │ Port 5055 │ ← FastAPI Backend (handles requests) │ API │ └───────┬───────┘ │ ▼ ┌───────────────┐ │ SurrealDB │ ← Database (internal, auto-configured) │ (Port 8000) │ └───────────────┘
Key Points:
/api/* requests to the backend, simplifying reverse proxy setupAPI_URL=http://your-server-ip:5055For development or customization:
git clone https://github.com/lfnovo/open-notebook
cd open-notebook
make start-all
Thanks to the Esperanto library, we support this providers out of the box!
| Provider | LLM Support | Embedding Support | Speech-to-Text | Text-to-Speech |
|---|---|---|---|---|
| OpenAI | ✅ | ✅ | ✅ | ✅ |
| Anthropic | ✅ | ❌ | ❌ | ❌ |
| Groq | ✅ | ❌ | ✅ | ❌ |
| Google (GenAI) | ✅ | ✅ | ❌ | ✅ |
| Vertex AI | ✅ | ✅ | ❌ | ✅ |
| Ollama | ✅ | ✅ | ❌ | ❌ |
| Perplexity | ✅ | ❌ | ❌ | ❌ |
| ElevenLabs | ❌ | ❌ | ✅ | ✅ |
| Azure OpenAI | ✅ | ✅ | ❌ | ❌ |
| Mistral | ✅ | ✅ | ❌ | ❌ |
| DeepSeek | ✅ | ❌ | ❌ | ❌ |
| Voyage | ❌ | ✅ | ❌ | ❌ |
| xAI | ✅ | ❌ | ❌ | ❌ |
| OpenRouter | ✅ | ❌ | ❌ | ❌ |
| OpenAI Compatible* | ✅ | ❌ | ❌ | ❌ |
*Supports LM Studio and any OpenAI-compatible endpoint
See the open issues for a full list of proposed features and known issues.
We welcome contributions! We're especially looking for help with:
Current Tech Stack: Python, FastAPI, Next.js, React, SurrealDB Future Roadmap: Real-time updates, enhanced async processing
See our Contributing Guide for detailed information on how to get started.
Open Notebook is MIT licensed. See the LICENSE file for details.
Luis Novo - @lfnovo
Community Support:
Open Notebook is built on the shoulders of amazing open-source projects: