Как я превратил open-source аналог NotebookLM в desktop-приложение для macOS

Недавно я рассказывал про хакатон, где мы пилили аналог NotebookLM для корпоратов (и, кстати, выиграли его). После этого мне захотелось принести эту идею домой.
Если вы вдруг пропустили этот хайп: NotebookLM - это гугловский сервис, куда ты закидываешь свои PDF, заметки или ссылки, и нейронка превращается в эксперта конкретно по твоим файлам. Можно чатиться со своими доками, вытягивать инсайты и даже генерить из сухих текстов аудио-подкасты. Надеюсь, кстати, что благодаря этой апке на Яндекс Музыке и VK теперь будут больше выпусками моих выпусков.
Open Notebook - это отличный open-source клон этой штуки. Это особенно актуально, учитывая, что с доступом к гугловскому оригиналу из РФ сейчас та ещё возня. К тому же мне хотелось забрать этот инструмент себе, чтобы скармливать доки локально и не сливать данные в чужие облака. (+ на русском не делает подкасты).
Но меня дико бесит, что сейчас для запуска полезного опенсорса нужно быть сеньор-девопсом и поднимать гирлянду из Docker-контейнеров.
Поэтому я психанул, форкнул Open Notebook и упаковал весь их web/Docker-зоопарк в одно нативное macOS-приложение. Цель была простая: скачал .dmg, перетащил в Applications, вставил API-ключ и всё работает.
Что под капотом и как это работает
Приложение полностью privacy-first. Документы, настройки и встроенная векторная база (SurrealDB) лежат локально на маке. Парсить можно PDF, аудио, видео, сайты, а AI-провайдера выбираешь сам: хоть OpenAI или Anthropic, хоть локальную Ollama.
Звучит просто, но скрестить это всё оказалось больно. Исходник: Next.js, FastAPI и фоновые воркеры на Python. Я завернул интерфейс в Electron, а Python-часть собрал через PyInstaller.
Самым большим челленджем стали PDF. Парсер Docling тянет за собой Torch и нейромодели, из-за чего билд приложения раздувался до неприличия. В итоге я разделил поставку: в базе идёт лёгкий воркер, а тяжёлый OCR-движок юзер скачивает прямо из настроек аппки только если он реально нужен.
Ну и отдельный кайф desktop-разработки: заставить Electron корректно убивать дочерние Python-процессы при закрытии окна, чтобы они не висели в памяти призраками.
Можно качать, щупать и форкать:
💻 Репозиторий: https://github.com/eryabyshev/open-notebook-app
📦 Релизы (.dmg): https://github.com/eryabyshev/open-notebook-app/releases
⭐️ Если вам зашла идея или просто хотите поддержать пет-проект - влепите звездочку репозиторию. Вам секунда, а мне лучшая мотивация пилить обновы дальше.
В планах на будущее: допилить сборки под Windows и Linux.
А пока у меня остался один незакрытый гештальт с macOS: сборка не подписана сертификатом Apple, поэтому при первом запуске мак ругается и просит разрешить аппку в Privacy & Security.
Дебаж 🐞с ноги 🦶



























