Reading in the browser now counts on your devices, marking a book unread no longer marks it read, and Japanese and Chinese books turn the page the right way.
docker pull ghcr.io/new-usemame/calibre-web-nextgen:v4.1.29
Reading in your browser counts everywhere else
The web reader used to keep its position to itself. It could show you how far your Kobo or KOReader had got, but reading a few chapters in the browser left no trace, so your device still thought you were where you left it. The place you reach in the browser now travels the other way too: your Kobo picks it up on its next sync, the progress on the book updates, and finishing a book in the browser marks it read. Both readers do this.
Flipping back to an earlier chapter never costs you anything. If your Kobo is at 80% and you go back to chapter 1 in the browser, your own place follows you but the furthest point stays 80%.
KOReader doesn't pick up browser reading yet — it stores position in a format only it understands, tracked on #324.
Marking a book unread no longer marks it read
Telling a book you had not read it — from the book editor, a bulk edit, or the API — set it to read whenever that book had never been marked either way before. The opposite of what was asked, and the only way to notice was to look at the checkmark afterwards.
Read status is also kept in step now if you use a custom column for it. Calibre-Web tracks reading in two places, your column and an internal record the Kobo and KOReader sync both write to, and only the column was being updated when you toggled a book. So a book you had marked Read could still be reported to your Kobo as one you were part-way through.
Japanese and Chinese ebooks turn the page the right way
Books that read right-to-left were paged as if they read left-to-right, so the button to go forward sat on the right of the screen and tapping the side you actually read towards took you backwards. The arrow keys were reversed the same way. Forward now sits where it belongs, and the buttons announce what they really do to a screen reader. This covers epub; CBZ and CBR comics still page left-to-right (#1354).
Your reading position survives a busy database
Both readers save your place constantly, and if a save failed because something else was writing to the database at that moment, the browser was told it had worked. It hadn't — the position was thrown away, and because the browser believed it was saved, nothing went back for it. You would return to the book pages behind with nothing in the log to explain it. A failed save now reports the failure, the new reader retries, and the classic reader keeps your place locally and sends it next time you open the book.
There is still no on-screen warning when a save fails for good (#1352), and closing the tab within a few seconds of a page turn can still lose that turn. Neither is a step back from v4.1.28, where the new reader didn't save your position at all.
The same "said it worked when it didn't" answer turned up in three other places, all fixed: changing an admin password from the command line, revoking a Kobo sync token, and editing an allowed-registration domain could each report success while the change was rolled back.
The Epub Fixer stops inventing fixes
Running it over the same library kept reporting conversions like "Converted page_styles.css from ascii to utf-8" on every run, for books it had already been through. Nothing was being changed — ASCII is already valid UTF-8 — but it was counted and announced as a fix anyway, and every book was rewritten and copied to the backup folder whether or not anything changed. A library-wide run restamped every file, which pushes the whole library back through Kobo, KOReader and any file sync you have. Books that genuinely need fixing are still fixed; the rest are left alone. It also no longer walks Calibre's hidden .caltrash folder, so books you deleted are no longer processed.
The "update available" banner stops re-appearing on restart
The banner is meant to show once a day and remembered the date in a file that was wiped whenever the container was recreated — exactly what happens when you pull a new image. It now lives in /config, so the promise holds across restarts. You may see it one extra time on the first start after updating. Thanks to @chloeroform for finding and fixing this.
If a custom read column is set on a multi-user server
That column belongs to the book rather than to each reader, so one person finishing a book in the browser now shows it as read for everyone. Marking a book read by hand always worked that way; what's new is that reading to the end does it too. Ordinary libraries keep read status per person. Discussion on #1351.
Something still broken? Open an issue — this build gets fixes.