Tome
Features

Bindery

Bindery is Tome's incoming-file pipeline. Drop EPUBs, CBZs, CBRs, or PDFs into the directory mounted at /bindery (or wherever TOME_INCOMING_DIR points) and Tome handles metadata extraction, cover fetch, duplicate detection, and library assignment. You decide whether ingestion is gated on a manual review or runs automatically on a timer.

Reading time
Bindery review queue

Two modes

# docker-compose.yml — manual review (default)
services:
  tome:
    image: ghcr.io/bndct-devops/tome:latest
    volumes:
      - ./data:/data
      - ./books:/books
      - ./bindery:/bindery   # ← drop files here
    # No TOME_AUTO_IMPORT — manual is the default

Manual review

Default behavior, recommended for any library you care about. Files arrive in /bindery, get parsed, and queue up in Admin → Unreviewed. An admin opens each entry, eyeballs the detected metadata, edits if necessary, and clicks Accept — only then does the book move into the canonical library folder and become visible to non-admin users.

  1. Copy files into /bindery (cp, rsync, smb, whatever).
  2. Tome detects them within a few seconds and parses metadata from the file + filename.
  3. They appear in Admin → Unreviewed with a counter badge in the sidebar.
  4. Open each, check the detected title / author / series / volume. Use Fetch metadata to populate description and cover.
  5. Click Accept to publish, or Reject to delete the file from /bindery.

Reviewing a batch

Select several files and hit Review for a batch view: shared fields (series, author, book type, libraries) with per-field Apply to all, plus a compact row per file.

Batch review: shared fields with apply-to-all, per-file rows, and the metadata suggestions panel targeting the selected file
  • Libraries in one step — pick the libraries a book should land in right in the review form (or for the whole batch), instead of filing each book afterwards from its detail page. The book type's own library is always added automatically. There's also an Add to libraries picker in the Bindery toolbar itself: set it once and the next Quick Accept or Review run files everything into those libraries, then it resets.
  • Per-file suggestions — the metadata suggestions panel targets whichever file row you click (the active row is highlighted); its search re-seeds for that file and clicking a candidate fills that file's form.
  • Match all — fetches and applies the best candidate to every file in the batch. Trust the matcher, eyeball the rows, Accept All.

If you fully trust the matches, skip review entirely: select files and use Quick Accept — it fetches, applies the best candidate, and accepts each file in one pass.

Auto-import

Set TOME_AUTO_IMPORT=true and Tome scans /bindery on a schedule (default every 5 minutes). Detected files get accepted automatically — but they still land marked is_reviewed=false so they show up in the Unreviewed queue for sanity checking after the fact.

What Tome extracts on ingest

  • Title, author, publisher, language, year — from EPUB's OPF, CBZ's ComicInfo.xml, or PDF metadata when present.
  • Series + volume index — from filename patterns. See series detection rules.
  • Cover — embedded cover from the file. If missing, a placeholder is set and you can fetch a cover later.
  • Content hash — sha256 of the file bytes. Used for duplicate detection across re-uploads.
  • Book type — guessed from format and metadata (novel, manga, comic, etc.). Determines which auto-library it lands in.

Filename conventions Tome understands

The cleaner your filenames, the less hand-editing you do. Recommended patterns:

  • Standalone fiction: Title - Author (Year).epub
  • Series volume: Series Name v01.cbz or Series Name - Vol. 01.epub
  • Manga chapter: Series Name c042.cbz (Tome groups chapters separately from volumes)

Duplicate handling

On ingest, Tome compares the new file's content hash against every existing BookFile. Exact match → the new file is silently skipped (and removed from /bindery if auto-import). Near-duplicates (same series + volume, different format) are flagged in the Admin → Duplicates view; you can attach the new file to the existing book record or keep it as a separate entry.

Rejecting and cleaning up

Rejecting a book deletes the source file from /bindery. If you only want to keep the file out of the library but preserve it on disk, move it elsewhere instead of clicking Reject.

Once accepted, books live in TOME_LIBRARY_DIR under a series or author folder (see series organisation). The original drop in /bindery is removed.