启动前必须把 docker-compose.yml 里的 OPEN_NOTEBOOK_ENCRYPTION_KEY 改成自己生成的长随机密钥;UI 8502 与 API 5055 默认监听所有网卡且无密码,共享网络下需改绑 127.0.0.1 或设置 OPEN_NOTEBOOK_PASSWORD;API key 或本地模型地址要在 UI 的 Models 页面添加,不是写在配置文件里。
open-notebook
lfnovoMIT活跃维护开源自托管的 Notebook LM 替代品,能上传资料让 AI 帮你整理笔记、生成摘要和问答,比原版更灵活、功能更多。
An Open Source implementation of Notebook LM with more flexibility and features
mkdir open-notebook && cd open-notebook
curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml
docker compose up -dREADME 未说明具体显存或 GPU 型号要求;官方推荐用 Docker 部署,本地模型可接 Ollama、LM Studio 等自行运行。
自托管开源版 Notebook LM,支持多模型接入,让研究资料与对话完全留在本地
开源自托管的 Notebook LM 替代品,能上传资料让 AI 帮你整理笔记、生成摘要和问答,比原版更灵活、功能更多。
核心能力
- 接入 20+ AI 提供商,含 Ollama、LM Studio、vLLM 等本地服务
- 统一管理 PDF、视频、音频、网页等多模态来源
- 支持 1-4 位说话人自定义播客生成
- 提供全文与向量双路检索,跨全部内容搜索
- 问答结果标注所引用的来源、笔记与洞察
容易踩的坑
- v1.15.1v1.15.1 — security release最新正式版2026-11-04 · 2026-11-04 14:19 UTC
Security release — we recommend all users upgrade. v1.15.1 closes gaps in how sources are processed and requires content-core 2.2.1, which hardens URL fetching. It also ships the documentation rewrite and a handful of small fixes. Validated with the backend and frontend suites and a hands-on pass over the published 1.15.1 image.
🔒 Security
- Source processing now enforces the uploads-directory and URL checks in the background worker itself, so they apply on every path that processes a source, not only when a source is created.
- Requires
content-core2.2.1 or later, which refuses link-local and cloud-metadata addresses on every redirect hop when fetching URLs. POST /api/commands/jobs, the generic "submit any background command" endpoint, is removed. Nothing in Open Notebook used it; every operation has its own endpoint. Job status (GET /api/commands/jobs/{job_id}) is unchanged.
Security advisories with the details will be published on this repository.
📚 Documentation
Every page under
docs/was checked against v1.15.0 and rewritten where it described an older or imagined product (#1458, #1459, #1460, #1461): one canonical install path built on the shippeddocker-compose.yml, a first-run flow that ends in a working chat, a complete environment-variable reference, troubleshooting keyed on the exact error messages the app shows, and development docs rewritten from the code.🐛 Notable fixes
- Timeouts no longer read as connection failures: a model that doesn't answer within
ESPERANTO_LLM_TIMEOUTnow says the provider took too long and how to raise the limit - Error hints point to screens that exist (Manage → Models, Podcasts → Profiles) (#1457)
- Italian is selectable in the language menu, with dates formatted in Italian (#1457)
make start-allstarts SurrealDB again; the legacySURREAL_ADDRESS/SURREAL_PORTfallback builds a valid database URL (#1457)- Docs no longer recommend settings that do nothing (
API_CLIENT_TIMEOUT, editing.envplusdocker compose restart) (#1456)
⚠️ Behavior changes for self-hosters
- Anything that called
POST /api/commands/jobsdirectly will now get405 Method Not Allowed. Use the specific endpoints (for examplePOST /api/sources) instead. - A source whose file is outside the uploads directory, or whose URL targets a link-local or cloud-metadata address, now fails with a permanent error instead of being processed. Private and loopback addresses (Ollama, LM Studio, other local services) are still allowed.
Full changelog: https://github.com/lfnovo/open-notebook/compare/v1.15.0...v1.15.1
- v1.15.0v1.15.0 — Quiet Green, new providers and sturdier ingestion2026-10-04 · 2026-10-04 23:45 UTC
查看更新说明
We recommend all users upgrade. v1.15.0 brings the new "Quiet Green" visual identity, three new provider options (SiliconFlow, Z.ai, MiniMax text-to-speech), and the latest Esperanto, content-core and podcast-creator releases. Behind them is a long list of fixes to failures that used to be silent: podcasts that never appeared, sources stuck as "Processing...", workers that stalled, answers cut short. Validated through the full release process: backend and frontend suites, a fresh-install and an upgrade-from-1.14.0 test against the published images, and an end-to-end pass over the running app (API and UI), including podcasts on OpenAI, Anthropic, Gemini and DeepSeek.
🔒 Security
- Credential encryption now uses PBKDF2-HMAC-SHA256 (600k iterations) with versioned ciphertext. New keys are written in the new
pbkdf2v1:format, and existing keys keep decrypting. A one-shotPOST /api/credentials/migrate-encryptionupgrades stored keys (idempotent, fail-closed per record). See the downgrade note below (#1317, #1360) - Dependency security update:
next16.3.8 (critical RCE advisory innext/og; Open Notebook doesn't usenext/og),axios,postcss,brace-expansion, and Pythonanyio,pyjwt,tornado,urllib3,virtualenv. Security floors are now pinned so a future lock can't resolve back to vulnerable versions (#1404, #1414) - The
pillowoverride is gone: podcast-creator no longer pulls in moviepy, and content-core now requirespillow >= 12.3.0itself (#1440)
✨ New features
- "Quiet Green" visual identity. A new design foundation co-designed with the community in Discussion #1202 (a token system for color, type, radius and shadow; Bricolage Grotesque, Instrument Sans and Spline Sans Mono), applied screen by screen: app shell, notebook workspace, sources library, dialogs, models, settings, podcasts and search. Works in light and dark themes (#1202)
- New providers: SiliconFlow (hosted DeepSeek, Qwen, GLM and Kimi; mainland-China accounts set the credential's Base URL to
https://api.siliconflow.cn/v1) and Z.ai (the GLM family), both with connection test and model discovery (#1409, #1437) - MiniMax text-to-speech. MiniMax voices can now be used in podcast speaker profiles (
speech-2.8-hd,speech-2.8-turbo), and MiniMax moves toMiniMax-M3with a 1M-token context. Region-specific keys can setMINIMAX_BASE_URL/ the credential Base URL (#1438) - OpenDocument uploads:
.odt,.ods(one table per sheet) and.odp(one block per slide), plus.htmfiles (#1439) - YouTube when YouTube blocks your server: set
CCORE_YOUTUBE_PROXY(a residential proxy) orCCORE_YOUTUBE_COOKIES_FILE(a browsercookies.txt) on the worker to get transcripts through.CCORE_AUDIO_SEGMENT_MINUTEScontrols how long audio is split before transcription (#1439) - Podcasts in your language again: episode profiles'
languagesetting is honored for outlines and transcripts (#1334) - Podcasts sound more natural, with a short (~400 ms) pause between speaker turns, and audio combining no longer cuts off the end of a turn (#1446)
- Podcast failures now explain themselves: a wrong speaker name, a voice the TTS model doesn't support, or a truncated response each get a specific hint (#1334)
- The search page explains what text and vector search each cover; a "New Source" button sits on the empty sources state; the "API Keys" settings page is now "Models" (#1295, #1165, #1313)
🐛 Notable fixes
- Podcasts work on a fresh install. The seeded speaker profiles ship without a voice model, and any unconfigured profile used to fail every podcast with
validation errors for SpeakerConfig, even one generated with a fully configured profile (#1450) - Podcasts work with models that don't support JSON schema output (DeepSeek, older vLLM / llama.cpp servers). Outlines and transcripts use schema-validated output and fall back to plain JSON when an endpoint rejects it. Prompts no longer show
- Credential encryption now uses PBKDF2-HMAC-SHA256 (600k iterations) with versioned ciphertext. New keys are written in the new
- v1.14.0v1.14.0 — New Providers & Hardened Provider Connections2026-07-21 · 2026-07-21 02:09 UTC
查看更新说明
We recommend all users upgrade. v1.14.0 is a providers-and-plumbing release: six new ways to connect models, a DNS-rebinding hardening pass on every outbound provider call, and fixes to two failure modes that could silently break a working install after a redeploy. Validated through the full release process — backend/frontend suites, a fresh-install and an upgrade test against real Docker images, and an end-to-end pass over the running app.
🔒 Security hardening
- Outbound provider requests are now pinned to a DNS-vetted IP. Validating a URL and then handing it to the HTTP client left a rebinding window: the hostname was resolved again at connect time, so a name that passed validation could point at a cloud metadata endpoint on the actual connection. Resolution now happens once, dangerous addresses are rejected, and the request is pinned to the vetted address while
Hostand TLS SNI keep the original hostname — so certificate verification and routing are unaffected. Applied to credential saves, connection tests and model discovery (#1063) - Private IPs,
localhost,host.docker.internal, LAN hostnames and Tailscale addresses remain fully supported — this is a self-hosted application and local providers are a first-class use case. That guarantee is now pinned by regression tests rather than left implicit (#1193) - Error text returned by the sources API is capped, so internal exception detail from extraction libraries no longer reaches clients (#1136)
- Resolved all open Dependabot alerts:
mcp→ 1.28.1 (3 high, transitive via content-core) andaxios→ 1.18.1 (#1191)
✨ New features
- Four new AI providers: Cohere (language + embedding via its native v2 API), PayPerQ / PPQ (multi-modality gateway — language, embedding, STT, TTS), Novita (OpenAI-compatible LLM gateway), and speech-to-text on the existing Deepgram provider (#1170)
- oMLX as a first-class provider — native Esperanto profile, default base URL
http://localhost:11435/v1, connection test and model discovery, no remapping toopenai-compatible(#1048) - OpenRouter now does text-to-speech and speech-to-text, not just LLMs and embeddings. Note that its TTS model uses Microsoft neural voice names (e.g.
en-US-AvaNeural), not OpenAI'salloy/novaset (#987) anthropic_compatiblecredential provider for endpoints that speak only the Anthropic Messages format, such as Kimi (#675)- Docling formula & vision enrichment toggles in Settings → Content Processing — extract mathematical formulas as structured markup, and describe images / extract chart data with a vision model. Both opt-in and off by default; vision is significantly slower (#1131)
- Worker concurrency is configurable via
OPEN_NOTEBOOK_WORKER_MAX_TASKS(default 5). Set it to 1 on single-GPU or local-LLM setups that were being overloaded by parallel source processing (#893) - Newer ElevenLabs models in discovery —
eleven_v3,eleven_flash_v2_5,eleven_flash_v2, andscribe_v2for STT (#1167) - Podcast episode profiles expose an optional "Max output tokens" field in the UI, with help text explaining it caps output per generation step (outline + transcript) and defaults to the built-in values when blank (#991)
⚡ Performance
- Typing in the chat composer no longer lags in long conversations. Composer state is isolated from the message list and each row is memoized, so a keystroke no longer re-renders the whole history. Most noticeable for IME users (Japanese, Chinese, Korean), where every composition event was triggering a full re-render (#1147)
🐛 Notable fixes
- A selected content-processing engine whose runtime isn't installed no longer breaks ingestion silently. The engine choice lives in the database; the opt-in runtimes that serve it come from environment flags. A redeploy that drops
OPEN_NOTEBOOK_ENABLE_CRAWL4AI/_DOCLINGtherefore left the setting pointing at nothing, and every extraction failed with an u
- Outbound provider requests are now pinned to a DNS-vetted IP. Validating a URL and then handing it to the HTTP client left a rebinding window: the hostname was resolved again at connect time, so a name that passed validation could point at a cloud metadata endpoint on the actual connection. Resolution now happens once, dangerous addresses are rejected, and the request is pinned to the vetted address while
- v1.13.0v1.13.0 — Content Core 2.0: Our Biggest Content-Processing Upgrade2026-07-14 · 2026-07-14 09:56 UTC
查看更新说明
We recommend all users upgrade. v1.13.0 is our biggest content-processing upgrade yet: it rebuilds extraction on top of Content Core 2.0 (a major architecture release), adds opt-in Docling (OCR + layout-aware parsing) and Crawl4AI (JavaScript rendering) engines, brings EPUB and Reddit support, moves PDF extraction to MIT-licensed pdfplumber, fixes audio extraction, and keeps the default image lean by making the heavy runtimes opt-in. Plus a batch of podcast correctness fixes. Validated with the release confidence process: full backend/frontend suites, the fresh-install + upgrade image gate, and manual verification of the opt-in runtimes, real podcast/TTS and PDF extraction on the pushed image.
✨ A major content-processing upgrade (Content Core 2.0)
Extraction now runs on content-core 2.x — a ground-up refactor of the extraction stack. What it means for you:
- Docling document engine (opt-in) — real OCR for scanned PDFs and images plus layout-aware parsing. Toggle OCR in Settings → Content Processing (on by default; turn it off to speed up text-native docs). (#1104)
- Crawl4AI URL engine (opt-in) — renders JavaScript-heavy pages locally with no API key, or offloads to a Crawl4AI server (
CRAWL4AI_API_URL). Selectable alongside Firecrawl, Jina and Simple. And your persisted engine choice now actually takes effect — the source-processing graph reads the saved Content Settings and passes them to content-core (it previously always ranautoand silently ignored the selection). (#432) - New formats — EPUB books are now supported, and Reddit links extract the post and its comments automatically.
- Better PDF & audio — PDF extraction moves to MIT-licensed pdfplumber (replacing AGPL PyMuPDF), and audio moves to direct ffmpeg calls — faster, and it fixes extraction from MP3 files carrying chapter metadata. (#1103)
- Faster, clearer failures — unsupported uploads are rejected instantly at ingestion with a
415naming the detected type, instead of a background job retrying for ~an hour. (#975)
🪶 Lean by default, powerful on demand
- The heavy runtimes are opt-in. Docling and local Crawl4AI are no longer bundled into every image — they install automatically on first container startup when enabled. Set
OPEN_NOTEBOOK_ENABLE_DOCLING=trueand/orOPEN_NOTEBOOK_ENABLE_CRAWL4AI=true; downloads are cached on the/app/datavolume (only the first boot is slow), and a failed install degrades gracefully (the app still starts, the engine is reported unavailable) with loud logs. A newGET /api/capabilitiesprobe reports what's actually installed, and Settings → Content Processing disables the Docling/Crawl4AI engines and the OCR toggle (with an env-var hint) until their runtime is available — so the UI never advertises an engine that isn't there. A remote Crawl4AI server needs no local install. Recorded as ADR-007. (#1122) - Source extraction now logs the effective engine (
url_engine/document_engine/docling_ocr) at INFO right before it runs, so you can confirm which engine actually processed a source instead of guessing. (#1125)
🐛 Notable fixes
- Podcast correctness: renaming a speaker profile no longer breaks the episode profiles using it (references are stored by record ID, not name); episode audio paths are stored relative to the podcasts folder so previously generated episodes survive a
DATA_FOLDERrelocation; episode cards resolve and show the real outline/transcript/speaker model instead of "— / —"; and podcast generation now honors an explicitly suppliedspeaker_profileall the way into the generation command. (#630, #1030, #1114, #1058) - Clicking a chat/Ask citation that points at a deleted source, insight or note now shows a friendly "this content no longer exists" state in all three dialogs. (#455)
- Source insights get
created/updatedtimestamps and the API returnsnull(not the literal string `"N
- v1.12.0v1.12.0 — Maintainability & Correctness2026-07-12 · 2026-07-12 11:24 UTC
查看更新说明
We recommend all users upgrade. v1.12.0 is a maintainability and correctness release: a full-repo cleanup (20+ focused PRs) that removed ~3,000 lines of dead code, fixed real user-facing bugs along the way, and turned on the quality gates that keep them fixed — validated end-to-end by the release test process (full suites, API+UI smoke, fresh-install and upgrade tests on the real images).
✨ New features
- Live Anthropic model discovery — "Discover models" for Anthropic credentials now queries Anthropic's models API instead of a hardcoded 2024-era list, so new Claude models appear as soon as they ship (#1070)
GET /api/providers— new endpoint exposing provider metadata (modalities, docs, env-configured status) from a single backend registry (#1075)- Math rendering in chat — prompts now steer models to emit
$$...$$/$...$so formulas render via KaTeX instead of raw LaTeX code blocks (#1051)
🐛 Notable fixes
- Errors now tell you what's wrong: a missing/misconfigured model returns a clear 422 with guidance (and not-found resources a 404) instead of a generic "Internal Server Error" — across all API routes (#1078)
- Translations interpolate correctly in all 14 languages: counters, names and plurals no longer risk showing literal
{count}/{name}placeholders; eight podcast toasts that always showed{name}are fixed (#1074, #1077) - Podcast dialog: rapid source toggling no longer causes a request storm with flickering token counts, and the dialog closes deterministically after the episode list refreshes (#1067)
🧹 Code health (why this release exists)
- ~3,000 lines of dead code removed, including the entire leftover Streamlit-era service layer (#1053, #1054, #1056)
- CI now gates every PR on ruff, ESLint, the frontend production build and mypy at zero errors (was: 197 baseline errors, not enforced) (#1062, #1068, #1076)
- One provider registry drives env config, modalities, connection tests and discovery — adding a provider went from ~6 hand-synced locations to 2, both test-enforced (#1075)
- Heavy copy-paste deduplicated across the chat routers, sources router, embedding commands and model discovery (#1069–#1072)
- Both Docker images are now built from a single multi-stage
Dockerfile, eliminating drift between the regular and single-container variants — published image names and tags are unchanged (#1066) - Dependency diet: unused
langchain-communityandlangchain-deepseekremoved, upper bounds on the langchain family, and an undeclared transitive dependency made explicit (#1073)
⚠️ Behavior changes for self-hosters
- API error codes are now accurate — if you script against the API and matched on
500for configuration mistakes, update your handling: configuration errors return422, missing resources404, provider rate limits429, upstream provider failures502(#1078). POST /api/notebooks/{id}/contextwas removed — it duplicatedPOST /api/chat/contextand had no known callers. If you used it, switch toPOST /api/chat/contextwith body{notebook_id, context_config}(#1079).- Upgrading from a version older than 1.6 with embedding jobs still queued: drain the queue on a 1.x release before upgrading past this version — the pre-1.6 job compatibility shims were removed (#1056).
🙏 Thanks
This cycle was a focused maintenance sprint by the core team, but it stands on the community's shoulders: thank you to everyone who reported the issues that shaped the cleanup backlog and the release checklist — your reports are what turned a "refactor" into a list of real bugs to fix. Special mention to the contributors whose earlier security work (#1042, #1046, #1049) set the quality bar this release enforces in CI.
Full details in the CHANGELOG.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
A private, multi-model, 100% local, full-featured alternative to Notebook LM

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:
- 🔒 Control your data - Keep your research private and secure
- 🤖 Choose your AI models - 20+ providers including OpenAI, Anthropic, Google, Mistral, Ollama and any OpenAI-compatible server (LM Studio, vLLM)
- 📚 Organize multi-modal content - PDFs, videos, audio, web pages, and more
- 🎙️ Generate professional podcasts - Advanced multi-speaker podcast generation
- 🔍 Search intelligently - Full-text and vector search across all your content
- 💬 Chat with context - AI conversations powered by your research
- 🌐 Multi-language UI - English, Bengali, Catalan, Chinese (Simplified & Traditional), French, German, Italian, Japanese, Polish, Portuguese, Russian, Spanish and Turkish
Learn more about our project at https://www.open-notebook.ai
🆚 Open Notebook vs Google Notebook LM
| Feature | Open Notebook | Google Notebook LM | Advantage |
|---|---|---|---|
| Privacy & Control | Self-hosted, your data | Google cloud only | Complete data sovereignty |
| AI Provider Choice | 20+ providers, cloud or local (OpenAI, Anthropic, Google, Ollama, LM Studio, etc.) | Google models only | Flexibility and cost optimization |
| Podcast Speakers | 1-4 speakers with custom profiles | 2 speakers only | Extreme flexibility |
| 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 | Answers cite the sources, notes and insights they used | Comprehensive with sources | Research integrity |
| Customization | Open source, fully customizable | Closed system | Unlimited extensibility |
| Cost | Pay only for AI usage | Free tier + Monthly subscription | Transparent and controllable |
Why Choose Open Notebook?
- 🔒 Privacy First: Your sensitive research stays completely private
- 💰 Cost Control: Choose cheaper AI providers or run locally with Ollama
- 🎙️ Better Podcasts: Full script control and multi-speaker flexibility vs limited 2-speaker deep-dive format
- 🔧 Unlimited Customization: Modify, extend, and integrate as needed
- 🌐 No Vendor Lock-in: Switch providers, deploy anywhere, own your data
Built With
🚀 Quick Start
Prerequisites
- Docker Desktop (macOS, Windows) or Docker Engine with the Compose plugin (Linux)
- An API key from an AI provider, or a local model server such as Ollama. You add it in the UI, not in config files.
Step 1: Download docker-compose.yml
mkdir open-notebook && cd open-notebook
curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml
This is the official docker-compose.yml from this repository. It runs two services: surrealdb (the database) and open_notebook (UI, API and background worker).
Step 2: Set your encryption key
Edit docker-compose.yml and change this line:
- OPEN_NOTEBOOK_ENCRYPTION_KEY=change-me-to-a-secret-string
to a long random secret you generate yourself (for example with openssl rand -hex 32; other options). It encrypts the API keys you store; keep it.
Shared network or server? The UI (
8502) and API (5055) are published on all network interfaces and there is no password by default. If other devices can reach this machine, change those two port lines to"127.0.0.1:8502:8502"and"127.0.0.1:5055:5055", or add- OPEN_NOTEBOOK_PASSWORD=your-passwordto theenvironment:block, before starting.
Step 3: Start services
docker compose up -d
Wait about 30 seconds, then open: http://localhost:8502
Step 4: Connect an AI provider
- In the sidebar, open Models (under Manage).
- Find your provider (OpenAI, Anthropic, Google, etc.) and click Add Configuration.
- Enter a name and your API key (local providers such as Ollama need a Base URL instead), then click Add Configuration.
- Click Test on the new configuration to check the connection.
- Click Models, choose a Model Type, tick the models to add and click Add. Add at least one Language model and one Embedding model.
- Under Default Model Assignments, click Auto-assign Defaults (or pick the models yourself).
Done! Create a notebook, add a source and start chatting. Full walkthrough: Connect a provider.
Need an API key? Get one from: OpenAI · Anthropic · Google · Groq
Anthropic and Groq have no embedding models; pair them with a provider that does (see the matrix).
Want free local AI? See the Local Quick Start (Ollama in Docker).
📚 More Installation Options
- Local AI with Ollama - Run models locally without API costs
- Docker Compose guide - Settings, backups, updates, remote access
- From Source (Developers) - For development and contributions
- Complete Installation Guide - All deployment scenarios
📖 Need Help?
- 🤖 AI Installation Assistant: CustomGPT to help you install
- 🆘 Troubleshooting: 5-minute troubleshooting guide
- 💬 Community Support: Discord Server
- 🐛 Report Issues: GitHub Issues
Star History
Provider Support Matrix
Thanks to the Esperanto library, we support these providers out of the box. The columns show the model types each provider offers; what you can use depends on your account.
| Provider | LLM Support | Embedding Support | Speech-to-Text | Text-to-Speech |
|---|---|---|---|---|
| OpenAI | ✅ | ✅ | ✅ | ✅ |
| Anthropic | ✅ | ❌ | ❌ | ❌ |
| Google (GenAI) | ✅ | ✅ | ✅ | ✅ |
| Groq | ✅ | ❌ | ✅ | ❌ |
| Mistral | ✅ | ✅ | ✅ | ✅ |
| DeepSeek | ✅ | ❌ | ❌ | ❌ |
| xAI | ✅ | ❌ | ❌ | ✅ |
| OpenRouter | ✅ | ✅ | ✅ | ✅ |
| DashScope (Qwen) | ✅ | ❌ | ❌ | ❌ |
| MiniMax | ✅ | ❌ | ❌ | ✅ |
| Novita | ✅ | ❌ | ❌ | ❌ |
| SiliconFlow | ✅ | ❌ | ❌ | ❌ |
| Z.ai | ✅ | ❌ | ❌ | ❌ |
| PayPerQ (PPQ) | ✅ | ✅ | ✅ | ✅ |
| Cohere | ✅ | ✅ | ❌ | ❌ |
| Voyage | ❌ | ✅ | ❌ | ❌ |
| ElevenLabs | ❌ | ❌ | ✅ | ✅ |
| Deepgram | ❌ | ❌ | ✅ | ✅ |
| Ollama | ✅ | ✅ | ❌ | ❌ |
| oMLX | ✅ | ✅ | ❌ | ❌ |
| Azure OpenAI | ✅ | ✅ | ✅ | ✅ |
| Vertex AI | ✅ | ✅ | ❌ | ✅ |
| OpenAI Compatible* | ✅ | ✅ | ✅ | ✅ |
| Anthropic Compatible | ✅ | ❌ | ❌ | ❌ |
*Supports LM Studio and any OpenAI-compatible endpoint. Prefer the native oMLX provider for oMLX (Apple Silicon); see docs/5-CONFIGURATION/omlx.md.
✨ Key Features
Core Capabilities
- 🔒 Privacy-First: Self-hosted; with local models nothing leaves your machine
- 🎯 Multi-Notebook Organization: Manage multiple research projects seamlessly
- 📚 Universal Content Support: PDFs, videos, audio, web pages, Office docs, and more
- 🤖 Multi-Model AI Support: 20+ providers including OpenAI, Anthropic, Ollama, Google, LM Studio, and more
- 🎙️ Professional Podcast Generation: Advanced multi-speaker podcasts with Episode Profiles
- 🔍 Intelligent Search: Full-text and vector search across all your content
- 💬 Context-Aware Chat: AI conversations powered by your research materials
- 📝 AI-Assisted Notes: Generate insights or write notes manually
Advanced Features
- ⚡ Reasoning Model Support: Full support for thinking models like DeepSeek-R1 and Qwen3
- 🔧 Content Transformations: Powerful customizable actions to summarize and extract insights
- 🌐 Comprehensive REST API: Full programmatic access for custom integrations
- 🔐 Optional Password Protection: Secure public deployments with authentication
- 📊 Fine-Grained Context Control: Choose exactly what to share with AI models
- 📎 Citations: Get answers with proper source citations
Podcast Feature
📚 Documentation
Getting Started
- 📖 Introduction - Learn what Open Notebook offers
- ⚡ Quick Start with a Cloud Provider - OpenAI, Anthropic, Google and more in 5 minutes
- 🔧 Installation - Comprehensive setup guide
- 🎯 Run It Fully Local - Ollama/LM Studio, completely private
User Guide
- 📱 Interface Overview - Understanding the layout
- 📚 Notebooks, Sources & Notes - Organizing your research
- 📄 Adding Sources - Managing content types
- 📝 Working with Notes - Creating and managing notes
- 💬 Chatting Effectively - AI conversations
- 🔍 Search - Finding information
Advanced Topics
- 🎙️ Podcast Generation - Create professional podcasts
- 🔧 Content Transformations - Customize content processing
- 🤖 AI Providers - Connect providers and set default models
- 🔌 MCP Integration - Connect with Claude Desktop, VS Code and other MCP clients
- 🔧 REST API Reference - Complete API documentation
- 🔐 Security - Password protection and privacy
- 🚀 Deployment - Complete deployment guides for all scenarios
- 🧭 Vision & Principles - What Open Notebook is, and where it's going
- 🛠️ Developer Docs - Architecture, setup, contributing, decision records
🗺️ Where We're Going
Right now the focus is on making the core experience (sources, chat, search, notes, podcasts) solid across every provider and deployment, before adding new product surfaces. The bigger directions under consideration, such as multi-user support, new output formats and agents operating Open Notebook through MCP, are described in the Horizon section of VISION.md. They are directions, not dated promises.
Explore GitHub Discussions for proposed features and product ideas, and open Issues for known bugs and approved work. Recent changes are in the CHANGELOG.
📖 Need Help?
- 🤖 AI Installation Assistant: We have a CustomGPT built to help you install Open Notebook - it will guide you through each step!
- New to Open Notebook? Start with our Getting Started Guide
- Need installation help? Check our Installation Guide
- Want to see it in action? Try our Quick Start Tutorial
🤝 Community & Contributing
Join the Community
- 💬 Discord Server - Get help, share ideas, and connect with other users
- 𝕏 Follow @lfnovo on X - Project updates and news from the maintainer
- 💡 GitHub Discussions - Ask questions and shape features, product direction, design, and architecture
- 🐛 GitHub Issues - Report reproducible bugs and find approved work
- ⭐ Star this repo - Show your support and help others discover Open Notebook
Contributing
We welcome contributions! We're especially looking for help with:
- Frontend Development: Help improve our modern Next.js/React UI
- Testing & Bug Fixes: Make Open Notebook more robust
- Feature Development: Build the coolest research tool together
- Documentation: Improve guides and tutorials
Current Tech Stack: Python, FastAPI, Next.js, React, SurrealDB
See our Contributing Guide for detailed information on how to get started, including our guidelines for AI-assisted contributions. To understand what we're building (and what we'll say no to), read VISION.md.
📄 License
Open Notebook is MIT licensed. See the LICENSE file for details.
Community Support:
- 💬 Discord Server - Get help, share ideas, and connect with users
- 𝕏 Follow @lfnovo on X - Project updates and news from the maintainer
- 💡 GitHub Discussions - Ask questions and shape ideas
- 🐛 GitHub Issues - Report reproducible bugs and find approved work
- 🌐 Website - Learn more about the project
