Release v1.9

Release v1.9

Nov 7, 2018

Nov 7, 2018

We are pleased to announce the release of Pupil v1.9!

Download the latest bundle and let us know what you think via the #pupil channel on Discord 😄



Remote Recorder - #1194

The Remote Recorder plugin no longer requires Pupil Mobile streams to be active in Capture. Instead, it lists all available devices and allows you to start and stop recordings with the click of a button. It is also possible to change the recording session names for all available devices at the same time.

This feature requires Pupil Mobile version 0.25.1 or higher.

Annotation Plugin

Annotations are no longer special types of notifications. Annotations are now sent via the IPC under the topic annotation. Recorded annotations are now stored in annotation.pldata.

Pupil Detectors - #1358

Reduced the default "maximum pupil size" setting in order to decrease false-positive detections.

Time Sync Group Members - #1277

All Time Sync actors (e.g. Capture or Pupil Mobile) join a network group for discovery and time sync announcements. We added the functionality of listing all present group members in the Time Sync plugin menu.

Be aware that all Pupil Mobile instances will be listed as pupil-mobile-follower.


Buffered Playback - #1279

We added buffering to Pupil Player. Instead of decoding each frame on demand, Player decodes multiple frames ahead of time. This improves smooth playback, even at high playback speeds of h264 encoded videos.

Be aware, that this will require a bit more of memory as a trade-off.

Video Exporters

We improved the different video export plugins.

  1. There is a new Eye Video Exporter plugin (#1301). This plugin will export eye videos for your recording.

  2. Video Export Launcher was renamed to World Video Exporter to make its task clearer. By default, the exported video is no longer named world_viz.mp4 but world.mp4 (#1295).

  3. We implemented a new export management UI that is now used in World Video Exporter, Eye Video Exporter, and iMotitions Exporter. You can add as many export tasks as needed and they will all be processed in order (#1322).

Raw Data Exporter

@fneitzel added the possibility to individually turn off pupil and gaze exports in the Raw Data Exporter (#1239).

The exported timestamp, index, and id csv columns have been renamed to more explicit titles (#1352).

iMotions Exporter: Support for world-less recordings - #1308

We added support for world-less recordings to the iMotions Exporter. World-less recordings do not include a scene (world) video and are common for AR/VR setups.

Annotation Plugin

After opening a recording in Player, all annotations (recorded or added in Player) are stored in annotation_player.pldata instead of the offline data directory. This does not override annotation.pldata, so you can reset annotations to the recorded ones by deleting annotation_player.pldata.

Recordings created by former versions of Pupil will be updated to the new format.


  • Surface edit bug on Macs with Retina displays - #1252

  • Crash when recording during Frame Publisher enabled - #1263

  • Synchronization Drift between Cameras and Recording Computer - #1266

  • Incorrect Frame Publisher world frame topic - #1276

  • Fixation Detector bug where binocular 3d gaze data was ignored - #1286

  • Race condition during Player exports - #1304

  • Incorrect log message handling in background tasks - #1305

  • Timebase changes break fixation and blink detection in Capture - #1324

  • Use of deprecated fields in Blink Detection - #1283

Developers notes

New dependencies

  • pyav 0.4.2

  • cysignal (on macOS and Linux only)

black format

The entire code base has been changed to the black format (#1343, #1344, #1346).

API changes

  • seek_control.trim_indeces_changed notification - #1329

  • set_min_calibration_confidence notification - #1361

  • Fixed field consistency for monocularly mapped gaze - #1291

We are hiring Python developers!

Hey - you're reading the developer notes, so this is for you! We're looking to hire developers to contribute to Pupil source code. If you love Python and enjoy writing code that is a joy to read, get in touch. Experience with the scientific Python stack is a plus, but not required. We have a lot of exciting projects in the pipeline.

We are also looking for full stack Python developers that have experience with kubernetes, docker, and async server-side Python.

Send an email to with a CV to start a discussion. We look forward to hearing from you.