Pympress is a PDF presentation tool designed for dual-screen setups such as presentations and public talks. Highly configurable, fully-featured, and portable.
Pympress is a PDF presentation tool designed for dual-screen setups, ideal for presentations and public talks. It offers a seamless experience with native support for Beamer notes on a second screen and LibreOffice notes pages. Key features include embedded media support (GIFs, videos, audios) with VLC or GStreamer integration, text annotations in the presenter window, and an estimated talk time display that changes color based on remaining time.
Ideal for professionals delivering presentations using dual-screen setups, Pympress enhances engagement through real-time annotations and provides a clear overview of presentation timing. Its support for various media types embedded within PDFs enriches the presentation experience, ensuring clarity and effectiveness in communication.
README
What is Pympress?
Pympress is a PDF presentation tool designed for dual-screen setups such as presentations and public talks.
Highly configurable, fully-featured, and portable
Rnote is an open-source vector-based drawing app for sketching, handwritten notes and to annotate documents and pictures.
Targeted at students, teachers and those who own a drawing tablet, it provides features like PDF and picture import and export,
an infinite canvas and an adaptive UI for big and small screens.
Written in Rust and GTK4.
Soda PDF is a complete solution for creating, editing, converting, and securing PDF documents. With both a powerful desktop application and online tools, it streamlines document management and enhances productivity.
Nicotine+ aims to be a lightweight, pleasant, free and open source (FOSS) alternative to the official Soulseek client, while also providing a comprehensive set of features.
Gaphor is a UML and SysML modeling application written in Python.
It is designed to be easy to use, while still being powerful.
Gaphor implements a fully-compliant UML 2 data model, so it is much more than a picture drawing tool.
You can use Gaphor to quickly visualize different aspects of a system as well as create complete, highly complex models.
Rnote is an open-source vector-based drawing app for sketching, handwritten notes and to annotate documents and pictures.
Targeted at students, teachers and those who own a drawing tablet, it provides features like PDF and picture import and export,
an infinite canvas and an adaptive UI for big and small screens.
Written in Rust and GTK4.
Soda PDF is a complete solution for creating, editing, converting, and securing PDF documents. With both a powerful desktop application and online tools, it streamlines document management and enhances productivity.
Nicotine+ aims to be a lightweight, pleasant, free and open source (FOSS) alternative to the official Soulseek client, while also providing a comprehensive set of features.
Gaphor is a UML and SysML modeling application written in Python.
It is designed to be easy to use, while still being powerful.
Gaphor implements a fully-compliant UML 2 data model, so it is much more than a picture drawing tool.
You can use Gaphor to quickly visualize different aspects of a system as well as create complete, highly complex models.
Rnote is an open-source vector-based drawing app for sketching, handwritten notes and to annotate documents and pictures.
Targeted at students, teachers and those who own a drawing tablet, it provides features like PDF and picture import and export,
an infinite canvas and an adaptive UI for big and small screens.
Written in Rust and GTK4.
Soda PDF is a complete solution for creating, editing, converting, and securing PDF documents. With both a powerful desktop application and online tools, it streamlines document management and enhances productivity.
If you get an error message along the lines of "MSVCP100.dll is missing", get the Visual C++ 2010 redistributables from Microsoft
(x86 (32 bit) or x64 (64 bits)).
Those libraries really should already be installed on your system.
As per the python documentation on installing,
it is recommended to install packages in virtual environments.
Since mid 2022, the pipx tool automates this process.
Your distribution (or Homebrew on macOS) should have a version you can install.
Alternately, you can get the same effect with the standard venv and pip modules:
# Create virtual environment
python3 -m venv --system-site-packages ~/.local/lib/venv/pympress
# Install pympress
~/.local/lib/venv/pympress/bin/python3 -m pip install pympress
# Link to the executable from a place in your path
ln -s ~/.local/lib/venv/pympress/bin/pympress ~/.local/bin/
Note that:
If you don’t want to use system packages, you can build and install pygobject/pycairo in the virtual environment using
~/.local/lib/venv/bin/pip install pygobject pycairo
You can adjust the ~/.local/lib/venv/ path to your personal preference.
Unfortunately, installing pympress in a virtual environment means you will not get desktop integration
(i.e. installing pympress' desktop and png files to have pympress show up in your menus etc).
This is by design,
as desktop applications are intended to be installed through system packages (rpm, apt, etc.).
You can work around this in 2 ways:
Manually (note that links/copied files will need to be removed):
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.
Usage
Opening a file
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:
pympress slides.pdf
or
python3 -m pympress slides.pdf
Functionalities
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 Ctrl+L, and F11 also toggle fullscreen, though the main shortcut is just F.
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.
If you do not want to use second-slide beamer notes but prefer to have notes on their own pages, you can enable auto-detection of these notes.
Use the following snippet that prefixes the page labels with notes: on notes pages:
Media support: supports playing video, audio, and gif files embedded in (or linked from) the PDF file, with optional start/end times and looping.
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.
Using 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 \pause.
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 Home/Up/Down/End keys,
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.
Deck Overview: Pressing D will open an overview of your whole slide deck, and any slide can be opened from can simply clicking it.
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 S
Automatic full screen: pympress will automatically put the content window fullscreen on your non-primary screen when:
connecting a second screen,
extending your desktop to a second screen that was mirroring your main screen,
when starting pympress on a two-screen display.
To disable this behaviour, untick “Content fullscreen” under the “Starting configuration” menu.
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.
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.
Configurability: Your preferences are saved in a configuration file, and many options are accessible there directly. These include:
Customisable key bindings (or shortcuts),
Configurable layout of the presenter window, with 1 to 16 next slides preview
Editable PDF annotations: Annotations can be added, removed, or changed, and the modified PDF files can be saved
Automatic next slide and looping
Command line arguments
-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, bottom, or after). Overrides the detection from the file.
--log=level: Set level of verbosity in log file (DEBUG, INFO, WARNING, ERROR).
Media and autoplay
To enable media playback, you need to have either:
Gstreamer installed (enabled by default), with its gtk plugin (libgstgtk) which is sometimes packaged separately (e.g. as gst-plugin-gtk or gstreamer1.0-gtk3), and plugins gstreamer-good/-bad/-ugly based on which codecs you need, or
VLC installed (and the python-vlc module), with enabled = on under the [vlc] section of your config file.
On macOS, issues with the gstreamer brew formula may require users to set GST_PLUGIN_SYSTEM_PATH manually. For default homebrew configurations the value should be /opt/homebrew/lib/gstreamer-1.0/. Make sure to set this environmental variable globally, or pympress might not pick it up.
To produce PDFs with media inclusion, the ideal method is to use beamer’s multimedia package, always with \movie:
Introspection bindings for poppler may be shipped separately, ensure you have those as well (typelib-1_0-Poppler-0_18 on OpenSUSE, gir1.2-poppler-0.18 on Ubuntu)
optionally VLC, to play videos (with the same bitness as Python)
and the python-vlc bindings.
optionally Gstreamer to play videos (which is a Gtk library)
On linux platforms
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:
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.
Get GTK+3, Poppler and their python bindings by executing the PyGi installer. Be sure to tick all the necessary dependencies in the installer (Poppler, Cairo, Gdk-Pixbuf).
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 bindings (i.e. typelib) − see #109.
Contributing
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 harassment-free.
Abusive behaviour will not be tolerated, and can be reported by email at me@cimba.li − wrongdoers may be permanently banned.
We thank the many contributors of translations:
Agnieszka,
atsuyaw,
Cherrywoods,
Dirk Herrmann,
Dongwang,
Estel-f,
Fabio Pagnotta,
Ferdinand Fichtner,
Frederik. blome,
FriedrichFröbel,
GM,
He. yifan. xs,
Jaroslav Svoboda,
Jeertmans,
Johannchristensen,
Kristýna,
lazycat,
Leonardo Biason,
Leonvincenterd,
LogCreative,
Lorenzo. pacchiardi,
Luis Sibaja,
Marcin Dohnalik,
marquitul,
Morfit,
Mzn,
Nico,
Ogawa,
Paul,
Pierre BERTHOU,
polaksta,
Saulpierotti,
Shebangmed,
Stanisław Polak,
susobaco,
Tadashi Saito,
Tapia,
Tejas,
Timo Zhang,
Tkoyama010,
Toton95,
Vojta Netrh,
Vulpeculus,
and Cimbali.
If you also want to add or contribute to a translation, check pympress’ page on POEditor.
Note that old strings are kept and tagged removed, to give context and keep continuity between translations of successive versions.
This means removed strings are unused and do not need translating.
Packages
Official releases are made to PyPI and with github releases.
The community maintains a number of other packages or recipes to install pympress (see Install section). Any additions welcome.