✨ What's New
🚀 New
- Project Gutenberg Catalog: A new Project Gutenberg tab in Add Documents opens on the most popular public-domain books. You can search by title or author, filter by language, and add an EPUB to your current folder with one click. Admins can turn it off or point it at a self-hosted Gutendex server with an API key under Settings → Admin → Instance, or seed it with the new
gutendexblock in the runtime seed JSON. With nothing configured, it uses the public gutendex.com. (PR #157) - Bookmarks: Bookmark any sentence in PDF, EPUB, and text documents, then jump back to it from a single bookmarks menu in the reader toolbar. Bookmarks are saved to your account and deleted along with their document. (PR #162)
- Find in Document: Search the full text of the open document and jump straight to any match. (PR #162)
- Tap a Sentence to Seek: Tap or click any sentence to start playback from that point. (PR #162)
- Voice Previews: A new voice sidebar lets you hear a short sample of a voice and model speed before applying it. (PR #162)
- Storage Usage & Reclaiming Audio: Settings → Storage and each document's settings show how much space documents, generated audio, and audiobooks use, and let you clear cached audio to free space. (PR #162)
- Library Reading Progress: Documents in the library show reading-progress bars. You can filter by reading status, search by author, and sort by author or by last opened. Author and language are recorded for newly imported documents. (PR #162)
- Provider Check: The redesigned admin Providers panel can check a provider before you rely on it. It validates the settings, tests the connection and API key, lists the voices, and has the worker speak a short sample. (PR #166)
- Guest Sessions Toggle: Admins can turn guest (anonymous) sessions on or off under Settings → Admin → Instance → Site features, with no restart needed. Guest sessions are off by default. (PR #161)
⚡ Improved
- Contents & Reader Toolbar: The contents sidebar, previously EPUB-only, now covers PDF outlines and text documents too. It shares a new reader toolbar with find, bookmarks, and zoom/padding, and the toolbar stays usable while sidebars are open. Zoom/padding now also applies to PDF plain-text view. (PR #162)
- Flowing Text for PDF & EPUB: PDFs and EPUBs can be read as flowing text, and your saved position now follows the sentence being read, so it is accurate on every device. (PR #162)
- Playback Controls: The playback bar has a timeline showing which audio is already generated, an undo for accidental scrubs, and seek support from lock-screen and headset media controls. Play, pause, and skip icons, plus the EPUB icon, were redesigned. (PR #162)
- Faster Playback Startup: Playback now loads only the part of the timeline it needs to start, so audio begins sooner on long books. (PR #163)
- Durable Audiobook Exports: Finished MP3/M4B audiobooks are now kept until you clear the audio or delete the document or account. Before, they expired after 7 days. Assembly is memory-bounded and streams from disk, and an interrupted rebuild can no longer delete a good file. Export now shows checking, assembling, encoding, and uploading progress. (PR #163)
- Confirm Audio-Changing Settings: Changing the voice, model speed, language, segment length, or PDF skip settings now asks for confirmation before playback stops and audio is regenerated. The segment-length slider applies its value once you let go instead of on every drag step. (PR #156)
- Longer Word Alignment: Word timing now handles long sentences by splitting audio at quiet gaps, so the last words of long segments are highlighted too. (PR #167)
- Admin Panel Layout: Account email and Project Gutenberg settings now live under Instance, and the system check sits with scheduled tasks under Maintenance. Their Save buttons stay disabled until something changes. The Users and Storage panels have tighter mobile layouts and loading skeletons. (PR #160)
- iOS App Privacy Policy: Added a privacy policy for the OpenReader iOS app at
/ios-privacy.
🐛 Fixed
- Upload Integrity: Uploaded documents are now checked against their content hash before they are added to your library, which stops truncated PDFs and EPUBs from being saved. If the stored copy is corrupt, the upload is repaired once and otherwise fails cleanly. (PR #165 by @nonkronk)
- EPUB Highlight Flicker: Sentence and word highlights in EPUB no longer blank out or flash while audio is still being generated. Text and Markdown no longer shift as the word highlight advances. (PR #167)
- Playback Speed Reset: Skipping, going back, or seeking no longer resets the playback speed to 1x. (PR #167)
- EPUBs on iPad: Fixed large EPUBs (such as Frankenstein and Moby Dick) failing to open on iPad Safari with "The stable EPUB position could not be resolved". (PR #158, PR #159)
- Finished Audiobooks Looking Unfinished: The export panel no longer gets stuck on "Loading chapter progress…" or offers Generate for a finished audiobook after its session expires. (PR #164)
- Deepinfra Base URL: Shared Deepinfra providers saved without a base URL no longer send requests to OpenAI. (PR #166)
- Stale Settings from the Landing Page: Entering the app from the landing page no longer uses out-of-date site settings, which could hide features or wrongly send users to sign-in. (PR #161)
- Sign-in Session Handling: Signing in now reuses the existing session instead of creating an extra guest session.
- Voice Settings on Load: The reader no longer swaps voices right after opening when the provider has no voices to list, which used to discard on-screen state.
⚠️ Upgrading from v5.1.0
- Database migration
0021runs automatically at startup. It adds bookmarks and document author/language, and converts saved reading positions to the new sentence-based format. PDF and text positions are preserved. EPUB books keep their read/unread status but reopen at the start. Back up your database before upgrading. USE_ANONYMOUS_AUTH_SESSIONSis deprecated. If it is set totrue, it is used one time to turn on the new Guest sessions setting so existing instances keep guest access. After that, the admin setting (orruntimeConfig.allowAnonymousSessionsin the seed) controls guest sessions, and you can remove the variable.- Deploy the web app and compute worker together. The export-progress, storage-usage, and voice-preview worker routes changed, so an older external worker (for example on Railway) will not work with this release.
Full Changelog: v5.1.0...v5.2.0