OpenReader
Self-hosted text-to-speech document reader with synchronized highlighting
Alternative to: speechify, natural reader, elevenlabs reader
OpenReader turns EPUB, PDF, DOCX, TXT, and Markdown files into read-along audiobooks with word-by-word highlighting powered by ONNX Whisper alignment. It supports fully offline text-to-speech via local engines like Kokoro-FastAPI, or cloud providers such as OpenAI and ElevenLabs for narration. Documents can be exported as audiobooks, making it a self-hosted alternative to commercial TTS reading apps.
OpenReader Docker Compose example
Self-host OpenReader on your own server, homelab, or VPS starting from this Docker Compose example.
It runs OpenReader in Docker containers using the official ghcr.io/richardr1126/openreader:latest image, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
openreader:
image: ghcr.io/richardr1126/openreader:latest
volumes:
- docstore:/app/docstore
restart: unless-stopped
environment:
# Externally facing URL where users reach OpenReader. Used for auth/session cookies and callbacks.
BASE_URL: "http://localhost:3003"
# Secret used to sign auth sessions (required in v4+). Generate one with: openssl rand -base64 32
AUTH_SECRET: "changeme"
# Additional trusted origins for auth, comma-separated. BASE_URL is always trusted.
AUTH_TRUSTED_ORIGINS: ""
# First-boot seed only: default OpenAI-compatible TTS endpoint (e.g. a Kokoro-FastAPI server). Managed from the admin UI afterwards.
API_BASE: "http://localhost:8880/v1"
# First-boot seed only: API key for the default TTS provider (encrypted at rest). Leave empty if the provider needs none.
API_KEY: ""
# Comma-separated emails auto-promoted to admin (unlocks the Settings -> Admin tab).
ADMIN_EMAILS: ""
volumes:
docstore:
Values set to changeme are required — replace them with your own
values before starting OpenReader.
Prefer a managed setup? WinterFlow installs, configures, and updates OpenReader for you using this same Docker Compose configuration.