~ / software / osx-presentation /

Download latest version

Trouble running after 12.6 update? Install the 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. 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:

  • support for distant presentation/teaching:
    inset of live video from the presenter;
    white board and support for pen interaction;
    support for more than 2 screens setups;
    “spotlight”, “laser” and large cursor mode on presentation screen.
  • a presenter view displaying:
    the current and next slide;
    a timer;
    and the notes associated to the current slide.
  • a presentation view displaying:
    the current slide; and optionally:
    live annotations;
    inset video of the presenter;
    spotlight to highlight part of the slide.
  • hyperlinks do work:
    internal links (e.g. navigation links generated by beamer) work;
    links to local video files open the video on the presentation screen;
    embeded movies are played on the presentation screen;
    links to other files are opened in a webview on the presentation screen.
  • usable:
    from the command line (as it is a Python script);
    from the Finder (as it accepts dropping a PDF file to launch the app).

Latest news

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:

  • support for movies embeded in PDF annotations;
  • support for animation generated by the popular animate LaTeX package.

Other new features useful when presenting remotely:

  • the presentation window can be made fullscreen with the presenter window remaining windowed (double click in presentation window);
  • added a “laser” pointer in addition to the highlighting cursor.

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:

  • a clock that displays the current time or a (countdown) timer;
  • the content of PDF notes are displayed below the current slide;
  • navigation links inside the PDF do work;
  • external links can be followed, and the main view then toggles to a full screen web view or a video view if the links leads to a video on the local file system;
  • the app is in fact a script that can be used from the command line;

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 ” 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] 
	-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 duration of the talk in minutes -y --youtube do not use invidious instance file to present

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

Change log

  • 2022-12-11 –
    added redirection of youtube links using invidious, highlight on previewed slide.
    enhanced support for animations produced by the animate package, switched to transduration turned on by default.
    improved detection of clic/drag, support for annotations on multi-page frames generated by beamer.
    (version 3.2.0)
  • 2022-09-26 –
    added support for python3.7 (macos 12.4, x86_64) and python3.9 (macos 12.6, x86_64 and arm64).
    (version 3.1.1)
  • 2022-05-19 –
    added support for movies embeded in pdf using media9 or movie15 packages, for animate animations, for transduration.
    added laser pointer, alpha component to color of handwritten annotations, fullscreen mode for presentation window.
    (version 3.1.0)
  • 2022-04-14 –
    fixed for macOS 10.15+ (Catalina, BigSur, Monterey),
    added vendorized PyObjC, code signature, support for multiple video devices. improved drawing on white board perf.
    fixed open with and drag open, handling of dragging and hovering miniatures, color picker in fullscreen, presentation view aspect ratio.
    removed python2 support TouchBar support and MessageView.
    (version 3.0.0)
  • 2021-03-04 –
    made presentation window borderless for better window sharing experience.
    added slide preview on miniature hover.
    minor improvements (crosshair cursor on slides, fixed scroll behaviour, shift no longer required for mouse drawing on slide).
    (version 2.3.1)
  • 2020-05-06 –
    added white board, ability to choose screen for windows (useful for configuration 3+ screens), support for prev/next slide navigation with scrollwheel (suggestions from C. Urban).
    enhanced support for drawing annotations (support for tablet pen, edit drawings),
    made the transition from NSWebView to WKWebView for web view (fixing scale handling of the webview)
    (version 2.3.0)
  • 2020-05-06 –
    fixed touchbar support (slow page update), drawings width follows cursor size
    (version 2.2.1)
  • 2020-04-17 –
    added video overlay for remote presentations,
    added possibility to choose color for onscreen annotation
    (version 2.2.0)
  • 2020-04-16 –
    fixed crash with pdf without movies
    (version 2.1.1)
  • 2020-04-15 –
    added ability to change cursor size and spotlight mode for cursor on presentation screen,
    added controls on touchbar for hardware supporting it
    (version 2.1.0)
  • 2020-04-09 – now using pkg installer instead of dmg for distribution (for easier quarantine management)
    (version 2.0.2)
  • 2020-04-07 – new versioning scheme, fixed bug introduced in 2.0 (menu and notification were not configured properly if presentation included movies)
    (version 2.0.1)
  • 2020-04-06 –
    fixed for Mac OS X 10.15 (Catalina), now using AVFoundation for video playback
    (version 2.0)
  • 2020-03-31 – development has moved to heptapod.net, which is offered for Free and Open Source Software (FOSS) thanks to the partnership between Octobus and Clever Cloud (see announcement).
  • 2019-10-10 – Catalina users: please try the beta available on the issue tracking the status of Mac OS X 10.15 bugs and report there the problems you have.
  • 2019-05-02 –
    enhanced performance of thumbnails scrolling,
    added support for beamer’s notes on second screen,
    added test for presence of pyobjc (since conda puts its python on the path),
    reopening a file goes directly to the last displayed page
    (version 1.9)
  • 2018-09-18 –
    fixed for Mac OS X 10.14 (Mojave), added thumbnails navigation,
    added support to go forth/back with left/right mouse click, added support for audio media files and animated gif, added official support for direct manipulation of the pdf bbox,
    fixed “Open with > Présentation.app” service
    (version 1.8)
  • 2016-09-29 – fixed for Mac OS X 10.12 (Sierra), enhanced pdf reloading (version 1.7) [src]
  • 2016-02-11 – added mirror cursor on presentation view, fixed regression on composed shortcuts using cmd (version 1.6) [src]
  • 2016-01-27 – fixed app permission to open non https web pages in web view on Mac OS X 10.11, fixed app name in menu bar, added native shortcut for fullscreen (ctrl+cmd+f) (version 1.5) [src]
  • 2015-12-14 – added support for switching screens, for setting notes size, added navigation per page number input, ability to reload current presentation, fixed handling of non-ascii names for dropped files, fixed F5 shortcut (version 1.4) [src]
  • 2015-06-02 – added navigation per frame/section, added notification for available updates, fixed handling of animation produced using the animate package (version 1.3) [src]
  • 2014-09-16 – changed keybindings to better accommodate presentation devices, added ability to draw on slides, added black screen (version 1.2) [src]
  • 2013-12-02 –
    fixes: time is displayed in local tz, launch on pdf drop is fixed under 10.6;
    enhancements: finer control on movie playback, timer is displayed on dock icon
    (version 1.1)
  • 2013-11-20 – added app icon, ability to be launched by dropping a pdf to the app; improved video support (now rely on mimetype to detect videos) (version 1.0) [src]
  • 2013-11-08 – added video view, tooltips on links, start/pause timer, reduced startup time, improved python3 support (version 0.9) [src]
  • 2013-10-09 – changed layout, better hiding behaviour (version 0.8) [src]
  • 2013-07-04 – added in app help (version 0.7) [src]
  • 2013-07-01 – added “Check for update…” menu (version 0.6) [src]
  • 2013-06-28 – first public release (version 0.5) [src]

Copyright © 2012—2022, Renaud Blanch.

Read More