How to deploy the Bindery feature to production.
The Bindery is an inbox for incoming books. Files land in a watched directory, Tome detects them, and an admin reviews pre-filled metadata before accepting books into the library.
Both Tome and any external tools (e.g. download automation) mount the same host directory for the bindery. External tools write, Tome reads and triages.
By default, files placed in the bindery directory must be manually accepted through the UI. You can enable auto-import to have Tome automatically ingest files on a schedule:
TOME_AUTO_IMPORT=true
TOME_AUTO_IMPORT_INTERVAL=300 # seconds between scans, default 300 (5 minutes)
When auto-import is enabled, new files are imported automatically with metadata fetched from external sources. They appear in the Bindery as unreviewed — the inbox shows them so you can inspect, correct metadata, or reject any unwanted imports. The manual review-and-accept flow is still available; auto-import just removes the need to click "Accept" for every file.
mkdir -p /path/to/bindery/chaptersThe chapters/ subfolder is for chapter-level content (e.g. individual manga chapters). Volumes go directly into bindery/{series}/.
cd /path/to/tome
docker build -t tome:latest .Add the bindery volume mount. Full volumes should be:
volumes:
- /path/to/appdata:/data # DB + covers
- /path/to/ebooks:/books:ro # library (read-only)
- /path/to/bindery:/bindery # bindery inboxEnvironment variables:
TOME_SECRET_KEY=<your-secret>
TOME_HARDCOVER_TOKEN=<your-token> # optional but recommended
TOME_AUTO_IMPORT=true # optional: auto-ingest new files
TOME_AUTO_IMPORT_INTERVAL=300 # optional: scan interval in seconds (default 300)
After starting the new container:
docker exec -it tome alembic upgrade headIf Alembic fails because tables already exist (common when the DB was created by create_all() rather than migrations), run the upgrade directly:
docker exec -it tome python -c "from backend.core.database import engine; from backend.models import Base; Base.metadata.create_all(engine)"- Open Tome in the browser
- Sidebar should show "Bindery" between Stats and Libraries
- Navigate to
/bindery-- should show an empty inbox - Drop a test file into the bindery directory and refresh -- it should appear
External tool downloads a file
-> staging directory
-> /bindery/chapters/Series Name/file.cbz (chapters)
-> /bindery/Series Name/file.cbz (volumes)
Manual drop
-> copy file directly to /bindery/
Admin opens Tome -> Bindery
-> sees pending files with auto-fetched metadata suggestions
-> reviews, edits if needed, accepts
-> file moves to /books/{Author or Series}/filename.ext
-> Book record created in Tome's database
If something goes wrong:
- Tome: The only DB change is the column rename. To revert:
docker exec -it tome alembic downgrade -1or rename the column back manually. - Files in bindery: Nothing is lost. Files sit in the bindery directory until explicitly accepted or rejected through the UI.
Bindery page shows no files but files are on disk:
- Check the file extensions are supported:
.epub,.pdf,.cbz,.cbr,.mobi - Check permissions: the container user needs read access to
/bindery
Migration fails:
- If Alembic complains about existing tables, use the direct SQLite command shown above.
Permission denied on accept:
- User needs Admin role (set in Admin > Users)