A PDF reader with text-to-speech, continuous scrolling, and library management.
- 📖 Continuous scroll with lazy loading
- 🔊 Text-to-speech with sentence highlighting (Edge TTS)
- 📚 Library with thumbnails, search, and reading progress
- 🔍 Zoom in/out (0.5x - 4.0x)
- 📑 Table of contents sidebar (resizable)
- 💾 Auto-save reading position and zoom per book
- 📏 Configurable header/footer margins for TTS
- 🌙 Brightness filter (dim mode for eye comfort)
- 🔗 Clickable links (opens in browser)
- 📋 Text selection and copy
- ⌨️ Vim-style and WASD keyboard shortcuts
- 🤖 AI integration via Gemini web
| Key | Action |
|---|---|
| Space / p | Play/Pause TTS |
| h | Previous sentence |
| l | Next sentence |
| j | Scroll down |
| k | Scroll up |
| t | Toggle TOC sidebar |
| o | Open library |
| Ctrl+C | Copy selected text |
| s | Scroll down |
| w | Scroll up |
| d | Next sentence |
| a | Previous sentence |
| c | Open AI chat |
- This is a work in progress and it might not work as expected.
- This is python so it's slow and require a lot of memory (1GB+).
- ▶ Play starts reading from the visible page
- ⏸ Pause stops immediately
- Sentences are highlighted in yellow as they're read
- Audio is pre-cached (5 sentences ahead) for smooth playback
- Pressing next/prev pauses playback for easy navigation
Click 📏 Margins to exclude header/footer regions:
- Slide to adjust header (top) and footer (bottom) margins in points
- Red overlay previews the excluded zones
- Click Apply to save and re-analyze text
Click 🌙 Dim to reduce eye strain:
- Slider adjusts brightness from 30% to 100%
- Dark canvas background for comfortable reading
- Settings persist across sessions
Click 🔊 Voice to choose from Edge TTS voices:
- Voices organized by language
- Selection is saved
Click 📚 Library or press o:
- Books sorted by recently opened
- Search by title or path
- Thumbnails of first page
- Remove books from library
- Click and drag to select text, Ctrl+C to copy
- Click links to open in browser or jump to page
Note: To use this feature, you must login to Gemini at google.gemini.com and it will automatically save your cookies.
- Click 🤖 AI or press c:
- Select text to send context to AI
- Hold Alt to select as image
With uv (recommended):
uv run main.pyWith pip/venv:
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# .venv\Scripts\activate # Windows
pip install pymupdf edge-tts pygame pillow
python main.pyWith uv:
uv add pyinstaller --dev
uv run pyinstaller --onefile --windowed --name pdfest \
--hidden-import='PIL._tkinter_finder' \
main.pyWith pip:
pip install pyinstaller
pyinstaller --onefile --windowed --name pdfest \
--hidden-import='PIL._tkinter_finder' \
main.pyOutput: dist/pdfest
Install system-wide (optional):
sudo cp dist/pdfest /usr/local/bin/- Library:
~/.local/pdfest/library.db - Settings: brightness, voice, margins (persisted)
- When clicking on any button, the button will be kept focused and when you try to toggle tts with space it would also trigger the focused button click, to fix this you can click on the page navigation input and then click anywhere in the canvas to unfocus the button and then the space key will work as expected.
