Skip to content

Books & Comics

The reading side of the library: ebooks and comics on Holly, served by Audiobookshelf — the same app that already served the audiobooks — filled automatically from the download clients and from Libation.

Where everything lives

Library: Holly Media/Books/{Ebooks,Comics} — reached from CT 101 by the same CIFS→bind chain as the audiobooks (//192.168.1.200/Media/Books → pve1 /mnt/holly-books → CT 101 /mnt/nas/books), and mounted directly into the ABS container on Holly. Reader: Audiobookshelf on Holly :13378, abs.mdhmedia.uk. Feeders: the book-router and Libation's post-sync hook (both in the libation-sync stack).

Reading it

Device How
Kindle Send to Device — ABS emails the EPUB to an @kindle.com address. This is the feature the ebook library exists for. Setup below.
iPad / phone The ABS web reader, or a native app over OPDS (/api/opds, authenticated with an ABS user's credentials).

Send to Kindle — the setup that matters

The library plumbing is done (2026-08-09): the Books library (/books/Ebooks, id 067eda4d-1114-4270-87ce-27189d7a6623) is live and the /mnt/user/Media/Books/books mount was added to the ABS container via its dockerMan template (see the unraid-docker skill for how). What remains needs credentials and an Amazon account, so it is a human step:

  1. ABS → Settings → Email — SMTP host/port/username/password and a From address.
  2. Same page → e-reader devices — add the reader's @kindle.com address (Amazon → Manage Your Content and DevicesPreferencesPersonal Document Settings).
  3. Amazon → Personal Document Settings → Approved Personal Document E-mail List — add the From address from step 1. Miss this and Amazon silently discards the mail while ABS still reports success — it is the usual cause of "it says it sent but nothing arrived".

Prefer EPUB: Amazon dropped MOBI for Send-to-Kindle in 2022 and converts EPUB on receipt. PDFs go through as-is.

Comics don't work well on a Kindle

Kindles have no native CBZ/CBR support and comic pages are painful on e-ink. Comics are for a tablet; the Kindle gets EPUBs.

Why one reader, not two

Kavita was deployed for this on 2026-08-07 and retired two days later. Audiobookshelf already reads EPUB/PDF/CBZ/CBR, serves OPDS (/api/opds) and does Send-to-Kindle, so a second reader — plus its container, its books.mdhmedia.uk route with a bespoke split-auth exception, and its own backup surface — bought nothing for a ~40-item library. The genuinely valuable part of that work (the mount chain and the book-router below) is reader-agnostic and was kept. Kavita's compose is in git history if a purpose-built comic reader is ever wanted: it does handle comic series/volume/issue structure better than ABS, which treats each CBZ as a standalone book.

How content arrives

flowchart LR
    QB[qBittorrent / NZBGet<br/>categories: books, comics] -->|/downloads/books<br/>/downloads/comics| BR[book-router]
    LIB[Libation<br/>audiobook PDFs/EPUBs] -->|post-sync hook| BOOKS
    BR -->|extract, cbz, copy| BOOKS[(Holly<br/>Media/Books)]
    BOOKS --> ABS[Audiobookshelf<br/>abs.mdhmedia.uk]
    BR -->|scan trigger| ABS
    ABS -->|OPDS / web reader| IPAD[iPad, phone]
    ABS -->|Send to Device| KINDLE[Kindle]

book-router (stacks/apps/libation-sync/router/) runs every 10 minutes: extracts archives, packs loose image folders as .cbz, files into Ebooks/Comics, and triggers an ABS scan of the books library. It copies rather than moves, so torrents keep seeding, and writes a .routed marker per item so re-runs are no-ops.

Libation's post-sync hook moves any .pdf/.epub/.mobi that came bundled with an audiobook out of the audiobook tree into Books/Ebooks — Libation itself cannot split output by file type (one Books location; its FileTemplate covers "the saved pdf and audio files").

Gotchas worth knowing

RAR5 needs unrar-free — 7-Zip won't do it

Alpine's p7zip and its official 7zip package are both built without the RAR codec: a valid RAR5 gives "Can't open as archive", and unrar isn't packaged at all. The router installs unrar-free from edge/testing. Scene comic releases also nest — a .zip containing a multipart .partN.rar set containing the actual issue — so extraction runs up to three bounded passes.

Unraid share dirs must be 777

New directories created with mkdir come out 755, and the SMB user then can't write: the CIFS mount presents everything as uid 1000 but the underlying mode wins. Media/Music/Audiobooks is 777; match it.

Searching for files: use the physical disks, not /mnt/user

A find /mnt/user … -iname '*.epub' returned 0 while for d in /mnt/disk*; do find $d … found 82. The FUSE layer under-reports; always cross-check per-disk before concluding something doesn't exist.

Retired

Kavita (2026-08-07 → 2026-08-09) — a dedicated ebook/comic reader, retired once it was clear Audiobookshelf covered the actual requirement (Send-to-Kindle) without a second app. It was never configured, so nothing was lost. See the note under Reading it.

Readarr was archived upstream in June 2025 (unusable metadata, no maintainers) and its MCP server was removed from this repo on 2026-08-07. Acquisition stays manual through Prowlarr; there is deliberately no metadata-dependent *arr in this path. If automated grabbing is ever wanted, Kapowarr (comics) and Bindery (books) are the current candidates.