✨ What's New
🔐 Admin Panel
- New Admin tab in Settings, enabled via the
ADMIN_EMAILSenv var, with two sub-sections:- Shared TTS Providers: configure multiple named TTS providers, each with their own API key, without redeploying. Users can pick between them from Settings.
- Site Features: manage site-wide settings live without redeploying — toggle user signups, restrict API keys to shared providers only, set the default provider, control feature visibility, and more.
🔊 Seamless Multi-Page TTS Playback
- TTS now preloads and caches audio across multiple pages ahead of the current position, so page turns no longer require waiting for synthesis. Previously preloading stopped at the end of the current page.
- Synthesized audio is stored per-segment in S3 and persists across restarts — re-opening a document resumes from cache instead of starting over.
- Segments retry automatically with backoff on error.
- New Segments sidebar in the reader shows synthesis status for the current document.
🎛️ Per-Document TTS Tuning
- New Segment and queue behavior controls in Document Settings give you direct control over how far ahead TTS prepares:
- Segment preload depth — how many upcoming pages/locations to preload.
- Segment lookahead per page — how many segments to prepare per queued page or section.
- Max block length — max characters per TTS segment block, useful for tuning chunk size with different providers.
🔧 Other Changes
- New Changelog tab in Settings pulls in release notes and auto-opens after an upgrade.
- TTS sentence boundaries now use context from the previous segment for more natural splits at page and section breaks.
- Library, admin, and TTS panels now show skeleton placeholders instead of blank states while loading.
- Migrated to React Query for admin panels, the segments sidebar, and settings data fetching.
⚠️ Upgrading from v2.2.0
Startup migrations run automatically. Just pull the new image and restart. A few things to be aware of:
API_KEY/API_BASEare only read once on first boot to seed adefault-openaishared provider. After upgrading, confirm it appears in Settings > Admin > Shared providers, then you can remove the env vars.- Rotating
AUTH_SECRETwill invalidate stored admin provider API keys. Re-enter them in the Admin panel afterward.
Full Changelog: v2.2.0...v3.0.0