Собрала свой плагин для Obsidian. Это Tome Reader – читалка EPUB с четырьмя темами, выделением текста в заметки и в словарные карточки, закладками, правкой опечаток прямо во время чтения, автоматическим оглавлением для «битых» книг и опциональным AI-ассистентом, куда пользователь добавляет собственный ключ. Читалка доступна в официальном каталоге плагинов Obsidian.

Зачем вообще своя читалка
Однажды в поисках вдохновения решила просмотреть заметки по книгам в своей базе Obsidian. И… либо я читала катастрофически мало, либо после прочтения забывала создавать заметки в базе знаний (что больше похоже на правду). Стало очевидно, постоянно напоминать себе вносить интересные цитаты и свои мысли в Obsidian – плохой план. Лучше автоматизировать сам процесс и читать там же, где живёт моя система знаний.
Для начала я решила изучить существующие плагины, но варианта, закрывающего все мои задачи, не нашла. Так я и пришла к идее создать плагин-читалку для Obsidian. Гениальный план, подобный завоеванию Трои, учитывая, что из языков программирования на курсах изучала только Python. Поэтому вайб-кодинг мне в помощь.
Первое, что я сделала, выписала требования:
-
Удобно читать на планшете и телефоне, т.к. читаю я в основном не за компьютером.
-
Выделил → в заметку или в словарь, прямо из текста и без копипаста (при этом заметка по новой книге создаётся автоматически).
-
Темы «как бумага» и всё настраиваемое: шрифт, размер, перелистывание.
-
EPUB обязателен, FB2 – желательно, PDF – по возможности.
-
Умный помощник, без ИИ сейчас никуда.
Кстати, брифовать самого себя – это полезная привычка не только при вайб-кодинге, но и перед началом любой более-менее сложной задачи.
Как я ставила задачу нейросети
Как вы уже поняли, код писала нейросеть. Для меня это давно рабочий инструмент, как автодополнение или подсветка синтаксиса. Сразу оговорюсь, что не считаю вайб-кодинг универсальной таблеткой. ИИ может написать много кода, но разбираться в инструменте всё равно придётся. А составить продуманное описание и план работы – это хороший первый шаг.
Разница между «создай мне читалку» и рабочим ТЗ примерно как между «хочу стать Хокаге» и тренировочным планом Наруто. Первая формулировка всегда повлечет невнятный результат и множество потраченных токенов на старте.
При создании плагина к моему списку выше добавились ограничения (чего делать нельзя) и критерий готовности (как я пойму, что сделано). Например, мне нужно было, чтобы я могла выделить конкретный кусок текста и легко выбрать нужную функцию. Задача звучала так: если при чтения я выделяю фразу или слово, то должна появиться панель с действиями. Цитата должна уходить в заметку книги вместе с названием главы, если заметка по книге не создана, то файл создается автоматически. Если я читаю книгу на иностранном языке, то выделенное слово должно отправиться в нужный словарь. В настройках читалки должна быть возможность создавать разные словари.
И так далее прописывала необходимые функции и как я это вижу шаг за шагов в единую задачу.
Главное помните, при вайб-кодинге задачи должны быть не абстрактными, а конкретными и измеримыми, прямо как те, что мы ставим себе на работе. Тут хочется выделить несколько правил (как я люблю правила):
-
Задача и критерий готовности (результат). Не «сделай красиво», а конкретные кнопки, цвета, функции и т.п.
-
«Объясни, прежде чем я применю». Это хорошая привычка держать руку на пульсе и + отличный способ чему-то научиться по дороге.
-
Давайте нейросети контекст. Для кого вы это делаете, где будет использоваться, если какие-то ограничения (например, по безопасности или блокировки)
-
Проверять. ИИ ошибается уверенно, с ровной интонацией и без тени сомнения. Лучше прописать на старте, что нужна обратная связь после каждого существенного шага.
-
Подробно описывайте ошибки, что не так. Хороший результат получается из нормального диалога (прямо как с человеком). Задача → результат → проверка → корректировка.
Никакого секретного промпта не существует. Есть внятность и терпение.
Что умеет Tome Reader
Файл .epub из вашего хранилища открывается в обычной вкладке Obsidian, как заметка. Плагин запоминает позицию чтения, плюс может создавать закладки, если читаете в разных местах книги. Закрыли, вернулись через какое-то время и продолжили с того же места.
Перелистывание – тап у края страницы или клавиши, есть опциональная анимация (по умолчанию выключена в настройках). В шапке пишется название, текущая глава и процент прогресса.

Четыре темы и настройка на лету
Классическая светлая и тёмная + темы, которые более всего удобны мне для чтения: «Пергамент» (имитация старой бумаги и тёмно-коричневых чернил) и «Серый туман» (тёмный фон с багровым акцентом, стиль моей системы Obsidian).
Панель Aa прямо в читалке. Тема, размер шрифта, межстрочный интервал, цвет текста можно менять на странице, а не только в настройках.

Выделил → и оно уже в базе
Ради этого всё и затевалось. При выделении текста поднимается панель с действиями, включая две самых главных для меня функции: в заметку книги и в словарь.
В заметку уходит цитата вместе с названием главы и, если хочется, ваши мысли по поводу заметки. Если заметки ещё нет, то она создается автоматически в папке, которую вы указали в настройках.
В словарь падает строка в формате плагина Spaced Repetition. Т.е. если в процессе чтения книги, я выделила незнакомое слово и отправила его в нужный словарь с переводом, то назавтра оно придёт ко мне на повторение уже как флеш-карточка. Словарей может быть несколько, они добавляются в настройках.

Оглавление, поиск по главам и закладки
Слева открывается панель оглавления. Сверху находится поле поиска, а текущая глава подсвечивается. Закладки, которые вы добавляете в процессе чтения закреплены над списком глав. Их поставить можно двумя способами: на текущей странице – кнопкой в шапке, или на выделенном фрагменте – тогда подписью станет сам текст.

Оглавление для книг, у которых его нет
Отдельная беда, с которой я столкнулось, – это книги, у которых оглавления нет вовсе. Конвертированные файлы в EPUB из PDF сплошь и рядом приходят с единственной записью «Start». Открыл том на сотни страниц, а прыгать некуда.
Tome Reader в этом случае строит оглавление сам, т.е. проходит по тексту и вылавливает заголовки. Причём заголовком считается не только настоящий заголовок, но и абзац, который выделен жирным и начинается со слов «Глава», «Часть», «Пролог» или с номера. Собранное оглавление кэшируется, поэтому сканирование происходит один раз.
В этом месте стоит обязательно сделать оговорку, если конвертер из PDF съел разметку заголовков вообще (текст едет «столбиком», абзацы разорваны), то собирать будет не из чего. Также она банально может в таких файлах распознать не все главы (я как раз с такой и проблемой столкнулась при конвертации книги из PDF). Читалка старается, но скажем прямо, это не Джарвис Тони Старка.
Правка опечаток прямо в книге
Функция, которая родилась, когда я в очередной раз взорвалась от «гениального» перевода и количества опечаток… Если в переводе попадается кривая фраза, то можно исправить её прямо в файле книги, не выходя из читалки.
Заменяется только фрагмент, который в главе уникален. Если такой же кусок текста встречается дважды, читалка откажется его редактировать, чтобы не испортить текст. В этом случае лучше выделить не одно слово или повторяющуюся фразу, а целое предложение. Тогда читалка сразу же поймет, о каком фрагмента идёт речь.

AI-ассистент, куда вы приносите свой ключ
Эта функция появилась, когда я поняла, что во время прочтения текста мне нужна пояснительная бригада. И так как прокрастинация, судя по всему, стоит в моих настройках по умолчанию, мне лень открывать лишние вкладки и окна. Но вернёмся к AI-ассистенту в читалке…
Ключ приносит пользователь. Без настроенного ключа плагин не делает ни единого сетевого запроса. Чтобы всё заработало как надо в настройках плагина нужно подключить свой API. Провайдер может быть любой. Groq, OpenAI, OpenRouter, Anthropic или что угодно совместимое: адрес и модель задаются в настройках. Ключ хранится локально, у вас.
Что ассистент умеет:
-
Перевод с учётом контекста. Выделяете слово и оно переводится не «по словарю», а с учётом контекста, т.к. у одного и того же слова часто бывает разный смысл. Перевод можно отправить в словарь, а завтра это слово придёт к вам на повторение в виде карточки. Главное не забудьте установить плагин Spaced Repetition.
-
Пояснение. Термины, идиомы, культурные отсылки и т.п. В общем всё то, ради чего обычно лезешь в браузер и отрываешься от чтения.
-
Свободный вопрос по тексту. Тут всё понятно, это просто уточнения каких-то моментов, которые тебе не понятны или уже забылись по сюжету.
-
Антиспойлерный пересказ. Кнопка «Что было раньше?» пересказывает сюжет. Модель получает текст строго до вашей текущей позиции и физически не видит того, что дальше. Если вернулись к книге через месяц и забыли, кто все эти люди и что вообще происходит. Когда читаете несколько книг одновременно, то это топ-инструмент в арсенале читалки. Пересказ можно сохранить в заметку книги вместе с главой и процентом прогресса, так что конспект по книге собирается сам.
Мелочи, которые всегда полезны
-
Интерфейс на английском и русском, переключается в настройках.
-
Работает и на десктопе, и на мобильных. Я читаю в основном с планшета или телефона, поэтому было важно, чтобы текст комфортно отображался на разных устройствах.
-
Кнопка «Проверить подключение» в настройках ИИ.
-
Исходные файлы книги читалка не трогает и никак не изменяет, кроме случаев, когда вы сами правите опечатки по тексту.
Чего плагин пока не умеет
-
Только EPUB. FB2 в планах, PDF – вопрос открытый.
-
Книги, убитые конвертацией, останутся убитыми: если разметка потеряна, восстанавливать нечего.
-
Нет свайпа «за пальцем». Перелистывание тапом, анимация опциональная.
Кому это доступно
Возможно, вы сейчас думаете: «Хочу сделать свой плагин». Я скажу так, если у вас есть интересная идея, то почему бы и да!
Чего НЕ нужно: уметь программировать, знать TypeScript, иметь техническое образование или ментора.
Что нужно:
-
Формулировать. Понимать, чего вы хотите, и уметь это сказать словами. Это, внезапно, гуманитарный навык.
-
Терпение тестировать. Любой плагин (продукт), включая читалку, проверяется, проверяется и ещё раз проверяется перед запуском. У меня было тринадцать версий читалки за три недели.
-
Не бояться ошибок. Ошибки – это не значит, что надо всё бросить. Надо извлечь уроки и попробовать ещё, ещё и ещё… Не сдавайтесь!
-
Задавать вопросы «Почему?», «Как исправить?», «Где улучшить?» и т.п. Это буквально вся отладка.
-
Здравый смысл про безопасность. Куда уходят данные, где лежат ключи, что эта штука делает с вашими файлами.
Самое важное: сохранять контроль. Мир, где инструмент берёт на себя техническую часть, – это не мир, где вопросов стало меньше. Их стало больше. Нужно всегда понимать: что делать, почему именно так делать и что будет, когда плагин или приложение сломается.
Сейчас очень классное время, когда можно воплотить многие идеи из своей головы в жизнь. Ещё пару лет назад идея, умирающая на фразе «нужно создать приложение, но я не программист», сегодня доживает до минимально жизнеспособной рабочей версии. Цена вопроса – несколько вечеров вашего времени.
Справедливости ради в программировании я немного разбираюсь и код всё-таки пишу, но в другом месте. Как уже писала выше, я изучаю Python и создаю на нём свою визуальную новеллу с элементами RPG «КрасноЦарство.exe». Но это уже другой экспириенс.
Что дальше по плагину?
Плагин живой, я им пользуюсь каждый день и продолжаю дорабатывать. И вот тут мне очень пригодятся ваши мысли.
Напишите в комментариях:
-
Форматы. FB2 в планах. Что ещё нужно? PDF, MOBI, что-то экзотическое?
-
Темы оформления. Четыре есть, но добавить несложно. Каких не хватает: контрастных, «ночных», под дислексию, ещё каких-то?
-
Языки интерфейса. Сейчас английский и русский.
-
Функции. Свайп за пальцем? Прогресс чтения в свойствах заметки? Что-то, до чего я не додумалась?
И конечно, баг-репорты всегда приветствуются. Присылайте в issues на GitHub или прямо в комментарии.
Плагин в каталоге: https://community.obsidian.md/plugins/tome-reader – ставится прямо из Obsidian: настройки → плагины сообщества → поиск «Tome Reader».
Исходники (MIT): https://github.com/katrinasenpai/tome-reader
ссылка на оригинал статьи https://habr.com/ru/articles/1077802/