Читать в браузере удобно на планшете и ноутбуке, но у телефона и электронной читалки свои приложения с своими шрифтами, словарями и синхронизацией. Для них у Flibusta-at-home есть OPDS — стандартный протокол каталогов электронных книг, который поддерживает большинство читалок. Приложение видит библиотеку как каталог: листает разделы, ищет, скачивает книгу к себе.

Адрес и вход

Адрес каталога — адрес библиотеки плюс /opds:

https://flibusta.example.org/opds
https://example.org/flibusta/opds      # subfolder-схема

Точный адрес для вашей установки показан в разделе «Справка» самой библиотеки.

Аутентификация — HTTP Basic, те же имя и пароль, что для входа через браузер. Из доверенной сети (FLIBUSTA_TRUSTED_NET) пароль не требуется, но тогда персональных разделов у каталога нет. Неудачные попытки входа по OPDS считаются так же, как через форму (15-минутная блокировка после серии ошибок, запись в лог попыток входа с кодом 6, срабатывание fail2ban), так что опечатка в пароле в настройках приложения может временно заблокировать аккаунт — приложения имеют привычку молча повторять запрос.

Читалка присылает пароль в каждом запросе, а его проверка намеренно медленная, поэтому в конфигурации с Redis удачная проверка запоминается на пять минут. Ошибочные пароли не запоминаются никогда — на блокировки это не влияет. Заметить эту деталь можно в одном случае: после смены пароля читалка со старым паролем может ещё несколько минут получать доступ, пока запись не истечёт. Если нужно отрезать устройство немедленно, удалите или пересоздайте учётную запись в разделе «Пользователи» — это сбрасывает запись сразу.

Часть приложений умеет принимать логин и пароль прямо в адресе:

https://имя:пароль@flibusta.example.org/opds

Специальные символы в имени и пароле нужно percent-кодировать: @ → %40, # → %23, / → %2F, : → %3A, ? → %3F, & → %26, + → %2B, % → %25, пробел → %20. Если приложение с таким адресом не справляется, укажите адрес без учётных данных и введите их в диалоге, который появится при первом обращении.

Что есть в каталоге

Корень каталога:

Раздел Что внутри
Новинки последние добавленные книги, постранично
Книжные полки общие списки избранного (см. настройки читателя)
По жанрам дерево жанров Флибусты, внутри — книги жанра
По авторам алфавитный указатель: буква → следующая буква → авторы; у автора — книги по сериям и по алфавиту
По сериям такой же указатель по названиям серий

Плюс поиск: каталог объявляет OpenSearch, так что кнопка «поиск» в приложении ищет по названиям книг (/opds/search?q=…), а из указателя авторов — по авторам.

Каждая книга в ленте несёт обложку (миниатюру и полноразмерную), аннотацию, авторов, серию со ссылкой «все книги серии» и ссылку на скачивание. Скрытые жанры и фильтры сеанса из веб-интерфейса на OPDS не действуют: каталог показывает всё.

Форматы: что скачает читалка

Ссылка на скачивание в ленте OPDS ведёт на файл в том формате, в котором книга хранится: для fb2 — fb2.php?id=<id> (fb2, упакованный в zip), для остальных — usr.php?id=<id> с исходным pdf, epub, djvu и т.д.

Конвертация fb2 → epub/kfx/azw8 через OPDS не предлагается: лента отдаёт fb2, и дальше всё зависит от приложения. Большинство мобильных читалок (KOReader, FBReader, Moon+ Reader, PocketBook Reader, Cool Reader) читают fb2 и fb2.zip напрямую — проблемы нет. Два исключения:

  • Kobo: встроенная читалка fb2 не понимает, а OPDS-клиент в прошивке отсутствует. Путь — скачать в браузере со страницы книги в формате kepub (пункт в выпадающем меню кнопки скачивания) и передать на устройство по USB или через Calibre.
  • Kindle: аналогично, OPDS нет; со страницы книги скачивается kfx или azw8 и отправляется на устройство через Send to Kindle или USB.

Если очень нужно, прямая ссылка на конвертированный файл конструируется руками: fb2.php?id=<id>&final_format=<epub2|epub3|kepub|kfx|azw8|pdf|txt|md> — с той же HTTP Basic аутентификацией, что и OPDS. Так можно, например, сохранить в закладках телефона ссылку «эта книга в epub».

Подключение в приложениях

Везде принцип один: найти «каталоги» / «сетевую библиотеку» / «OPDS», добавить каталог, указать адрес и учётные данные. Ориентиры:

  • KOReader (Android, читалки Kobo/Kindle/PocketBook с KOReader): меню «Файловый менеджер» → «OPDS-каталог» → «+», адрес, имя, пароль. Умеет поиск, качает fb2 и читает его сам. Самый беспроблемный вариант для электронных чернил.
  • FBReader (Android, iOS, десктоп): «Сетевая библиотека» → «Добавить каталог» → адрес. При первом обращении спросит логин и пароль.
  • Moon+ Reader (Android): «Сетевая библиотека» → «Добавить», адрес, учётные данные в отдельных полях.
  • PocketBook Reader (Android, iOS) и Cool Reader: аналогично, раздел сетевых библиотек / OPDS.
  • Foliate (Linux) и Thorium Reader (Windows/macOS/Linux): раздел каталогов, вставить адрес.
  • Calibre: сам по себе OPDS-клиентом не является, но книгу, скачанную любым способом, удобно конвертировать и отправлять на устройство через него.

Названия пунктов меню меняются от версии к версии; ищите слова OPDS, «каталог», «сетевая библиотека».

Типичные проблемы

«Не удаётся подключиться» при рабочем адресе в браузере. Три причины по частоте: приложение не принимает сертификат (самоподписанный или внутренний CA — установите корневой сертификат на устройство или используйте Let’s Encrypt); адрес указан без https://; в адресе subfolder-схемы потерян префикс (/flibusta/opds, а не /opds).

Спрашивает пароль снова и снова. Либо пароль неверный и аккаунт уже заблокирован на 15 минут (см. «Пользователи → Активность пользователей»), либо reverse proxy не передаёт заголовок Authorization в php-fpm. В шаблонах для SWAG он передаётся явно (fastcgi_param HTTP_AUTHORIZATION); для других прокси — см. статью о reverse proxy.

Каталог открывается, но обложки не показываются. Обложки отдаёт extract_cover.php, который тоже требует аутентификации; некоторые приложения не передают учётные данные при запросе картинок. Это косметика; книги при этом скачиваются нормально.

Пустые «Книжные полки». Раздел показывает общие списки, унаследованные от старых версий библиотеки, а не личное избранное читателя. Если таких списков нет, раздел пуст — это нормально.

Книга скачивается как .zip. Так и задумано: fb2 отдаётся упакованным. Все нормальные читалки открывают fb2.zip напрямую; если ваша не умеет, распакуйте или используйте ссылку с final_format=epub3.

Доступ снаружи. OPDS — это обычные HTTPS-запросы, поэтому работает через любой из способов из статьи о доступе из интернета. С VPN-вариантами (Tailscale и т.п.) есть нюанс: VPN на телефоне должен быть включён в момент, когда приложение обращается к каталогу, а фоновая синхронизация некоторых читалок этого не проверяет и молча получает ошибку.