| PYMPRESS(1) | pympress | PYMPRESS(1) |
pympress - pympress documentation
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).
Pympress was originally created and maintained by Schnouki <https://github.com/Schnouki>, on his repo <https://github.com/Schnouki/pympress>.
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
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:
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:
\addtobeamertemplate{note page}{}{\thispdfpagelabel{notes:\insertframenumber}}
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.
See the configuration file documentation for more details,
To enable media playback, you need to have either:
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:
\documentclass{beamer}
\usepackage{multimedia}
\begin{frame}{Just a mp4 here}
\centering
\movie[width=0.3\textwidth]{\includegraphics[width=0.9\textwidth]{frame1.png}}{movie.mp4}
\movie[width=0.3\textwidth]{}{animation.gif}
\movie[width=0.3\textwidth]{}{ding.ogg}
\end{frame}
If you desire autoplay, ensure you have pympress ≥ 1.7.0 and poppler ≥ 21.04, and use the movie15 package as follows:
\documentclass{beamer}
\usepackage{movie15}
\begin{document}
\begin{frame}
\begin{center}
\includemovie[attach=false,autoplay,text={%
\includegraphics{files/mailto.png}%
}]{0.4\linewidth}{0.3\linewidth}{files/random.mpg}
\end{center}
\end{frame}
\end{document}
Feel free to clone this repo and use it, modify it, redistribute it, etc, under the GPLv2+. A number of contributors <https://github.com/Cimbali/pympress/graphs/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 me@cimba.li − wrongdoers may be permanently banned.
Pympress has inline sphinx documentation (Google style <http://www.sphinx-doc.org/en/latest/ext/example_google.html>, contains rst syntax), and the docs generated from it are hosted on the github pages of this repo <https://pympress.github.io/>.
We thank the many contributors of translations: Agnieszka, atsuyaw, Cherrywoods, Dongwang, Estel-f, Fabio Pagnotta, Ferdinand Fichtner, Frederik. blome, FriedrichFröbel, GM, He. yifan. xs, Jaroslav Svoboda, Jeertmans, Kristýna, lazycat, Leonvincenterd, LogCreative, Lorenzo. pacchiardi, Luis Sibaja, Marcin Dohnalik, marquitul, Morfit, Mzn, Nico, Ogawa, Paul, Pierre BERTHOU, polaksta, Saulpierotti, Shebangmed, Stanisław Polak, susobaco, 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 <https://poeditor.com/join/project/nKfRxeN8pS>. Note that old strings are kept and tagged removed, to give context and keep continuity between translations of succcessive versions. This means removed strings are unused and do not need translating.
Pympress has a number of options available from its configuration file.
This file is usually located in:
The path to the currently used configuration file can be checked in the Help > About information window.
The shortcuts are parsed using Gtk.accelerator_parse() <https://lazka.github.io/pgi-docs/#Gtk-3.0/functions.html#Gtk.accelerator_parse>:
The parser is fairly liberal and allows lower or upper case, and also abbreviations such as “<Ctl>” and “<Ctrl>”. Key names are parsed using Gdk.keyval_from_name() <https://lazka.github.io/pgi-docs/#Gdk-3.0/functions.html#Gdk.keyval_from_name>. For character keys the name is not the symbol, but the lowercase name, e.g. one would use “<Ctrl>minus” instead of “<Ctrl>-”.
This means that any value in this list of key constants <https://lazka.github.io/pgi-docs/#Gdk-3.0/constants.html#Gdk.KEY_0> is valid (removing the initial Gdk.KEY_ part). You can verify that this value is parsed correctly from the Help > Shortcuts information window.
The panes (current slide, next slide, notes, annotations, etc.) can be rearranged arbitrarily by setting the entries of the layout section in the configuration file. Here are a couple examples of layouts, with Cu the current slide, No the notes half of the slide, Nx the next slide:
+----+----+----+ | Cu | No | Nx | +----+----+----+
Setting:
notes = {"children": ["current", "notes", "next"], "proportions": [0.33, 0.33, 0.33], "orientation": "horizontal", "resizeable": true}
+----+ | Cu | +----+ | No | +----+ | Nx | +----+
Setting:
notes = {"children": ["current", "notes", "next"], "proportions": [0.33, 0.33, 0.33], "orientation": "vertical", "resizeable": true}
+----+----+ | Cu | No | +----+----+ | Nx | +---------+
Setting:
notes = {"children": [
{"children": ["current", "notes"], "proportions": [0.5, 0.5], "orientation": "horizontal", "resizeable": true},
"next"
], "proportions": [0.5, 0.5], "orientation": "vertical", "resizeable": true}
+----+----+ | | Nx | + Cu +----+ | | No | +---------+
Setting:
notes = {"children": [
"current",
{"children": ["next", "notes"], "proportions": [0.5, 0.5], "orientation": "vertical", "resizeable": true}
], "proportions": [0.5, 0.5], "orientation": "horizontal", "resizeable": true}
And so on. You can play with the items, their nesting, their order, and the orientation in which a set of widgets appears.
For each entry the widgets (strings that are leaves of "children" nodes in this representation) must be:
A few further remarks:
Pympress uses the default Gtk theme of your system, which makes it easy to change on many OSs either globally via your Gtk preferences or per application <https://www.linuxuprising.com/2019/10/how-to-use-different-gtk-3-theme-for.html>. Here’s the way to do it on windows:
There are 2 locations, either install the theme for all your gtk apps, e.g. in C:\Users\%USERNAME%\AppData\Local\themes, or just for pympress, so in %INSTALLDIR%\share\themes (for me that’s C:\Users\%USERNAME%\AppData\Local\Programs\pympress\share\themes)
Basically pick a theme e.g. from this list of dark themes <https://www.gnome-look.org/browse/cat/135/ord/rating/?tag=dark> and make sure to unpack it in the selected directory, it needs at least %THEMENAME%\gtk-3.0\gtk.css and %THEMENAME%\index.theme, where THEMENAME is the name of the theme.
There are 2 pitfalls to be aware of, to properly install a theme:
Create a settings.ini file, either under C:\Users\%USERNAME%\AppData\Local\gtk-3.0 (global setting) or %INSTALLDIR%\etc\gtk-3.0 (just pympress) and set the contents:
[Settings] gtk-theme-name=THEMENAME
In testing this found these 2 stackoverflow questions useful:
Cimbali
2009-2011, Thomas Jost; 2015-2023 Cimbali
| 10 May, 2025 | 1.8.5 |