A minimal Python PDF viewer aimed at presentations: slide-only window, keyboard navigation, virtual laser, ink annotations, and a second window with presenter mode (thumbnail grid).
- Open a PDF from a dialog on startup;
- View the slide in a window sized to match the presenter window, with no menu over the content;
- Navigate with arrow keys, Page Up / Page Down;
- Type a slide number, enter (advance or jump to the slide number you typed), then Backspace to return to the origin slide;
- Laser pointer with configurable color and trail over the slide
- Draw with the left mouse button; hold Shift for a strictly horizontal stroke
- Ink fade (via Customize in the presenter window):
- Sliding window: a band a few points wide (configurable) moves along the stroke; only what sits in the band fades, the rest stays solid until the band reaches it
- Uniform: the whole stroke fades out together
- Presenter mode: thumbnails with slide numbers, click to jump, zoom with Ctrl + scroll (or Ctrl +/-), session timer in the window title
- Customize also adjusts ink width, fade duration, colors, laser settings, etc.
- Ctrl+C quits the app (when the window has focus)
Light limits on points per stroke and per session help avoid excessive memory use.
- Python 3.10 or newer (recommended)
- PyQt6 and PyMuPDF (via
pip) - On Linux, you may need
libxcb-cursor0(or equivalent) so Qt can load the graphics plugin correctly
Clone the repository and, in the project folder:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtOn Ubuntu/Debian, if Qt fails with an xcb / cursor-related error:
sudo apt-get install -y libxcb-cursor0python reader.pyPick a PDF. The main window shows the slide; Presenter mode opens beside it.
Personal / open-source project: use and modify freely.
