Pympress is a PDF presentation tool designed for dual-screen setups such as presentations and public talks. Highly configurable, fully-featured, and portable
It comes with many great features (more below):
Pympress is a free software, distributed under the terms of the GPL license (version 2 or, at your option, any later version).
Here is what the 2 screen setup looks like, with a big notes slide next to 2 small slides (current and next) on the presenter side:
Ubuntu 20.04 focal or newer, Debian 11 Bullseye or newer (maintained by @mans0954)
apt-get install pympress libgtk-3-0 libpoppler-glib8 libcairo2 python3-gi python3-gi-cairo gobject-introspection libgirepository-1.0-1 gir1.2-gtk-3.0 gir1.2-poppler-0.18
You can get pympress from the pympress COPR repo of your system. With yum or dnf, simply do:
dnf copr enable cimbali/pympress dnf install python3-pympress # optionally, required for VLC video support: dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm dnf install python3-vlc vlc
With zypper, fetch the link of the .repo in the table at the bottom of the COPR page and add it as a source.
zypper addrepo https://copr.fedorainfracloud.org/coprs/cimbali/pympress/repo/opensuse-tumbleweed/cimbali-pympress-opensuse-tumbleweed.repo zypper install python3-pympress python3-python-vlc vlc # both *vlc packages optional, required for VLC video support
python3-python-vlc are not available on your system, your can use
python3 -m pip install python-vlc.
Arch Linux from AUR (maintained by @Jose1711)
git clone https://aur.archlinux.org/python-pympress.git cd python-pympress makepkg -si pacman -S poppler-glib vlc # dependency temporarily missing from AUR package, and VLC optional for video support
Or using any other tool to manage AUR packages (yay, pacaur, etc.):
yay -S python-pympress pacman -S poppler-glib vlc # dependency temporarily missing from AUR package, and VLC optional for video support
macOS using Homebrew
brew install pympress brew cask install vlc # optional, to support playing videos with VLC integration
choco install pympress vlc # vlc optional, to support playing videos with VLC integration
Or download the latest installer from the latest Github release.
Other systems, directly from PyPI − requires python, gtk+3, poppler, and their python bindings:
pip install "pympress[vlc_video]"
[vlc_video] is optional and specifies the dependency on
python-vlc for VLC video support.
Make sure you have all the dependencies. (These are already included in binary packages or their dependencies.)
Using pip, you may want to use
python3 -m pip if
pip points to the python 2.x pip. You may also want to install with the
or install from github or downloaded sources. See the python documentation on installing.
If your python environment lacks the Gobject Introspections module, try
--system-site-packagesfor virtual environments,
pip install pygobject, which requires the correct development/header packages. See the PyPI installation instructions of PyGObject for your system).
To support playing embedded videos in the PDFs, your system must have VLC installed (with the same bitness as pympress). VLC is not distributed with pympress, but it is certainly available in your system’s package manager and on their website.
Simply start Pympress and it will ask you what file you want to open.
You can also start pympress from the command line with a file to open like so:
python3 -m pympress slides.pdf
All functionalities are available from the menus of the window with slide previews. Don't be afraid to experiment with them!
Keyboard shortcuts are also listed in these menus. Some more usual shortcuts are often available, for example
F11 also toggle fullscreen, though the main shortcut is just
A few of the fancier functionalities are listed here:
Two-screen display: See on your laptop or tablet display the current slide, the next slide, the talk time and wall-clock time, and annotations (either PDF annotations, beamer notes on second slide, or Libreoffice notes pages). The position of the beamer or Libreoffice notes in the slide is detected automatically and can be overridden via a menu option.
Media support: supports playing video, audio, and gif files embedded in (or linked from) the PDF file.
Highlight mode: Allows one to draw freehand on the slide currently on screen.
Go To Slide: To jump to a selected slide without flashing through the whole presentation on the projector, press
G or click the "current slide" box.
J or clicking the slide label will allow you to navigate slide labels instead of page numbers, useful e.g. for multi-page slides from beamer
A spin box will appear, and you will be able to navigate through your slides in the presenter window only by scrolling your mouse, with the
with the + and - buttons of the spin box, or simply by typing in the number of the slide. Press
Enter to validate going to the new slide or
Esc to cancel.
Software pointer: Clicking on the slide (in either window) while holding
ctrl down will display a software laser pointer on the slide. Or press
L to permanently switch on the laser pointer.
Talk time breakdown: The
Presentation > Timing Breakdown menu item displays a breakdown of how much time was spent on each slide, with a hierarchical breakdown per chapters/sections/etc. if available in the PDF.
Automatic file reloading: If the file is modified, pympress will reload it (and preserve the current slide, current time, etc.)
Big button mode: Add big buttons (duh) for touch displays.
Swap screens: If Pympress mixed up which screen is the projector and which is not, press
Estimated talk time: Click the
Time estimation box and set your planned talk duration. The color will allow you to see at a glance how much time you have left.
Adjust screen centering: If your slides' form factor doesn't fit the projectors' and you don't want the slide centered in the window, use the "Screen Center" option in the "Presentation" menu.
Resize Current/Next slide: You can drag the bar between both slides on the Presenter window to adjust their relative sizes to your liking.
Preferences: Some of your choices are saved in a configuration file, and more options are accessible there. See the configuration file documentation for more details.
Caching: For efficiency, Pympress caches rendered pages (up to 200 by default). If this is too memory consuming for you, you can change this number in the configuration file.
-h, --help: Shows a list of all command line arguments.
-t mm[:ss], --talk-time=mm[:ss]: The estimated (intended) talk time in minutes and optionally seconds.
-n position, --notes=position: Set the position of notes on the pdf page (none, left, right, top, or bottom). Overrides the detection from the file.
--log=level: Set level of verbosity in log file (DEBUG, INFO, WARNING, ERROR).
Pympress relies on:
The dependencies are often installed by default, or easily available through your package or software manager. For example, on ubuntu, you can run the following as root to make sure you have all the prerequisites assuming you use python3:
apt-get install python3 python3-pip libgtk-3-0 libpoppler-glib8 libcairo2 python3-gi python3-cairo python3-gi-cairo gobject-introspection libgirepository-1.0-1 libgirepository1.0-dev gir1.2-gtk-3.0 gir1.2-poppler-0.18
Different distributions might have different package naming conventions, for example the equivalent on OpenSUSE would be:
zypper install python3 python3-pip libgtk-3-0 libpoppler-glib8 libcairo2 python3-gobject python3-gobject-Gdk python3-cairo python3-gobject-cairo typelib-1_0-GdkPixbuf-2_0 typelib-1_0-Gtk-3_0 typelib-1_0-Poppler-0_18
On CentOS/RHEL/Fedora the dependencies would be:
yum install python36 python3-pip gtk3 poppler-glib cairo gdk-pixbuf2 python3-gobject python3-cairo
And on Arch Linux:
pacman -S --needed python python-pip gtk3 poppler cairo gobject-introspection poppler-glib python-gobject
Dependencies can be installed using Homebrew:
brew install --only-dependencies pympress
The binary installer for windows comes with pympress and all its dependencies packaged.
Alternately, in order to install from pypi or from source on windows, there are two ways to get the dependencies:
using MSYS2 (replace x86_64 with i686 if you're using a 32 bit machine).
Warning: this can take a substantial amount of disk size as it requires a full software distribution and building platform.
pacman -S --needed mingw-w64-x86_64-gtk3 mingw-w64-x86_64-cairo mingw-w64-x86_64-poppler mingw-w64-x86_64-python3 mingw-w64-x86_64-vlc python3-pip mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python3-gobject mingw-w64-x86_64-python3-cairo
This is also the strategy used to automate builds on appveyor.
Using PyGobjectWin32. Be sure to check the supported Python versions (up to 3.4 at the time of writing), they appear in the FEATURES list in the linked page.
Alternately, you can build your Gtk+3 stack from source using MSVC, see the Gnome wiki and this python script that compiles the whole Gtk+3 stack. This strategy has not been used successfully yet, due to problems building Poppler with its introspection bidings (i.e. typelib) − see #109.
Feel free to clone this repo and use it, modify it, redistribute it, etc, under the GPLv2+. A number of contributors have taken part in the development of pympress and submitted pull requests to improve it.
Be respectful of everyone and keep this community friendly, welcoming, and harrasment-free. Abusive behaviour will not be tolerated, and can be reported by email at email@example.com − wrongdoers may be permanently banned.
Pympress has inline sphinx documentation (Google style, contains rst syntax), and the docs generated from it are hosted on the github pages of this repo.
If you want to add or contribute to a translation, check pympress’ page on POEditor and add your efforts to make pympress available in your own language to those of @Vulpeculus, @polaksta, @susobaco, Agnieszka, FriedrichFröbel, Jaroslav Svoboda, Jeertmans, Lorenzo. pacchiardi, Nico, Saulpierotti, and Cimbali.