~ / software / osx-presentation /


Download latest version

Trouble installing or running? See the Installation note.
Want to say thank you? You can buy me a Tea!

Thank you for your support:
Reinhard Z., Michael S., Richard K., David D., Luís Fernando S., Zoltán S., Carlo G., Antoine G., Hugo ?., Peter P., Lorenz G., Vitaly B., Martin R., Colin B., Nicola G., Martin S., Domenico G., Andrew G., Boris F., Muhammad A. A.-R., Daniel S., Philipp R. and anonymous donnors.

Special thanks to Octobus and Clever Cloud for offering a Heptapod forge supporting Mercurial to Free and Open Source Software (FOSS) (see announcement). So many thanks to Ronald Oussoren for his amazing PyObjC project.

Présentation.app is a presentation tool for pdf slides (e.g. produced using LaTeX and the popular beamer class, but it does not depend on LaTeX) for Mac OS X.
Its most notable features are:

Latest news

3.3 release

A new release is out: 3.3.0! The biggest code change introduced by this release consists in allowing to play the movies directly embedded in the slides. Additionally, the inset live video can now be moved to any corner of the presentation view.

This release also adds some minor features/fixes (see detailed list of changes below), the most notable being a fix for bugs in the help text layout introduced by Apple's upgrade of TextKit, and a more consistant way to handle deletion of onscreen annotations for multi-frame pages.

3.2.1 release

This minor release (3.2.1) fixes bug on exiting fullscreen mode on macOS 13 (Ventura).

3.2. release

A new release is out: 3.2.0! The biggest code change introduced by this release consists in switching from hand-crafted parsing of javascript code produced by the LaTeX animate package to using the JavaScriptCore framework for that task. This allows to improve the support for animations: loop and autoplay should now be supported.

This release also adds some minor features/fixes (see below), the most notable being that links to youtube video are redirected to invidious when opened in the webview for a cleaner web interface (can be deactivated with the --youtube switch).

3.1.1 release

This minor release adds support for python3.9 which is the default Python interpreter for macos 12.6. It also adds support for python3.7 for late user of macos 12.4. The PyObjC binaries are now (for 12.6+) universal (x86_64 and arm64).

3.1.0 release

A new release is out: 3.1.0! After the major release from last month (see below), this release focus on new features, most notably centered about embeded media support:

Other new features useful when presenting remotely:

The app is signed since 3.0, the installer is now notarized and stapled, so that it's easier to instal.

Signing the app is only possible by buying a membership to the apple developer program, at the cost of 99 USD a year. In order to cover this expense, I have setup a buymeacoffee page where any user can contribute a small amount, so buy me a Tea!

The new features involve low level access to PDF structures, and a lot of new code, so bugs are likely to have been introduced. Please contribute by reporting unexepected behaviour (and thanks to the beta testers of this release).

3.0.0 release

This release is a major code overhaul following python2 support being dropped by Apple with Monterey. The code has been Python 2/3 compatible for a long time, but relied on python2 and the PyObjC bindings provided by Apple (which had a lot of shortcommings to be worked around). Switching to python3/recent PyObjC allowed for a major code clean-up, but at a cost: the PyObjC bindings are now embedded in the app and the app size is more than hundred times bigger (from 113kB to 15.5MB). This release also includes many small fixes and improvements, see below for a list. The app is also now signed which makes it possible again to access the video camera and easier to install.


I do not want to use Keynote (or PowerPoint or Impress) to prepare my presentations because they do not play well with VCS. Since I use LaTeX for most of my writings, I started using beamer. But I could not find a presentation tool for PDFs that provides a decent presenter view (à la Keynote). Hence, Présentation.app was born.


Présentation.app main feature is its presenter view on the main display that shows the current and next slides, and its main view on the secondary display (if present) that shows the current slide. It also has some more or less original features:

Installation note

Allowing App from identified developer

Présentation.app and the installer are signed, the installer is notarized and stapled. After download, if macOS refuse to run the installer, you will have to open the System Preferences, go to the Security and Privacy pane, and check the "Allow apps downloaded from: App Store and identified developers" or click the Open Anyway button at the bottom of the pane:

Installing the Command Line Tools

In order to run, Présentation.app needs Python3 to be installed on your computer. Normally, upon first launch, macOS should ask you to install the Command Line Tools with the following dialog:

If Présentation.app does not start, and you are not prompted for this installation, you should launch the Command Line Tools installation process by opening the Terminal.app application (found in /Applications/Utilies), and entering the following command:

xcode-select --install

LaTeX integration


If you use beamer or any other LaTeX package to produce your slides, you can use the pdfcomment package to insert notes into your presentation that will be displayed on the presenter view. You can use the following definition to move the note away from the main content of your slide:

\pdfnote{remember to say hello}

Présentation.app also handles nicely notes generated by beamer (see chapter 19 of the Beamer User Guide), provided they are typeset with the following option:

\setbeameroption{show notes on second screen}
		A frame.
		\note{This is shown on the right.}


You can also link to web site or local files that will be opened by a web view:

\href{run:test.py}{content of test.py}
If the file is on the local filesystem and if QuickTime thinks it can handle it, the file will be opened in a movie view. In this case, the link is replaced with a poster of the video, e.g.:
\newcommand{\pdfmovie}[4]{\href{run:#1}{\framebox{\parbox[c][#3][c]{#2}{\center #4}}}}
\pdfmovie{720p25_pedestrian.mov}{6cm}{4cm}{H.264 avi}
Note however that the files are not embedded into the pdf: you will have to keep them at the right place so that the relative links work.

Animations, embeded movies, automatic page transition (new in 3.1.0)

The movies included using the media9 or movie15 packages should open in the movie view when clicked.
The animations generated with the animate package should work (clicking or pressing '<' or '>' will advance frames, and the control buttons produced by the package should work as expected).
The \transduration command is handled, pressing the space bar on a slide having a duration will make the transition happen automatically (note that 'fancy' transitions are not implemented).


Présentation.app is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

You can download a disk image containing the latest version of Présentation.app or a previous release. Présentation.app development takes place at foss.heptapod.net/macos-apps/osx-presentation, you are more than welcome to request features and to contribute merge requests!

Command Line

Présentation.app is mainly a script that can be used from command line. If you have installed Présentation.app in your Applications folder, you can put its presentation.py in your path, e.g.:

% sudo ln -s /Applications/Présentation.app/Contents/MacOS/presentation.py /usr/local/bin/
You can also get the bare script directly from the development repository:
% curl https://foss.heptapod.net/macos-apps/osx-presentation/raw/branch/default/presentation.py -o /usr/local/bin/presentation.py
% chmod a+x /usr/local/bin/presentation.py
In this case, you will have to install the PyObjC bindings:
% curl https://foss.heptapod.net/macos-apps/osx-presentation/raw/branch/default/requirements.txt -o requirements.txt
% /usr/bin/python3 -m pip install -r requirements.txt
You can then use it from the command line:
% presentation.py --help
Usage: presentation.py [-hvip:d:y] <doc.pdf>
	-h --help          print this help message then exit
	-v --version       print version then exit
	-i --icon          print icon then exit
	-p --page 

start on page int(p) -d --duration <t> duration of the talk in minutes -y --youtube do not use invidious instance <doc.pdf> file to present

The -d option set the duration of the talk if you want to use a countdown timer.

Change log

Copyright © 2012—2024, Renaud Blanch.