wxReader is a comic/manga/pdf document reader built with wxWidgets (wxPython), MuPDF (PyMuPDF), OpenGL (PyOpenGL), libvips (pyvips), and Python. Currently support Windows and Linux.
wxReaderVoiceCtrl is a hands-free external controller app for wxReader, recognizing voice command offline by vosk and pyaudio. GUI is built with wxPython.
wxReaderEyeTrackCtrl is a hands-free external controller app for wxReader, recognizing eye movement and blinking gesture offline by EyeTrax through a webcam. GUI is also built with wxPython.
-> Download link <-
wxReader for Windows10+ (>1809)
wxReader for Debian13
external controllers for Windows10+_avx2 (>1809)
Build/run from source: see below ↓
| Feature | Description |
|---|---|
| File Format Support | PDF, EPUB, ePub, ZIP, CBZ (manga or comics archive files). |
| Paging Strategy | Single Page and Two-Page spreads (with optional blank start page). Supports Right-to-Left (RTL) reading. |
| Content Extraction | Extract text and images directly from specific pages to the clipboard or disk. |
| Image Processing | Real-time built-in filters and enhancements. Support custom OpenGL frag shaders. |
| Zoom and View | Fit Width, Fit Page, Manual Zoom, Fullscreen Mode, and customizable background color. |
| Navigation | Sidebar with Outline (TOC) and File Browser tabs. Text search dialog, and a standalone TOC dialog. |
| Gallery Mode | View all thumbnails or frontpages of all books inside a same folder like a gallery. |
| File History | Automatically saves recent files and reading progress on close. |
| Interaction | Drag-and-drop file loading and full keyboard operation support. |
| External control | (Default off.) Send command+token to a local UDP port to do page turning. |
Accessibility features: The two independent external control programs, wxReaderVoiceCtrl and wxReaderEyeTrackCtrl, respectively provides offline voice-activated page turning commands and offline eye gesture based page-turning via computer camera recognition, triggered by “blinking twice while looking at a designated area of the screen.” (The are fully offline and requires a not-potato CPU.)
-
From sauce (latest dev):
- Install Python 3.12 and uv,
uv --project . sync. - Download and put the libvips shared library *.dll files inside
.\src. - Sync dependencies with
uv. - Build with
.\build.baton Windows x64. (Run the build script inside root folder.) - (Notes: upgrade pymupdf will fail the compilation.)
- Optional:
uv --project .\extctrl\voice sync,uv --project .\extctrl\eye_track sync, then build with.\build_*.bat.
- Install Python 3.12 and uv,
-
Pre-compiled binary (stable): portable
.exefiles are provided on the Releases page. Here are links to download (for win10+ x86_64): -
Upgrade from older versions: simply copy the
wxReader.cfgandpswd.txtfiles containing all user settings to the folder of a new version. You (probably) can also just unzip and overwrite existing files in the old folder.
Tested on platform: Linux-6.12.73+deb13-amd64-x86_64-with-glibc2.41
-
Run from sauce (clone the linux-dev branch of the repo!):
- Install Python 3.13 and uv,
uv --project . sync. sudo apt install libvips42t64 python3-wxgtk4.0.uv venv --python /usr/bin/python3 --system-site-packages, and then activate the venv.cd src- ../.venv/bin/python wxReader.py
- Install Python 3.13 and uv,
-
Build your own binary:
uv --project . run pyinstaller \
--name wxReader \
--distpath build \
--workpath build/pyi-build \
--specpath build/pyi-spec \
--onedir \
--icon "$(pwd)/src/icon.png" \
--add-data "$(pwd)/src/icon.png:icon.png" \
--add-data "$(pwd)/src/filters:filters" \
--add-data "$(pwd)/src/locale:locale" \
--exclude-module tkinter \
--exclude-module pillow \
--collect-submodules OpenGL \
src/wxReader.py
- Pre-compiled binary: portable files are provided on the Releases page.
See /tools.txt in the repo.
Language support currently: en_US, ja_JP, zh_SG and zh_TW.
Message files are extracted with pybabel and translated with tool Virtaal.
Check the Menubar -> Info -> Help Topic manual of wxReader.
- keys for navigation can conflict with input fields



