You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Remove personal IPs, NAS paths, and internal plan docs. Rewrite README
for public audience. Update all docs with generic paths. Add TomeSync
plugin v2 with offline session flush fix and pending sessions menu.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+87-79Lines changed: 87 additions & 79 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,48 +9,93 @@ Built with FastAPI, React, and SQLite. Ships as a single Docker image.
9
9
-**Library management** -- scan books from folders, upload files (including bulk), organize into libraries with icons and categories (novels, manga, comics, etc.)
10
10
-**Metadata extraction** -- automatically pulls metadata and covers from EPUB, PDF, CBZ, and CBR files, including ComicInfo.xml parsing
11
11
-**Metadata fetching** -- search Google Books, OpenLibrary, and Hardcover for metadata with a side-by-side diff UI
12
-
-**Built-in reader** -- read EPUBs, manga, comics, and webtoons directly in the browser (see [Reader](#reader) below)
12
+
-**Built-in reader** -- read EPUBs, manga, comics, and webtoons directly in the browser
13
13
-**Reading status** -- per-user tracking (unread/reading/read) with progress percentage
-**KOReader sync** -- sync reading positions and sessions via TomeSync plugin with offline support
16
+
-**OPDS feed** -- browse and download from KOReader, Panels, Chunky, or any OPDS client
17
+
-**Bindery** -- inbox for incoming books with metadata preview and batch accept/reject
14
18
-**Cover picker** -- search Google Books and OpenLibrary for covers, or upload your own
15
-
-**Authentication** -- JWT-based auth with first-run setup wizard, admin user management, granular permissions, and force password change on first login
16
-
-**Libraries and filters** -- create public or private libraries, assign books via many-to-many relationships, save URL-based filter presets
17
-
-**Series browsing** -- inline series detail panel with volume grid, progress bars, continue reading, and mark-all-read
19
+
-**Authentication** -- JWT auth with setup wizard, admin management, granular permissions, and force password change
20
+
-**Libraries and filters** -- public or private libraries, many-to-many book assignment, saved filter presets
21
+
-**Series browsing** -- inline series detail panel with volume grid, progress bars, and continue reading
18
22
-**Bulk operations** -- multi-select for bulk library assignment, metadata editing, metadata fetching, and ZIP download
23
+
-**Quick Connect** -- sign in on new devices with a 6-character code instead of typing credentials
24
+
-**OPDS PINs** -- short app-specific passwords for OPDS clients, easy to type on e-ink keyboards
19
25
-**Themes** -- 9 themes including light, dark, Catppuccin (Latte, Frappe, Macchiato, Mocha), Nord, Neon, and 8-bit
20
-
-**OPDS feed** -- browse and download your library from KOReader, Panels, Chunky, or any OPDS client
21
-
-**KOSync** -- sync reading positions between KOReader devices and Tome via the built-in KOSync-compatible API
22
-
-**Quick Connect** -- sign in on new devices without typing credentials: get a 6-character code on the login page, approve it in Settings > Security on a device where you're already logged in
23
-
-**OPDS PINs** -- generate short app-specific passwords for OPDS clients; 6 lowercase characters, easy to type on e-ink keyboards, revocable per device
|`TOME_DATA_DIR`| No |`/data`| SQLite DB and cover cache directory |
69
+
|`TOME_LIBRARY_DIR`| No |`/books`| Ebook library root |
70
+
|`TOME_INCOMING_DIR`| No |`/bindery`| Incoming/Bindery folder |
71
+
|`TOME_PORT`| No |`8080`| HTTP port |
72
+
|`TOME_HARDCOVER_TOKEN`| No | -- | Hardcover API token for metadata lookups |
26
73
27
74
## Reader
28
75
29
-
Tome has a built-in reader that handles EPUBs, manga/comics (CBZ/CBR), and PDFs directly in the browser. Click the "Read" button on any book detail page or the play icon on series volume covers to open it.
76
+
Tome has a built-in reader that handles EPUBs, manga/comics (CBZ/CBR), and PDFs directly in the browser. Click the "Read" button on any book detail page to open it.
30
77
31
78
### EPUB Reader
32
79
33
80
- Table of contents sidebar
34
81
- Three themes: light, sepia, dark
35
82
- Adjustable font size and font family (serif, sans-serif, monospace)
36
-
- Reading position saved automatically via EPUB CFI -- reopen a book and you're right where you left off
83
+
- Reading position saved automatically via EPUB CFI
37
84
- Progress percentage tracked and visible on the dashboard
38
85
39
86
### Comic/Manga Reader (CBZ/CBR)
40
87
41
88
Pages are streamed individually from the server -- no need to download the entire archive before reading.
42
89
43
90
-**Page navigation** -- click/tap left or right half of the screen, use arrow keys, or swipe on mobile
44
-
-**Two-page spread** -- auto-enabled on wide screens, toggle with `S` key. Pages display side-by-side like an open book
45
-
-**RTL (right-to-left)** -- auto-enabled for manga book types. Page order and navigation direction flip so manga reads correctly. Toggle with `R` key
91
+
-**Two-page spread** -- auto-enabled on wide screens, toggle with `S` key
92
+
-**RTL (right-to-left)** -- auto-enabled for manga book types, toggle with `R` key
46
93
-**Fit modes** -- fit-to-width or fit-to-height, toggle with `W` key
47
-
-**Pinch-to-zoom** -- on mobile, pinch to zoom into panels. Double-tap to reset. Pan while zoomed
48
-
-**Webtoon/scroll mode** -- for manhwa and vertical-scroll comics. Toggle via the toolbar button (stacked rows icon). Renders all pages in a continuous vertical scroll instead of page-by-page
49
-
-**Page thumbnails** -- toggle a thumbnail strip at the bottom to jump to any page at a glance
94
+
-**Pinch-to-zoom** -- on mobile, pinch to zoom into panels, double-tap to reset
95
+
-**Webtoon/scroll mode** -- continuous vertical scroll for manhwa and webtoons
96
+
-**Page thumbnails** -- thumbnail strip to jump to any page
50
97
-**Fullscreen** -- press `F` to toggle
51
-
-**Theme support** -- reader background respects your chosen theme (no white flash between pages in dark mode)
52
-
-**Progress tracking** -- current page saved automatically as `comic:{page}` in the reading position field. Reopen and you're on the same page
53
-
-**Preloading** -- adjacent pages are preloaded in the background for instant page turns
98
+
-**Preloading** -- adjacent pages preloaded for instant page turns
54
99
55
100
### Keyboard Shortcuts (Comic Reader)
56
101
@@ -75,86 +120,48 @@ Pages are streamed individually from the server -- no need to download the entir
75
120
76
121
### ComicInfo.xml Support
77
122
78
-
CBZ and CBR files containing a `ComicInfo.xml`(the ComicRack/Kavita/Komga standard) get automatic metadata extraction:
123
+
CBZ and CBR files containing a `ComicInfo.xml` get automatic metadata extraction:
- Manga flag detected -- books with `<Manga>Yes</Manga>` are auto-assigned the Manga book type and default to RTL reading
83
128
84
-
### Organizing Manga
129
+
##KOReader Integration
85
130
86
-
Manga in Tome is organized by **volumes**, not chapters. A volume is a single CBZ/CBR file containing all pages for that volume.
131
+
### TomeSync Plugin
87
132
88
-
- If a volume exists, that's your book. Chapters are pages within it.
89
-
- If no volume exists yet (ongoing series), individual chapter CBZs work as standalone books with their own `series_index`.
90
-
- When a new volume is released, delete the chapter entries and import the volume.
133
+
Sync reading progress and sessions between KOReader and Tome. The plugin is generated from the Settings page with your server URL and API key baked in.
91
134
92
-
## Quick Connect
135
+
- Syncs on book open, every 50 page turns, lid close/open, and book close
136
+
- Records reading sessions (duration, progress, page turns) for the Stats page
137
+
- Offline support: sessions are saved locally and flushed automatically when connectivity returns
138
+
- See [docs/koreader-plugin.md](docs/koreader-plugin.md) for full documentation
93
139
94
-
Quick Connect lets you sign in on a new device without typing your password -- useful on mobile, shared computers, or anywhere with an awkward keyboard.
140
+
### OPDS
95
141
96
-
1. On the login page, tap **Quick Connect** to get a 6-character code.
97
-
2. On a device where you're already logged in, go to **Settings > Security** and enter the code.
98
-
3. The new device is signed in immediately.
142
+
Browse and download your library from any OPDS-compatible reader. The feed is at `/opds`.
99
143
100
-
Codes expire after a few minutes and can only be used once.
101
-
102
-
## OPDS PINs
144
+
### OPDS PINs
103
145
104
146
OPDS PINs are short app-specific passwords for authenticating OPDS clients (KOReader, Panels, Chunky, etc.). Typing a full password on an e-ink keyboard is painful -- a 6-character PIN is much easier.
105
147
106
148
To set one up:
107
149
108
150
1. Go to **Settings > KOReader > OPDS PINs** and generate a new PIN.
109
151
2. In your OPDS client, enter your Tome username and the PIN as the password.
110
-
3. The OPDS feed URL is `http://your-tome-host/opds`.
152
+
3. The OPDS feed URL is `http://<your-server>:8080/opds`.
111
153
112
154
Each PIN is independent -- you can have one per device and revoke any of them without affecting your main password or other devices. Your regular password continues to work alongside any PINs you've created.
113
155
114
-
## Screenshots
115
-
116
-
*Coming soon.*
117
-
118
-
## Quick Start
119
-
120
-
### Docker (recommended)
121
-
122
-
```bash
123
-
docker run -d \
124
-
-p 8080:8080 \
125
-
-v /path/to/data:/data \
126
-
-v /path/to/ebooks:/books:ro \
127
-
-v /path/to/bindery:/bindery \
128
-
-e TOME_SECRET_KEY=changeme \
129
-
ghcr.io/you/tome
130
-
```
131
-
132
-
Or use Docker Compose -- copy `docker-compose.example.yml` to `docker-compose.yml`, edit the values, and run:
133
-
134
-
```bash
135
-
docker compose up -d
136
-
```
137
-
138
-
Open `http://localhost:8080` and follow the first-run setup to create your admin account.
|`/books`| Your ebook library (read-only is fine) |
146
-
|`/bindery`| Incoming folder for new books |
158
+
Quick Connect lets you sign in on a new device without typing your password -- useful on mobile, shared computers, or anywhere with an awkward keyboard.
147
159
148
-
## Environment Variables
160
+
1. On the login page, tap **Quick Connect** to get a 6-character code.
161
+
2. On a device where you're already logged in, go to **Settings > Security** and enter the code.
0 commit comments