No description
Introduce support for external compute worker mode (`COMPUTE_MODE=worker`) using a new `WorkerComputeBackend`. This enables offloading heavy ONNX Whisper alignment and PDF layout parsing to a standalone worker service (Redis + BullMQ), improving scalability and compatibility with serverless/limited environments. - Add `@openreader/compute-core` as a shared package for ONNX inference and PDF parsing logic. - Implement `WorkerComputeBackend` and worker contract/types for remote job execution. - Update compute backend selection logic and remove previous worker mode guards. - Extend `WhisperAlignInput` and `PdfLayoutInput` types to support object keys for remote data access. - Refactor local compute backend to use `@openreader/compute-core` and support both buffer and object key inputs. - Update job runner, TTS segment alignment, and PDF layout parsing flows to use new compute backend APIs. - Add scripts, Docker workflow, and documentation for deploying and running the compute worker. - Update environment variable docs and examples for worker mode, including storage requirements and configuration. - Document published images and stack changes to reflect the new compute worker architecture. BREAKING CHANGE: `COMPUTE_MODE=worker` now requires an external compute worker service and S3-compatible object storage. Embedded SeaweedFS (`weed mini`) is not supported in worker mode. See the new documentation for deployment and configuration details. |
||
|---|---|---|
| .github | ||
| compute | ||
| docs-site | ||
| drizzle | ||
| public | ||
| scripts | ||
| src | ||
| tests | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .npmrc | ||
| Dockerfile | ||
| drizzle.config.pg.ts | ||
| drizzle.config.sqlite.ts | ||
| empty-module.ts | ||
| eslint.config.mjs | ||
| LICENSE | ||
| next.config.ts | ||
| package.json | ||
| playwright.config.ts | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| postcss.config.mjs | ||
| README.md | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
📄🔊 OpenReader
OpenReader is an open source, self-host-friendly text-to-speech document reader built with Next.js for EPUB, PDF, TXT, MD, and DOCX with synchronized read-along playback.
Previously named OpenReader-WebUI.
Get started in the docs.
✨ Highlights
- 🎯 Multi-provider TTS with OpenAI-compatible endpoints and cloud providers (Kokoro-FastAPI, KittenTTS-FastAPI, Orpheus-FastAPI or OpenAI, Replicate, DeepInfra).
- 📖 Read-along playback for PDF/EPUB with sentence-aware narration.
- ⏱️ Word-by-word highlighting via ONNX Whisper alignment in local mode (
COMPUTE_MODE=local) or external worker mode (COMPUTE_MODE=worker). - 🧱 Layout-aware PDF parsing (PP-DocLayoutV3 ONNX) with structured blocks for cleaner TTS/chaptering.
- 🛜 Sync + library import to bring docs across devices and from server-mounted folders.
- 🗂️ Flexible storage with embedded SeaweedFS or external S3-compatible backends.
- 🎧 Audiobook export in
m4b/mp3with resumable chapter processing. - 🐳 Self-host friendly with Docker, optional auth, and automatic startup migrations.
🚀 Start Here
| Goal | Link |
|---|---|
| Run with Docker | Docker Quick Start |
| Deploy on Vercel | Vercel Deployment |
| Deploy external compute worker | Compute Worker (Redis + BullMQ) |
| Develop locally | Local Development |
| Configure auth | Auth |
| Configure SQL database | Database and Migrations |
| Configure object storage | Object / Blob Storage |
| Configure TTS providers | TTS Providers |
| Run Kokoro locally | Kokoro-FastAPI |
| Run KittenTTS locally | KittenTTS-FastAPI |
| Get support or contribute | Support and Contributing |
🧭 Community
- Questions and ideas: GitHub Discussions
- Bug reports: GitHub Issues
- Contributions: open a pull request
📜 License
MIT. See LICENSE.