An Open Source implementation of Notebook LM with more flexibility and features
Find a file
MisonL 67dd85c928
Feat/localization tests docker (#371)
* feat(i18n): complete 100% internationalization and fix Next.js 15 compatibility

* feat(i18n): complete 100% internationalization coverage

* chore(test): finalize component tests and project cleanup

* test(logic): add unit tests for useModalManager hook

* fix(test): resolve timeout in AppSidebar tests by mocking TooltipProvider

* feat(i18n): comprehensive i18n audit, fixes for hardcoded strings, and complete zh-TW support

* fix(i18n): resolve TypeScript warnings and improve translation hook stability

- Remove unused useTranslation import from ConnectionGuard
- Add ref-based checking state to prevent dependency cycles
- Fix useTranslation hook to return empty string for undefined translations
- Add comment for backward compatibility on ExtractedReference interface
- Ensure .replace() string methods work safely with nested translation keys

* feat(i18n): complete internationalization implementation with Docker deployment

- Add LanguageLoadingOverlay component for smooth language transitions
- Update all translation files (en-US, zh-CN, zh-TW) with improved terminology
- Optimize Docker configuration for better performance
- Update version check and config handling for i18n support
- Fix route handling for language-specific content
- Add comprehensive task documentation

* fix(i18n): resolve localization errors, duplicates, and type issues

* chore(i18n): finalize 100% internationalization coverage

* chore(test): supplement i18n test cases and cleanup redundant files

* fix(test): resolve lint type errors and finalize delivery documents

* feat(i18n): finalize full internationalization and zh-TW localization

* fix(frontend): add missing devDependency and fix build tsconfig

* feat(ui): enhance sidebar hover effects with better visual feedback

* fix(frontend): resolve accessibility, i18n, and lint issues

- fix: add missing id, name, autocomplete attributes to dialog inputs
- fix: add aria labels and DialogDescription for accessibility
- fix: resolve uncontrolled component warning in SettingsForm
- fix: correct duplicate 'Traditional Chinese' label in zh-TW locale
- feat: add i18n support for podcast template names
- chore: fix lint errors in Dialogs

* fix: address all 21 PR feedback items from cubic-dev-ai bot

Configuration:
- Remove ignoreDuringBuilds flags from next.config.ts

Testing:
- Fix AppSidebar.test.tsx regex pattern and add missing assertion

Logic:
- Fix ConnectionGuard.tsx re-entry prevention logic

Internationalization (I18n) - Translations:
- Add missing keys: notebooks.archived, common.note/insight, accessibility keys
- Add specific keys: sources.allSourcesDescShort, transformations.selectModel
- Add singular/plural keys: podcasts.usedByCount_one/other, common.note/notes
- Add common.created/updated with {time} placeholder

Internationalization (I18n) - Usage:
- SourcesPage: use allSourcesDescShort instead of string splitting
- TransformationPlayground: use navigation.transformation and selectModel
- CommandPalette: use dedicated keys instead of string concatenation
- GeneratePodcastDialog: fix zh-TW date locale handling
- NotebookHeader: correctly interpolate {time} placeholder
- TransformationCard: use common.description instead of undefined key
- ChatPanel/SpeakerProfilesPanel: implement proper pluralization
- SystemInfo: correctly interpolate {version} placeholder
- LanguageLoadingOverlay: use t.common.loading instead of hardcoded string
- MessageActions: use specific error key cannotSaveNoteNoNotebook

Other:
- Fix SessionManager.tsx exhaustive-deps warning

* fix: remove duplicate locale keys and add missing zh-CN translations

- en-US: remove duplicate loading key (line 59) and addNew key (sources)
- zh-CN: remove duplicate common keys (loading, note, insight, newSource, newNotebook, newPodcast)
- zh-CN: remove duplicate accessibility.searchNotebooks key
- zh-CN: remove duplicate sources.addNew key
- zh-CN: remove duplicate navigation.transformation key
- zh-CN: add missing usedByCount_one and usedByCount_other keys in podcasts
- zh-TW: remove duplicate common keys (loading, note, insight, newSource, newNotebook, newPodcast)
- zh-TW: remove duplicate accessibility.searchNotebooks key
- zh-TW: remove duplicate sources.addNew key

* docs: remove info.md

* fix: remove duplicate notebook keys and unused ts-expect-error

- zh-CN: remove duplicate notebooks keys (archived, archive, unarchive, deleteNotebook, deleteNotebookDesc)
- zh-TW: remove duplicate notebooks keys (archived, archive, unarchive, deleteNotebook, deleteNotebookDesc)
- GeneratePodcastDialog: remove unused @ts-expect-error directive

* fix(a11y): fix unassociated labels in search page

- Replace <Label> with role='group' + aria-labelledby for search type section
- Replace <Label> with role='group' + aria-labelledby for search in section
- Follows WAI-ARIA best practices for labeling form field groups

* fix(a11y): fix unassociated labels across multiple components

- search/page.tsx: use role='group' + aria-labelledby for search type and search in sections
- RebuildEmbeddings.tsx: use role='group' + aria-labelledby for include checkboxes
- TransformationPlayground.tsx: replace Label with span for non-form output label

* chore: revert to npm stack and ensure i18n compatibility

* chore: polish zh-TW translations for better idiomatic usage

* fix: resolve linter errors (ruff import sort, mypy config duplicate)

* style: apply ruff formatting

* fix: finalize upstream compliance (Dockerfile.single, i18n hooks, docker-compose)

* style: polish strings, fix timeout cleanup, and improve test mocks

* fix: use relative imports in test setup to resolve IDE path errors

* perf(docker): optimize build speed by removing apt-get upgrade and build tools

- Remove apt-get upgrade from both builder and runtime stages (saves 10-15 min each)
- Remove gcc/g++/make/git from builder (uv downloads pre-built wheels)
- Add --no-install-recommends to minimize package footprint
- Keep npm mirror (npmmirror.com) for faster frontend deps
- Add npm registry config for reliable China network access

Also includes:
- fix(a11y): add missing labels and aria attributes to form fields
- fix(i18n): add 2s safety timeout to LanguageLoadingOverlay
- fix(i18n): add robustness checks to use-translation proxy

Build time reduced from 2+ hours to ~34 minutes (~70% improvement)

* fix(a11y): resolve 16 form field accessibility warnings in notebook and podcast pages

* fix(a11y): resolve 4 button and 1 select field accessibility warnings in models page

* fix(a11y): resolve redundant attributes and residual warnings in transformations and podcast forms

* fix(i18n): deep fix for language switch hang using proxy protection and safer access

* fix(a11y): add name attributes to ModelSelector, TransformationPlayground, and SourceDetailContent

* fix: add missing Label import to SourceDetailContent

* fix(i18n): use native react-i18next in LanguageLoadingOverlay to prevent hang during language switch

* fix(i18n): rewrite use-translation Proxy with strict depth limit and expanded blocked props to prevent language switch hang

* fix: add type assertion to fix TypeScript comparison error

* fix(i18n): disable useSuspense to prevent thread hang during language resource loading

* fix(i18n): add infinite loop detection circuit breaker to useTranslation hook

* fix(i18n): update traditional chinese label to native script in en-US

* feat: add new localization strings for notebook and note management.

* fix: resolve config priority, docker build deps, and ui glitches

* refactor: improve ui details and test coverage based on feedback

* refactor: improve ui details (version check/lang toggle) and test coverage

* fix: polish language matching and test cleanup

* fix(test): update mocks to resolve timeouts and proxy errors

* fix(frontend): restore tsconfig.json structure and enable IDE support for tests

* fix: address PR review findings and resolve CI OIDC failure

* fix: merge exception headers in custom handler

* fix: comprehensive PR review remediations and async performance fixes

* refactor: address all PR #371 review feedback

- Docker: consolidate SURREAL_URL to docker.env, add single-container override
- Security: restore apt-get upgrade in Dockerfile and Dockerfile.single
- Create centralized getDateLocale helper (lib/utils/date-locale.ts)
- Refactor 7 files to use getDateLocale helper
- Revert config/route.ts to origin/main version
- Move test files to co-located pattern (3 files)
- Remove local useTranslation mock from ConfirmDialog.test.tsx
- Simplify use-version-check to single useEffect pattern
- Fix test import paths after moving to co-located pattern

* fix: add jest-dom types for test files

* fix: address remaining review issues

- Add apt-get upgrade -y to Dockerfile.single backend-builder stage
- Refactor ChatColumn.test.tsx: use 'as unknown as ReturnType<typeof hook>' instead of 'as any'
- Use toBeInTheDocument() assertions instead of toBeDefined()
2026-01-15 13:51:05 -03:00
.github Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
api Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
commands Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
docs feat: upgrade Next.js 15 → 16 to fix large file uploads 2026-01-14 10:33:19 -03:00
frontend Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
open_notebook Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
prompts docs: generate comprehensive CLAUDE.md reference documentation across codebase 2026-01-03 16:27:52 -03:00
scripts Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
tests Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
.dockerignore Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
.env.example docs: update all database examples for more clarity and better database names. 2026-01-04 09:23:15 -03:00
.gitignore chore: remove outdated setup_guide directory 2026-01-13 20:37:55 -03:00
.python-version forcing 3.12 as maximum python version to fix pydub issue 2025-04-26 06:23:31 -03:00
.worktreeinclude feat(ui): add command palette for quick navigation and search (#288) 2025-12-01 14:59:17 -03:00
CHANGELOG.md chore: changelog 2026-01-14 22:11:10 -03:00
CLAUDE.md docs: update CLAUDE.md files for Next.js 16 upgrade 2026-01-14 13:02:33 -03:00
CONFIGURATION.md docs: restructure documentation with new organized layout 2026-01-03 20:10:24 -03:00
CONTRIBUTING.md docs: restructure documentation with new organized layout 2026-01-03 20:10:24 -03:00
docker-compose.dev.yml fix: specifiy docker compose and add port 2025-12-14 19:14:11 +02:00
docker-compose.full.yml Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
docker-compose.single.yml Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
Dockerfile Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
Dockerfile.single Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
LICENSE Initial commit with all features 2024-10-21 14:56:10 -03:00
logo.png fix discord link 2025-04-24 10:14:59 -03:00
MAINTAINER_GUIDE.md docs: restructure documentation with new organized layout 2026-01-03 20:10:24 -03:00
Makefile feat: improve dev commands, update all langchain dependencies to their latest major versions 2026-01-05 08:22:41 -03:00
mypy.ini Feat/localization tests docker (#371) 2026-01-15 13:51:05 -03:00
pyproject.toml chore: bump to 1.4 2026-01-14 13:08:06 -03:00
README.dev.md feat: improve dev commands, update all langchain dependencies to their latest major versions 2026-01-05 08:22:41 -03:00
README.md feat: add MCP integration documentation to README and create dedicated MCP integration guide 2026-01-09 08:14:39 -03:00
run_api.py Api podcast migration (#93) 2025-07-17 08:36:11 -03:00
supervisord.conf fix: use standalone server for Next.js in Docker 2026-01-14 22:03:15 -03:00
supervisord.single.conf fix: use standalone server for Next.js in Docker 2026-01-14 22:03:15 -03:00
uv.lock chore: bump to 1.4 2026-01-14 13:08:06 -03:00

Forks Stargazers Issues MIT License


Logo

Open Notebook

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

lfnovo%2Fopen-notebook | Trendshift

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 - Support for 16+ providers including OpenAI, Anthropic, Ollama, LM Studio, and more
  • 📚 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

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 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
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 Basic references (will improve) 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

Python Next.js React SurrealDB LangChain

🚀 Quick Start

Choose your installation method:

Best for most users - Fast setup with Docker Compose:

Docker Compose Installation Guide

  • Multi-container setup (recommended)
  • 5-10 minutes setup time
  • Requires Docker Desktop

Quick Start:

  • Get an API key (OpenAI, Anthropic, Google, etc.) or setup Ollama
  • Create docker-compose.yml (example in guide)
  • Run: docker compose up -d
  • Access: http://localhost:8502

💻 From Source (Developers)

For development and contributors:

From Source Installation Guide

  • Clone and run locally
  • 10-15 minutes setup time
  • Requires: Python 3.11+, Node.js 18+, Docker, uv

Quick Start:

git clone https://github.com/lfnovo/open-notebook.git
uv sync
make start-all

Access: http://localhost:3000 (dev) or http://localhost:8502 (production)


📖 Need Help?


Star History

Star History Chart

Provider Support Matrix

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

Key Features

Core Capabilities

  • 🔒 Privacy-First: Your data stays under your control - no cloud dependencies
  • 🎯 Multi-Notebook Organization: Manage multiple research projects seamlessly
  • 📚 Universal Content Support: PDFs, videos, audio, web pages, Office docs, and more
  • 🤖 Multi-Model AI Support: 16+ 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

(back to top)

🗺️ Roadmap

Upcoming Features

  • Live Front-End Updates: Real-time UI updates for smoother experience
  • Async Processing: Faster UI through asynchronous content processing
  • Cross-Notebook Sources: Reuse research materials across projects
  • Bookmark Integration: Connect with your favorite bookmarking apps

Recently Completed

  • Next.js Frontend: Modern React-based frontend with improved performance
  • Comprehensive REST API: Full programmatic access to all functionality
  • Multi-Model Support: 16+ AI providers including OpenAI, Anthropic, Ollama, LM Studio
  • Advanced Podcast Generator: Professional multi-speaker podcasts with Episode Profiles
  • Content Transformations: Powerful customizable actions for content processing
  • Enhanced Citations: Improved layout and finer control for source citations
  • Multiple Chat Sessions: Manage different conversations within notebooks

See the open issues for a full list of proposed features and known issues.

(back to top)

📖 Need Help?

🤝 Community & Contributing

Join the Community

  • 💬 Discord Server - Get help, share ideas, and connect with other users
  • 🐛 GitHub Issues - Report bugs and request features
  • 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 Future Roadmap: Real-time updates, enhanced async processing

See our Contributing Guide for detailed information on how to get started.

(back to top)

📄 License

Open Notebook is MIT licensed. See the LICENSE file for details.

Community Support:

(back to top)