A local-first, distraction-free reader for Windows that lets you absorb text 2–3× faster using RSVP focus mode — with a built-in local AI layer that understands your documents and a synced voice that reads to you.
Read PDFs, EPUBs, Markdown, plain text, or any text you highlight on screen. Local AI (Ollama) analyzes each document for difficulty, key terms, sections, and recall prompts. A natural voice reads aloud in sync with the visual reader. Everything runs on your machine — no accounts, no cloud, no telemetry.
| 📚 Local-first library | Import TXT, MD, PDF (via PDF.js), EPUB (via JSZip). Stored in localStorage on your machine. No cloud, ever. |
| 🎯 RSVP focus mode | One word at a time, focal letter highlighted in red at the Optimal Recognition Point. Backed by 50 years of reading research. |
| 🧠 Local AI intelligence | Ollama or Foundry Local analyses your document for difficulty, key terms, sections, recall prompts, and pacing hints. Reader auto-slows on hard passages. |
| 🗣 Synced voice | Three voice modes — off / shadow / listen. Listen mode lets the voice drive RSVP, perfectly synced via word-boundary events. |
| 📖 Context trail layout | Surrounding paragraphs ghost in above and below the focal word so you keep narrative context while reading at speed. |
| ⚡ Quick Read hotkey | Highlight any text on Windows, press Alt+Ctrl+R, and AethelReader opens an instant RSVP window for it. |
| 🔒 Truly private | No accounts. No telemetry. No analytics. Source-available. Verify yourself in the code. |
Download the latest installer from Releases:
| File | Best for |
|---|---|
AethelReader_x.y.z_x64-setup.exe |
Recommended — installs to %LOCALAPPDATA%\AethelReader |
AethelReader_x.y.z_x64_en-US.msi |
IT-managed installs |
AethelReader_x.y.z_portable.exe |
No-install, run from anywhere |
Windows SmartScreen will warn about an unsigned binary on first launch. Click More info → Run anyway. Code signing arrives in v1.0.
- Add a document with Add First Read (paste text, or pick a PDF/EPUB).
- Click the document, then Start Reading.
- (Optional) Open Settings → Local Intelligence → Set Up Ollama for AI analysis and richer pacing.
Conventional reading is bottlenecked by saccades — your eye jumps 4–5 times per second, with ~30ms of dead time per jump and additional cycles spent re-locating your place. For an average reader at 250 WPM, fixations and saccades together waste ~30% of total reading time.
RSVP (Rapid Serial Visual Presentation) removes the saccade entirely. Words appear one at a time at a fixed visual point — your eye stays still, the words come to you. The trick is the Optimal Recognition Point (ORP): every word has one specific letter that, when fixated at the visual center, lets your brain identify the whole word fastest. AethelReader colors that letter red and aligns it to a center guide so your eye locks on and stays.
What you can expect:
- Most readers comfortably hit 400–500 WPM after a 10-minute warm-up.
- Trained readers hit 700–1000+ WPM.
- Comprehension stays roughly equal to your normal reading pace at 1.5–2× speed; it drops above ~3×.
- Long sessions tire you faster than skim reading because there's no sub-vocal recovery time. Smart Mode addresses this by automatically slowing down on long or punctuation-heavy words. Local AI Pacing Hints further slow the reader on dense, technical, or visual-heavy passages.
Import via paste, file picker, or the global Quick Read hotkey. Supported formats:
- Plain text (
.txt) - Markdown (
.md) - PDF — text extracted via PDF.js page by page
- EPUB — container/OPF/spine walked via JSZip + fast-xml-parser
Documents are stored in localStorage under the key read.library.v1. Open DevTools and inspect it any time. Reading progress, highlights, and stats persist across launches.
The visual reader displays one word at a time. The Optimal Recognition Point letter is bolded and rendered in red, aligned to a vertical center guide. Settings:
- WPM — words per minute (80–1250)
- Hold to Play — press and hold mouse to read; release to pause
- Smart Mode — longer / unfamiliar words get a small extra delay
- Sentence Pauses — short / medium / long pause at periods
- Focal Lines — show the alignment guides above and below the active word
- Focal Letter Position — early / middle / late visual offset (the ORP letter is fixed per word; this controls the word's position relative to the focal lines)
Optional. Connect Ollama or Foundry Local in Settings. AethelReader sends your document text to the local model and stores the analysis with the document. The model receives the text once at import; nothing is re-sent during reading.
What you get:
- Difficulty score (1–5) with per-region difficulty marking — reader auto-slows on hard regions
- Key terms — the top concepts in the document
- Sections — auto-detected chapter / section starts
- Recall prompts — comprehension questions placed at section boundaries
- Pacing hints — explicit slow-down regions (with reasons)
- Semantic pauses — extra pauses at clause / chapter boundaries
- Visual cards — text descriptions of figures and graphs
If no AI provider is configured, AethelReader runs heuristic analysis locally — about 60% of the value with zero setup.
Three modes, picked in Settings:
| Mode | Behavior |
|---|---|
| Off | Silent visual reading. |
| Shadow | Voice plays in the background, reading each word as the visual reader hits it. Good for retention boost. |
| Listen | Voice drives the pace. The visual reader follows speech word-boundary events for perfect sync. Hands-free reading. |
Currently uses the Web Speech API (works on Windows out of the box). A bundled neural voice (Piper TTS) is planned for v0.4.
Press Alt+Ctrl+R (Windows) or Alt+Cmd+R (Mac) anywhere on Windows. AethelReader captures whatever text you've selected and opens it in a temporary RSVP window. Close it, and your library state is unchanged. Configurable in Settings (planned v0.4).
While RSVP is active, the surrounding document text fades in above and below the focal area, so you keep narrative context while reading word-by-word. Configurable: off / low / medium / high.
Alternate to RSVP — show 2–4 words at a time as a chunk. Useful for reading natural-language prose at a relaxed pace. Set readingPreset: "scan" and chunkSize in Settings.
AethelReader is genuinely local-first. To verify yourself:
- All document storage is in browser
localStorage, keyread.library.v1. Inspect it via DevTools. - The only HTTP requests in the entire codebase are to
localhost:11434(Ollama) andlocalhost:5273(Foundry Local). Both opt-in. - No telemetry. No analytics SDKs. No phone-home. Zero tracking dependencies in
package.json. - Auto-updater intentionally disabled. To upgrade, download a new release.
- All voice synthesis runs through the local Web Speech API.
+-----------------------------------------+
| React + TypeScript Frontend |
| +--------+----------+---------------+ |
| | App.tsx| ReadingP.| RsvpReader | |
| +--------+----------+---------------+ |
| | Doc | Settings | Onboarding | |
| | Detail | Drawer | Tour | |
| +--------+----------+---------------+ |
| | Cleanup| Cover | Ollama | |
| | Review | Crop | Setup | |
| +--------+----------+---------------+ |
| +----------------------------------+ |
| | lib/ intelligence | narration | |
| | importers | cleanup | |
| | tokenize | storage | |
| +----------------------------------+ |
+----------------+------------------------+
| Tauri bridge
v
+-----------------------------------------+
| Rust + Tauri 2 Shell |
| - Window management |
| - start_ollama_provider command |
| - opener plugin |
+-----------------------------------------+
Tech stack:
- Tauri 2 — native shell, ~15 MB base binary
- React 18 + TypeScript strict mode — UI
- Vite — bundler
- PDF.js — PDF text extraction
- JSZip + fast-xml-parser — EPUB extraction
- lucide-react — icons
- Vitest + @testing-library/react — tests (61 passing as of v0.3.0)
Prerequisites: Node.js 20+, Rust 1.78+, Microsoft C++ Build Tools, WebView2 (preinstalled on Windows 11).
git clone https://github.com/liminallyspaced/aethelreader
cd aethelreader
npm install
npm run tauri dev # development with hot reload
npm test # run vitest suite
npm run tauri build # production installer in src-tauri/target/release/bundle/
pwsh scripts/build-release.ps1 # full release packaging into release/AethelReader-X.Y.Z-windows-x64/- v0.3 (current) — RSVP + local AI + Web Speech voice + Ollama setup wizard + context trail
- v0.4 — Bundled Piper TTS sidecar (neural local voice), audiobook export (book → MP3 chapters), OCR for image-only PDFs (Tesseract sidecar)
- v0.5 — Multi-voice narration (different voice per chapter / character), voice cloning via XTTS
- Future — macOS / Linux ports, code signing, automated update channel (opt-in)
See CONTRIBUTING.md. Bug reports and small PRs are welcome. For larger feature work, please open an issue first to discuss.
For security disclosures, see SECURITY.md.
If AethelReader saves you time:
- ⭐ Star the repo — helps discoverability
- 💜 GitHub Sponsors — recurring or one-time
- 🐛 File detailed bug reports — these are more valuable than money
- 📣 Share it — tell people who read a lot
For commercial licensing inquiries: syntheye.help@gmail.com
PolyForm Noncommercial 1.0.0 — free for personal, educational, research, and non-profit use. Commercial use (deployment within a for-profit company, embedding in a commercial product, paid services built on top, etc.) requires a separate commercial license; contact the address above.
Built by Nicholas Siegel.
