OpenReader
Self-hosted text-to-speech document reader with synchronized highlighting
Alternative to: speechify, natural reader, elevenlabs reader
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/whisperpath and oldwhisper.cppintegration 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_URLandAUTH_SECRETare 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_URLandAUTH_SECRETbefore starting v4. The old no-auth runtime path is no longer the active model. - If you run embedded/local compute,
nats-serveris 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_KEYstill act as first-boot bootstrap seeds for the default shared provider, but runtime configuration is now centered on the Admin panel and optionalRUNTIME_SEED_JSON/RUNTIME_SEED_JSON_PATH.- If you use an external compute worker, configure
COMPUTE_WORKER_URL+COMPUTE_WORKER_TOKENand make sure app + worker share reachable object storage.
Full Changelog: https://github.com/richardr1126/openreader/compare/v3.0.0…v4.0.0