Tome Reader, своя читалка для Obsidian

от автора

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

Зачем вообще своя читалка

Однажды в поисках вдохновения решила просмотреть заметки по книгам в своей базе Obsidian. И… либо я читала катастрофически мало, либо после прочтения забывала создавать заметки в базе знаний (что больше похоже на правду). Стало очевидно, постоянно напоминать себе вносить интересные цитаты и свои мысли в Obsidian – плохой план. Лучше автоматизировать сам процесс и читать там же, где живёт моя система знаний.

Для начала я решила изучить существующие плагины, но варианта, закрывающего все мои задачи, не нашла. Так я и пришла к идее создать плагин-читалку для Obsidian. Гениальный план, подобный завоеванию Трои, учитывая, что из языков программирования на курсах изучала только Python. Поэтому вайб-кодинг мне в помощь.

Первое, что я сделала, выписала требования:

  1. Удобно читать на планшете и телефоне, т.к. читаю я в основном не за компьютером.

  2. Выделил → в заметку или в словарь, прямо из текста и без копипаста (при этом заметка по новой книге создаётся автоматически).

  3. Темы «как бумага» и всё настраиваемое: шрифт, размер, перелистывание.

  4. EPUB обязателен, FB2 – желательно, PDF – по возможности.

  5. Умный помощник, без ИИ сейчас никуда.

Кстати, брифовать самого себя – это полезная привычка не только при вайб-кодинге, но и перед началом любой более-менее сложной задачи.

Как я ставила задачу нейросети

Как вы уже поняли, код писала нейросеть. Для меня это давно рабочий инструмент, как автодополнение или подсветка синтаксиса. Сразу оговорюсь, что не считаю вайб-кодинг универсальной таблеткой. ИИ может написать много кода, но разбираться в инструменте всё равно придётся. А составить продуманное описание и план работы – это хороший первый шаг.

Разница между «создай мне читалку» и рабочим ТЗ примерно как между «хочу стать Хокаге» и тренировочным планом Наруто. Первая формулировка всегда повлечет невнятный результат и множество потраченных токенов на старте.

При создании плагина к моему списку выше добавились ограничения (чего делать нельзя) и критерий готовности (как я пойму, что сделано). Например, мне нужно было, чтобы я могла выделить конкретный кусок текста и легко выбрать нужную функцию. Задача звучала так: если при чтения я выделяю фразу или слово, то должна появиться панель с действиями. Цитата должна уходить в заметку книги вместе с названием главы, если заметка по книге не создана, то файл создается автоматически. Если я читаю книгу на иностранном языке, то выделенное слово должно отправиться в нужный словарь. В настройках читалки должна быть возможность создавать разные словари.

И так далее прописывала необходимые функции и как я это вижу шаг за шагов в единую задачу.

Главное помните, при вайб-кодинге задачи должны быть не абстрактными, а конкретными и измеримыми, прямо как те, что мы ставим себе на работе. Тут хочется выделить несколько правил (как я люблю правила):

  • Задача и критерий готовности (результат). Не «сделай красиво», а конкретные кнопки, цвета, функции и т.п.

  • «Объясни, прежде чем я применю». Это хорошая привычка держать руку на пульсе и + отличный способ чему-то научиться по дороге.

  • Давайте нейросети контекст. Для кого вы это делаете, где будет использоваться, если какие-то ограничения (например, по безопасности или блокировки)

  • Проверять. ИИ ошибается уверенно, с ровной интонацией и без тени сомнения. Лучше прописать на старте, что нужна обратная связь после каждого существенного шага.

  • Подробно описывайте ошибки, что не так. Хороший результат получается из нормального диалога (прямо как с человеком). Задача → результат → проверка → корректировка.

Никакого секретного промпта не существует. Есть внятность и терпение.

Что умеет 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/