open-notebook

lfnovoMIT活跃维护

开源自托管的 Notebook LM 替代品,能上传资料让 AI 帮你整理笔记、生成摘要和问答,比原版更灵活、功能更多。

An Open Source implementation of Notebook LM with more flexibility and features

v1.15.1发布于 2026-11-04 14:19 UTC41,827star +114 / 7 天4,808fork同步于 2026-11-10 17:19 UTC

怎么上手

由 README 提炼,执行前请确认
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 -d
硬件要求按 README 说明

README 未说明具体显存或 GPU 型号要求;官方推荐用 Docker 部署,本地模型可接 Ollama、LM Studio 等自行运行。

支持 Apple Silicon有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

自托管开源版 Notebook LM,支持多模型接入,让研究资料与对话完全留在本地

开源自托管的 Notebook LM 替代品,能上传资料让 AI 帮你整理笔记、生成摘要和问答,比原版更灵活、功能更多。

核心能力

  • 接入 20+ AI 提供商,含 Ollama、LM Studio、vLLM 等本地服务
  • 统一管理 PDF、视频、音频、网页等多模态来源
  • 支持 1-4 位说话人自定义播客生成
  • 提供全文与向量双路检索,跨全部内容搜索
  • 问答结果标注所引用的来源、笔记与洞察

容易踩的坑

启动前必须把 docker-compose.yml 里的 OPEN_NOTEBOOK_ENCRYPTION_KEY 改成自己生成的长随机密钥;UI 8502 与 API 5055 默认监听所有网卡且无密码,共享网络下需改绑 127.0.0.1 或设置 OPEN_NOTEBOOK_PASSWORD;API key 或本地模型地址要在 UI 的 Models 页面添加,不是写在配置文件里。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.15.1
  1. 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-core 2.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 shipped docker-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_TIMEOUT now 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-all starts SurrealDB again; the legacy SURREAL_ADDRESS / SURREAL_PORT fallback builds a valid database URL (#1457)
    • Docs no longer recommend settings that do nothing (API_CLIENT_TIMEOUT, editing .env plus docker compose restart) (#1456)

    ⚠️ Behavior changes for self-hosters

    • Anything that called POST /api/commands/jobs directly will now get 405 Method Not Allowed. Use the specific endpoints (for example POST /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

  2. 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-shot POST /api/credentials/migrate-encryption upgrades stored keys (idempotent, fail-closed per record). See the downgrade note below (#1317, #1360)
    • Dependency security update: next 16.3.8 (critical RCE advisory in next/og; Open Notebook doesn't use next/og), axios, postcss, brace-expansion, and Python anyio, pyjwt, tornado, urllib3, virtualenv. Security floors are now pinned so a future lock can't resolve back to vulnerable versions (#1404, #1414)
    • The pillow override is gone: podcast-creator no longer pulls in moviepy, and content-core now requires pillow >= 12.3.0 itself (#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 to MiniMax-M3 with a 1M-token context. Region-specific keys can set MINIMAX_BASE_URL / the credential Base URL (#1438)
    • OpenDocument uploads: .odt, .ods (one table per sheet) and .odp (one block per slide), plus .htm files (#1439)
    • YouTube when YouTube blocks your server: set CCORE_YOUTUBE_PROXY (a residential proxy) or CCORE_YOUTUBE_COOKIES_FILE (a browser cookies.txt) on the worker to get transcripts through. CCORE_AUDIO_SEGMENT_MINUTES controls how long audio is split before transcription (#1439)
    • Podcasts in your language again: episode profiles' language setting 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
  3. 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 Host and 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) and axios → 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 to openai-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's alloy/nova set (#987)
    • anthropic_compatible credential 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, and scribe_v2 for 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/_DOCLING therefore left the setting pointing at nothing, and every extraction failed with an u
  4. 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 ran auto and 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 415 naming 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=true and/or OPEN_NOTEBOOK_ENABLE_CRAWL4AI=true; downloads are cached on the /app/data volume (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 new GET /api/capabilities probe 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_FOLDER relocation; episode cards resolve and show the real outline/transcript/speaker model instead of "— / —"; and podcast generation now honors an explicitly supplied speaker_profile all 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/updated timestamps and the API returns null (not the literal string `"N
  5. 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-community and langchain-deepseek removed, upper bounds on the langchain family, and an undeclared transitive dependency made explicit (#1073)

    ⚠️ Behavior changes for self-hosters

    1. API error codes are now accurate — if you script against the API and matched on 500 for configuration mistakes, update your handling: configuration errors return 422, missing resources 404, provider rate limits 429, upstream provider failures 502 (#1078).
    2. POST /api/notebooks/{id}/context was removed — it duplicated POST /api/chat/context and had no known callers. If you used it, switch to POST /api/chat/context with body {notebook_id, context_config} (#1079).
    3. 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.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Forks Stargazers Issues MIT License

    A private, multi-model, 100% local, full-featured alternative to Notebook LM

    New Notebook

    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

    FeatureOpen NotebookGoogle Notebook LMAdvantage
    Privacy & ControlSelf-hosted, your dataGoogle cloud onlyComplete data sovereignty
    AI Provider Choice20+ providers, cloud or local (OpenAI, Anthropic, Google, Ollama, LM Studio, etc.)Google models onlyFlexibility and cost optimization
    Podcast Speakers1-4 speakers with custom profiles2 speakers onlyExtreme flexibility
    Content TransformationsCustom and built-inLimited optionsUnlimited processing power
    API AccessFull REST APINo APIComplete automation
    DeploymentDocker, cloud, or localGoogle hosted onlyDeploy anywhere
    CitationsAnswers cite the sources, notes and insights they usedComprehensive with sourcesResearch integrity
    CustomizationOpen source, fully customizableClosed systemUnlimited extensibility
    CostPay only for AI usageFree tier + Monthly subscriptionTransparent 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

    Python Next.js React SurrealDB LangChain

    🚀 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-password to the environment: 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

    1. In the sidebar, open Models (under Manage).
    2. Find your provider (OpenAI, Anthropic, Google, etc.) and click Add Configuration.
    3. Enter a name and your API key (local providers such as Ollama need a Base URL instead), then click Add Configuration.
    4. Click Test on the new configuration to check the connection.
    5. Click Models, choose a Model Type, tick the models to add and click Add. Add at least one Language model and one Embedding model.
    6. 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


    📖 Need Help?


    Star History

    Star History Chart

    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.

    ProviderLLM SupportEmbedding SupportSpeech-to-TextText-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 API Docs
    • 🔐 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

    Check out our podcast sample

    📚 Documentation

    Getting Started

    User Guide

    Advanced Topics

    🗺️ 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?

    🤝 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: