
1. Рутина душит
Однажды услышав про Obsidian и увидев красивую картину, где мысли переплетаются друг с другом и образуют стройную систему, которой удобно пользоваться, я тоже решил, что мне это нужно. Установив и запустив приложение я увидел... удручающую картину, я увидел пустоту. Пустоту, которую мне нужно было заполнить. Я побежал смотреть уроки, а после заполнять свою базу знаний. Мне скорее хотелось увидеть, как то, что я узнал, построиться в граф знаний. Но столкнувшись с тем, что мне придётся учиться делать заметки, связывать их друг с другом, да и просто выделять и записывать важное из всей информации урока, моё рвение резко испарилось.
После этого я больше и не открывал Obsidian, решив, что удобнее учиться мне от этого не станет. Мне также не хотелось искать подходящие плагины, потому что это было долго. Я представлял себе этот процесс лёгким и непринуждённым, когда поток звука и текста проходящего по информационным каналам сам складывается по коробочкам и встает на нужные полочки, а для меня в Obsidian уже лежат готовые заметки, которые сразу можно читать.
Сказка... Или нет? Я так уж и быть нашел силы спросить у ChatGPT о существовании подобных инструментов и узнал об автоматических ИИ помощников, они помогали искать заметки, могли пользоваться ими, но не один не воплощал в жизнь мои заветных желания. Возможно, копнув глубже, я бы нашёл, то что мне нужно, но я всё‑таки я и сам разработчик, нуждающийся в хороших кейсах, демонстрирующих мои навыки, чтобы наконец‑то кто‑то предложил мне стажировку (хоть на собес позовите 0_0). Было принято решение создать такой инструмент самостоятельно.
2. Мой идеальный Obsidian
Сперва нужно разобраться, как должно работать то, что я хочу получить. Представим это в виде pipeline информации:
Я открываю YouTube, слушаю подкаст, читаю статью, не важно, инструмент должен уметь работать с любым приложением на компьютере, а не привязываться к конкретным.
Естественно, я смотрю, или слушаю, или читаю этот источник информации
После самостоятельного ознакомления с материалом, я открываю Obsidian и вижу готовые заметки.
Преимущественно информацию мы получаем через звук и текст. Также есть видео и картинки, но обычно в обучающих видео они визуализируют то, что мы слышим. Чтобы не привязываться к конкретному приложению, будем читать системный звук ОС, а текст можно получать, к примеру, из буфера обмена.
Далее эту информацию нужно обработать. Для этого, конечно нужно использовать LLM. Но я бы точно не хотел, чтобы моя личная информация отправлялась в чужие облака, к тому же инструмент хочется сделать бесплатным. Поэтому LLM мы выбираем локальную. Она постоянно обрабатывает непрерывный поток информации и выдает нам структурированные ответы.
Далее эти ответы нужно просто сохранить, например, в.md файлах, обычным алгоритмом построить их и положить в хранилище Obsidian. Далее мы просто открываем, смотрим и наслаждаемся тем, что не тратили сил на построение нашей базы знаний.
3. Создание прототипа
После того, как цели стали ясны, я приступил к созданию прототипа. Я решил, что работать со звуком будет сложнее и интереснее всего, поэтому с него и начал. Чтение системного звука, это как ни странно работа с ОС. Так как на разных ОС этот механизм может сильно различаться, необходимо было определиться с первой платформой. Я выбрал Windows, так как у самого Windows ноутбук, да и в мире это самая популярная платформа. В дальнейшем также появились причины не распылятся и сделать инструмент для одной платформы.
Написав часть программы, читающей звук, я начал получать его в виде байт. Я был неуверен, что LLM сможет сама расшифровывать его, поэтому интегрировал Whisper в свой пайплайн. Это небольшая модель, разработанная специально для транскрибации аудио. Из потока байт он формировал chunks текстовой информации, которые уже можно было скормить LLM.
Появился вопрос, как много чанков нужно скормить LLM, чтобы она выдавала качественные ответы. Сложность вопроса состоит даже не в количестве передаваемых чанков, а в том, какие чанки будут входить в набор. К примеру, у нас есть фраза: «Докер — это инструмент для контейнеризации». Возможна ситуация, когда мы получим два чанка (или две группы чанков), текст в которых будет: «Докер — это инструмент» и «для контейнеризации». LLM будет обрабатывать каждый чанк по отдельности, без контекста предыдущего.
Самым наивным методом было объединять чанки в группы так, чтобы часть последних чанков предыдущей группы было началом группы следующей, так называемое FloatingWindow, таким образом часть контекста будет передаваться в следующую группу, что снизит частоту появления ситуаций недостатка этого самого контекста.

Следующий шаг, это поднять инференс и запустить в нём какую‑нибудь LLM. На эту роль я выбрал этих кандидатов: llama.cpp в качестве инференса и Qwen3-4B‑Q4 в качестве LLM обработчика, компактная и умная модель.
Чтобы все заработало, нужно подготовить промпт, который объяснит LLM, что она должна делать, и прикрепить текст который она должна обработать. В промпте нужно указать, чтобы LLM выдавала нам .json формат для того, чтобы мы могли автоматически распарсить ответ в необходимую нам структуру.
И вообщем‑то, все готово, звук бежит, Whisper делает транскрибацию, LLM выделяет заметки, мы радуемся.
4. Делаем лучше
Чтобы в дальнейшем вести повествование, определю некоторые термины и нюансы, которые я выделил в процессе разработки.
Термин — самодостаточная сущность у которой есть имя и определение
Мысль — сущность, связывающая между собой несколько терминов
Конспект — набор терминов и мыслей, получается на выходе работы LLM по преобразованию группы чанков

4.1 Новые механики
Первое, что было допустимо в прототипе, но нельзя было оставлять в финальном варианте приложения, это ответы LLM. Всё дело в том, что мы не можем быть уверены в том, что она выдает нам информацию ровно такой, какой мы хотим её видеть в нашей базе знаний. Чтобы не засорять её, обязательно нужно добавить этап ручного подтверждения пользователем добавления информации в базу. Кроме того, тут же должны появиться механизмы проверки входящей информации на схожесть с уже существующей в базе, ручное редактирование входящей информации и того, что мы записываем в базу. Тут может показаться, что мы отходим от первоначальной идеи полной автоматизации, но на самом деле LLM и так колоссально сокращает время на составление заметок, выдавая нам свой, возможно, не вполне идеальный вариант, который мы быстро редактируем и подтверждаем. Это делает систему только надежнее, не убивая скорость заполнения.
4.2 Новые проблемы
Второе, введение системы подтверждения порождает не сразу очевидную вещь, убивающую время создания конспектов. Дело в том, что наш пробный механизм группировки чанков FloatingWindow, порождает много одинаковой информации. Порой дополнительный контекст, который мы несём из предыдущей группы, включает в себя много повторяющейся информации, которую LLM повторно обрабатывает. В таком случае пользователь получает n‑ое количество одинаковых терминов и мыслей, который он должен подтвердить.
Для решения этой проблемы попрощаемся с наивным подходом. Теперь мы будем разделять текст на котором у нас фокус работы и дополнительный контекст, не объединяя их в одну chunk group. LLM мы укажем, что сущности для конспекта мы можем выделять только из фокус группы, а контекст используем только в случае, когда он дополняет сущность из фокус группы.

По итогу LLM не плодит новые сущности в рамках одной сессии, а если пользователь решил посмотреть другое видео по этой теме или пересмотреть старое видео, он сможет вручную убедиться что в базу не запишется лишняя информация.
5. Доведение до «production»
Чтобы приложением можно было удобно пользоваться, ему необходим UI, желательно графический. Основную рабочую панель я решил сделать небольшим виджетом, это позволяет всегда держать под рукой необходимые кнопки запуска записи и в целом весь рабочий функционал, при этом приложение не занимает много места на экране.


Предполагалось, что конспекты будут экспортироваться в Obsidian, но ради полноценности внутри самого приложения было добавлено собственное визуальное представление базы знаний, хотя экспорт в Obsidian так же возможен. В принципе, ни что не мешает по разному интерпретировать получаемую информацию, речь не только о построении базы знаний, это может быть summary созвона, история твоего дня и много еще чего, всё что нужно, написать необходимый «интерпретатор».

В конце концов, было решено дать этому проекту собственное имя memplua. Я позиционирую это как open‑source проект, было бы замечательно, если бы кому‑нибудь это тоже пригодилось, а кто‑то захотел бы внести свой вклад в развитие этого инструмента. Сейчас проект находиться в alpha стадии, готовый к использованию и дальнейшему улучшению.
Результатами своей работы я вполне доволен, я действительно пользуюсь memplua, потому что мне удалось реализовать все свои идеи такими, какими я их задумывал. Собственно, GitHub проекта: https://github.com/Ijne/memplua. Там можно найти больше документации по проекту, посмотреть код. Удобный установщик можно найти на https://memplua.space, он сразу скачивает все необходимые модели и само приложения.
Всем кто дочитал эту статью, спасибо за внимание!
Комментарии (19)

Naxofon
24.09.2026 09:51В статье не особо понятно что это и какие проблемы решает. По конспекту понял что это что-то похожее на Notebook LM, но есть уже давно open notebook где можно делать тоже самое

ijne Автор
24.09.2026 09:51Как я писал в начале статьи, я не уделял много времени поиску аналогов, потому что в большей степени у меня был практический интерес сделать что-то самому. Посмотрел Open Notebook — действительно, проекты во многом похожи. Из отличий memplua могу выделить фоновую потоковую запись и обработку любого звука с компьютера, а не добавление заранее выбранного материала в качестве источника.

purple_elephant
24.09.2026 09:51У меня бытовой вопрос, какой процессор и объем оперативной памяти минимально и оптимально нужно для работы этой системы?

ijne Автор
24.09.2026 09:51У меня работает на Intel Core i5-11260H, RTX 2050 4 GB и 16 GB оперативной памяти. На другом железе пока не тестировал, поэтому точные минимальные требования назвать не могу. Большую часть памяти занимают модели — около 3 ГБ. Нагрузку можно по-разному распределять между CPU и GPU при наличии CUDA. При работе на процессоре максимальная загрузка у меня была около 80%. Пробовал полностью переносить вычисления на видеокарту — в таком случае процессор практически не нагружался, а скорость генерации увеличивалась примерно в 1,5 раза.

Aquahawk
24.09.2026 09:51
5 лет, 2163 заметки и всё создано руками. Никаких грабберов, никакой копипасты. ТОлько то, что я переварил и сам записал. Я сейчас делаю аи пайплайн который выкачает всё сохранённое включая видосы, всё это распарсит, вектризует и сделает по этому поиск. Но это будет жить отдельно, а не в моём обсидиане. Одно дело картотека моих знаний, другое всёкое что видел и к чему хочется иногда обратиться, но не относится к моим прямым знаниям.
графовый вид абсолютно бесполезен в реальности

BReal
24.09.2026 09:51Скачал, но не запускается. Smart Screen спросил - готов ли я запустить, я согласился, но далее - ничего. Windows 10. 1070 GTX 8Gb, i5. 16 Gb RAM.

ijne Автор
24.09.2026 09:51Скорее всего, это баг интерфейса: само приложение, вероятно, запустилось, но окно не отобразилось. Попробуйте завершить memplua.exe через диспетчер задач и запустить приложение заново. У меня такой баг тоже иногда появлялся, постараюсь разобраться с причиной.

Axell87
24.09.2026 09:51Разобрался. Но есть несколько замечаний, я так и не смог запустить.
1. В документации написано:
Откройте memplua.space и нажмите кнопку скачивания установщика. Она ведёт к файлу на Hugging Face. Скачайте
memplua-<версия>-windows-x64-offline-setup.exe(около 2,6 ГБ); он содержит Qwen3-4B-Q4, Whisper small, Silero и необходимые библиотеки.
Открываю ссылку жму скачать - редирект на гитхаб. Инструкция не верная;
2. Скачал с гитхаба нужный репозиторий выполняюpowershell -NoProfile -ExecutionPolicy Bypass -File .\download-models.ps1получаю:
C:\memplua-0.2.0> powershell -NoProfile -ExecutionPolicy Bypass -File .\download-models.ps1 Не удается преобразовать значение "System.Object[]" типа "System.Object[]" в тип "System.Int64". C:\memplua-0.2.0\download-windows-models.ps1:66 знак:5 + [PSCustomObject]@{ Name = $Path; URL = "https://huggingface.co/$R ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : ConvertToFinalInvalidCastException3. Похоже модель на hugs либо не существует, либо перенесли - ничего не скачивается.
curl: (22) The requested URL returned error: 404 curl: (22) The requested URL returned error: 404 curl: (22) The requested URL returned error: 404 Unable to download Qwen3-4B-Q4_K_M.gguf: curl.exe exited with code 22 while downloading bytes 0-33554431 of Qwen3-4B-Q4 _K_M.gguf.
ijne Автор
24.09.2026 09:51Поправил ссылки, кнопка установки на сайте теперь должна вести на нужную версию установщика с HuggingFace.

ijne Автор
24.09.2026 09:51Спасибо за фидбек. Буквально вчера завели issue по этой проблеме: https://github.com/Ijne/memplua/issues/1 Ошибка возникала из-за отсутствующих библиотек в сборке. Я уже обновил установщик — теперь необходимые зависимости должны устанавливаться вместе с приложением. Попробуйте скачать обновлённую версию с сайта и установить её заново.

Axell87
24.09.2026 09:51Дайте корректную ссылку на FULL инсталлятор.
Ваша ссылка с веб-сайта https://memplua.space/ не ведет туда куда обещано.
где взять: "Скачайтеmemplua-<версия>-windows-x64-offline-setup.exe(около 2,6 ГБ)" ?
ijne Автор
24.09.2026 09:51https://huggingface.co/ijne/memplua/blob/main/memplua-0.2.0-alpha.4-windows-x64-offline-setup.exe
Поправлю ссылку в README, чтобы она вела прямо на установщик, а не на сайт с кнопкой)

Axell87
24.09.2026 09:51отлично спасибо! Потому что с этими запусками, ошибками в PS короче, муторно все.
Буду сегодня тестировать, большое спасибо!!!

Axell87
24.09.2026 09:51
не ясен интерфейс А где-то можно прочитать про базовый функционал? Я вот включаю микрофон, пытаюсь записать звук появляется значок: "Восстанавливаем связь".
Хотел закинуть видео-фрагмент для теста (как-будто с ютуба) в окно: Memory но ничего не происходит, так же пробовал из буфера обмена сделать это же.
Может быть видео презентация есть основ?Всегда один ответ "Входящие конспекты" и "Все разобрано)
"Обработка знаний" готов к работе но нажать не могу (на вот мозг этот или что это)

Как добавить что-либо во входящие конспекты?

Какое значение надо установить чтобы модель на 100% была в GPU?
Видео попыток: https://disk.yandex.ru/i/lDpoy3KJkvUYwg


alexwm
И именно поэтому она работать и не будет. Заметка должна быть вами проработана самостоятельно, через это приходит понимание и осознание. У вас будет обширный справочник, но не база знаний.
ijne Автор
Да, я тоже об этом думал и поэтому сделал механизм ручного редактирования с последующим подтверждением. То есть пользователь всегда проверяет и прорабатывает то, что добавляется в базу. Заодно это помогает отсеивать возможные неточности в ответах LLM.
JBFW
Это дискуссионный вопрос.
Есть многое такое, что требует записок и заметок (потому что сегодня оно не актуально), при этом его совершенно незачем прорабатывать отдельно.
Понадобиться оно может например завтра, или через месяц - и вот тогда вы его должны суметь найти. Если не понадобится - оно вам и не нужно.
Раньше я бы сам сказал "нафига? Есть же Гугль?" - но сейчас всё больше разной информации, которая исчезает бесследно: там отменили, тут запретили, где-то сочли вредной и ненужной. А у меня голова не резиновая, всё помнить.