github richardr1126/openreader v5.4.0

3 hours ago

⚠️ Before you upgrade

  • Speech SDK providers are removed. Shared providers that used Speech SDK (ElevenLabs, Cartesia and others) are deleted on upgrade, along with the default-provider setting when it named one. Users who had one selected fall back to the instance default. Set up another provider afterwards (PR #195).
  • DeepInfra is replaced by Google AI Studio. Saved DeepInfra providers are deleted on upgrade, and so is the default-provider setting when it pointed at one. Saved keys are never moved to another provider, and narration that is already cached is kept (PR #197).
  • Database migrations 0022–0026 run automatically when Docker, pnpm start or the desktop app starts. Vercel deployments must run pnpm migrate before deploying. An external compute worker must be updated to this release's image together with the web app.
  • Docker images now run on Node.js 26 instead of the floating node:lts tag (PR #200).

✨ What's New

🚀 New

  • Reader customization: Set the font, text size, line, paragraph and letter spacing, reading width and alignment, with Compact, Balanced and Open presets. Each setting is an app default that any book can override, with inline resets and a live preview. EPUBs keep the publisher's styles until you change something (PR #197).
  • Highlight styles: Sentence and word highlighting are separate layers, each with its own switch, color and opacity, plus Theme, Amber, Ocean and Mint presets. The app-wide switches apply to every format, and books can still override them (PR #197, PR #201).
  • Browse without losing your place: Turning pages, scrolling and following links no longer move playback. Return to narration jumps back to the spoken sentence, and tapping a sentence, the scrubber, Contents, search or a bookmark follows narration again. Follow narration is now an icon button with a tooltip (PR #197).
  • Choose what is spoken: Skip numeric and author–year citations, text in square brackets or parentheses, and chosen kinds of PDF blocks. Highlighting, progress and bookmarks stay on the original text (PR #197).
  • Pauses between sentences: Every provider can add a pause between segments, and on-device Kokoro can also set piece length and a pause between pieces. Automatic keeps the voice's natural pacing. Pauses carry into audiobook export (PR #197).
  • Personal voices: Record or import a 1–15 second sample, trim it, and use it as a private voice with Fish Audio or OpenRouter. Samples stay in your own storage and are sent to the provider only when speech is generated (PR #197).
  • Voice search, favorites and custom voice IDs in the voice picker, in both the reader and Settings (PR #197).
  • New providers: Fish Audio (S2.1 Pro Free by default, plus S2.1 Pro, S2 Pro and Drama 3), OpenRouter with its live speech model list and per-model options, and Google AI Studio with Gemini Flash and Flash-Lite TTS and 30 voices. Replicate now uses the current Inworld model (PR #197).
  • More on-device Kokoro languages: Local Kokoro now speaks Spanish, Italian, Brazilian Portuguese and Hindi. Each language downloads only when you first use one of its voices (PR #194).
  • Guest account retention: A new Delete idle guest accounts task, off by default, removes guest accounts that have not signed in for the Guest idle period (default 90 days) (PR #203).

⚡ Improved

  • Kokoro pronunciation and timing: English pronunciation now matches Kokoro's own pipeline much more closely (exact sentence matches up from 83% to 90%), and British voices use their own pronunciation table. Word highlighting for on-device Kokoro comes straight from the model, so Whisper no longer runs for it (PR #194).
  • Providers admin: Settings → Admin → Providers separates Local models from External providers. Kokoro-82M has its own card with download, default and "offer to users" controls. Add provider starts from a logo picker and shows only the fields that provider needs. Voice pickers group providers the same way (PR #195).
  • Storage cleanup: Deleting a document or account now reliably removes all of its stored audio and files. Cleanups that fail are retried every 15 minutes, and a one-time Find leftover storage task removes data left behind by earlier deletes (PR #203).
  • Docs: The documentation is reorganized into Get Started, Using OpenReader, Self-Hosting, Administration and reference sections, with new Desktop App, reading and listening, audiobook export and keyboard shortcut guides (PR #191).
  • Share cards: Link previews use the real logo and font, and the download page has its own desktop card.
  • Dependencies: Better Auth 1.7.14, Electron 44.10 and this week's patches. Transitive security advisories are cleared (PR #193, PR #200).

🐛 Fixed

  • Docker image security: Images now track Node.js 26 patch releases instead of shipping an outdated Node 24 build (closes #198, PR #200). Thanks to @mahfuz-rahman007 for reporting this.
  • Compose .env location: The docs now say to put .env in examples/docker/, where Compose reads it. Secrets placed in the repository root were silently ignored (PR #191).
  • Wingdings bullets: Private-use characters such as Word's Wingdings bullets are removed before text is spoken, so they no longer make a whole request fail (PR #193).
  • EPUB links: Following a link inside a book, such as its own contents page, now plays from that chapter instead of the previous position. Chapter names in Contents no longer repeat the book title (PR #193).
  • Analytics consent: Analytics events stop as soon as consent is withdrawn (PR #193).
  • Reader panels: Clicks while a side panel is still sliding in are no longer lost, and focus moves into the panel once it is ready (PR #202).
  • Book voice and appearance saves: A book's voice choice sticks, appearance changes save while the reader is preparing, and word highlighting redraws when the page layout changes (PR #197).
  • Scheduled tasks on SQLite: Tasks now run one at a time on self-hosted instances, so they no longer fail with SQLITE_BUSY (PR #203).

Full Changelog: v5.3.0...v5.4.0

Don't miss a new openreader release

NewReleases is sending notifications on new releases.