OpenReader logo

OpenReader

Self-hosted text-to-speech document reader with synchronized highlighting

Alternative to: speechify, natural reader, elevenlabs reader


About Versions (51)

v4.0.0

2026-06-02

✨ What’s New

🧱 Layout-Aware PDF Parsing + Read-Along

  • PDF parsing now runs through PP-DocLayoutV3 (ONNX) with structured block detection, cross-page stitching, and geometry-based highlighting.
  • This makes PDF read-along much more accurate and gives the app a real parsed-document pipeline instead of relying on legacy text extraction.
  • New parse progress and retry flows make long PDF processing easier to understand and recover.

⏱️ Worker-Backed Word Highlighting and Compute

  • Word-by-word highlighting now runs through ONNX Whisper alignment.
  • Compute moved to a dedicated worker/control-plane architecture with operation dedupe, SSE status events, and stale-op healing.
  • The legacy /api/whisper path and old whisper.cpp integration are gone from the active runtime.

🗂️ Rebuilt Library and Shared UI System

  • The document library has been redesigned into a Finder-style workspace with a new sidebar, toolbar, status bar, and more responsive mobile behavior.
  • New icons, list, and gallery document views replace the older library surface.
  • A shared UI system now powers buttons, modals, popovers, listboxes, and other app surfaces for a more consistent interface.

⚙️ Runtime, Admin, and Self-Hosting Changes

  • OpenReader now runs in an auth-required model. BASE_URL and AUTH_SECRET are required at startup in v4.
  • Runtime site settings moved further into admin-managed config and optional JSON seed files, including TTS limits, compute limits, upload limits, and TTS upstream/cache tuning.
  • Local and container startup can now launch embedded SeaweedFS + NATS + compute worker automatically, while external compute-worker deployments are also supported as a first-class mode.
  • Docker publishing now ships both the main app image and a separate compute-worker image.

🔧 Other Changes

  • New per-document settings storage and parsed-document APIs.
  • Standardized server error responses and structured logging with Pino.
  • Unit testing migrated to Vitest with additional route/bundle guard checks.
  • Docs and release infrastructure were updated for the v4 architecture, including versioned docs and compute-worker deployment docs.

⚠️ Upgrading from v3.0.0

Startup migrations still run automatically. Pull the new image and restart, but review these changes before upgrading:

  • Auth is now required. Set BASE_URL and AUTH_SECRET before starting v4. The old no-auth runtime path is no longer the active model.
  • If you run embedded/local compute, nats-server is now part of the stack. The Docker image includes it; local host setups need it available unless you use an external compute worker.
  • API_BASE / API_KEY still act as first-boot bootstrap seeds for the default shared provider, but runtime configuration is now centered on the Admin panel and optional RUNTIME_SEED_JSON / RUNTIME_SEED_JSON_PATH.
  • If you use an external compute worker, configure COMPUTE_WORKER_URL + COMPUTE_WORKER_TOKEN and make sure app + worker share reachable object storage.

Full Changelog: https://github.com/richardr1126/openreader/compare/v3.0.0…v4.0.0