Troubleshooting
Common problems and how to fix them. If yours isn't here, search existing issues or open a new one.
Books aren't appearing after upload
Three likely causes:
- The scan is still running. Watch the progress bar at the top of the dashboard — a fresh scan of a few thousand files can take a minute.
- The file format isn't supported. Tome handles EPUB, CBZ, CBR, and PDF. Anything else gets ignored silently.
- Filesystem permissions. The container runs as UID 1000. If your
/booksmount is owned by root with mode 700, Tome can't read it. Fix the host-side ownership.
Covers are missing
The metadata fetch couldn't find anything, or the file had no embedded cover. Open the book detail page, click the cover, and use the Cover picker — it searches Google Books and Open Library, or you can upload a cover from disk.
KOReader "test connection" fails
Almost always one of:
- The server URL baked into the plugin no longer matches your actual Tome URL (you moved to HTTPS, changed domains, etc.).
- The API key was revoked from Tome's Settings page.
Fix: re-download the plugin from Settings → KOReader. The new
.koplugin gets your current URL and a fresh key baked in. Replace the file in
KOReader's plugins/ folder and restart.
Position not syncing between KOReader and web reader
Whichever side wrote most recently wins. If KOReader was offline for a while and then synced after you'd already advanced past that point in the web reader, the older KOReader position is rejected. Open the book again and the position will be correct.
If sync is silently broken, check Settings → KOReader → Recent sessions. Empty or stale entries mean the plugin isn't reaching the server.
Series view shows wrong volumes
Tome groups by the series + series_index on each book. If filename
parsing got those wrong, the grouping will be wrong. Two fixes:
- Edit metadata on the misgrouped book (book detail → Edit → Series fields).
- Bulk-fix via Scribe:
/scribe update "Series Name".
"Book not found" or 404 in the reader
The underlying file moved or was deleted from disk. Either restore the file to its previous path, or re-scan the library (Settings → Library → Re-scan) so Tome picks up the new layout.
Forgot admin password
Shell into the container and run the reset CLI:
docker exec -it tome python -m backend.cli reset-password <username> You'll be prompted for a new password. Existing JWTs survive (only the hash changed), so other devices stay signed in.
Reverse proxy 502 / 504
Usually one of:
- Uvicorn took longer than the proxy's
proxy_read_timeout. Bump it to 300s for endpoints that hit Hardcover / OpenLibrary or that scan large libraries. - Tome is not actually running.
docker ps+docker logs tome. - Wrong upstream port — Tome serves on 8080 inside the container regardless of how you mapped it host-side.
Stats page is slow
Stats query the reading_sessions table, which grows linearly with use. SQLite
handles up to ~hundreds of thousands of rows fine; beyond that, expect a second or two of
aggregation. There's no flag to make it faster yet — but the indices are in place, so it's a
constant factor, not a runaway query.
Permission errors on /books
The container runs as UID 1000 (user tome). If the host-side owner of your
library folder is different, you'll see PermissionError in the logs and books
won't import. Either chown -R 1000:1000 /path/to/books on the host, or pass
user: "<your-uid>:<your-gid>" in your compose file to override.