Release v1.18

Release v1.18

Nov 5, 2019

Nov 5, 2019

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

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

Features and Changes

Player: Deprecated Recordings - #1711

We have removed support for opening recordings made with:

  • Pupil Core < v1.3 or

  • Pupil Mobile < r0.21.0

If you need to open a recording made with one of these versions, you will have to open it once in Pupil Player v1.16 or v1.17. This will upgrade the recording format to the new version. You can find more information about this in the v1.16 release notes.

Surface Tracker Export: Distorted Image <-> Surface Coordinates - #1678

We added the homographies to the surface tracker export, which can be used to convert pixel positions between surface coordinates and coordinates of the original camera image. You can use these to crop the surface from the distorted scene image, and get something similar to our surface debug view.

The homographies are exported as two additional columns in the surf_positions_<name>.csv export file:

  • dist_img_to_surf_trans

  • surf_to_dist_img_trans

Exporting Frame PTS - #1682

We added a column pts to the timestamps export in <name>_timestamps.csv. This information can be used to seek to and retrieve single frames from the exported video file without the need for sequentially iterating over the entire video.

Service: Start Binocular - #1714

For consistency with Pupil Capture, Pupil Service will now start in binocular mode.

Pupil Remote Plugin: Port No Longer Saved - #1715

The selected port for the Pupil Remote Plugin will no longer be stored in the Capture/Service settings. The default port is always 50020. If the port is already in use, Capture will choose a random other port, while Service will shut down again. You can choose a different port on startup with the -P command line flag.

Bug Fixes

  • Eye movements overlayed in Player will now be correctly exported - #1675

  • Shutting down eye processes while recording will correctly finish the recording - #1677

  • Fixed some UX issues with the Head Pose Tracker visualization window - #1669

  • Improved performance of apriltag detection for the Head Pose Tracker - #1669

  • Fixed Pupil Service UI showing port None - #1715

  • Pupil Service will now be shut down correctly if the selected port is already in use - #1716

  • Windows run*.bat files will now correctly forward CLI arguments - #1717

  • Fixed Pupil Invisible recordings displaying erroneous gaze positions at (0,0) - #1719

Developer Notes

Eye-Process Plugin List - #1674, #1681

The Eye processes are now using the Plugin_List class that we are already using in Capture, Player and Service. It takes care of managing the plugin lifecycle and makes it easier to add, remove or change plugins on the Eye process.

Command Line Interface Overhaul

We improved the handling of the Command Line Interface (CLI) of Pupil apps and added some additional start flags:

App Arguments Only - #1709

We changed the general structure of Pupil command line invocation to:

python [-h] {Capture,Player,Service} [app-specific-arguments]

For the full list of arguments, see the README of the Pupil repository. takes no arguments except -h/--help; resulting in an info message. The <app> argument has been made required and will not default to Capture.

Version Flag - #1679

You can start any Pupil App with the --version flag. This will display the current version and exit the program afterwards.

Hide UI Flag - #1712

You can now start Pupil Capture and Pupil Service with the --hide-ui flag. This will suppress all UI creation while running the program. Use remote messages to control the behavior of the program. To stop the app gracefully, you can either send a SIGTERM signal or (when running via console) hit CTRL-C to send a SIGINT signal (see point below for additional info).

CTRL-C Shutdown - #1708, #1713

We added support for gracefully shutting down all apps (Capture, Player, Service) via hitting CTRL-C in the console from where it is running. All running operations and processes will be correctly finalized and terminated.

Recording Version 2.1

The info.player.json meta-version has been bumped to 2.1. This was necessary to reverse the effects of a bug that corrupted some recordings (#1719).

We Are Hiring Python & DevOps Engineers!

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 Senior Full Stack/DevOps engineers that have experience with kubernetes, docker, and server-side Python.

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

Release Note Updates

06.11.2019 11:10: Fix opening Pupil Mobile recordings - #1722

In Pupil v1.18-4, we fixed an issue that prevented users from opening newly created Pupil Mobile recordings in Pupil Player.

11.11.2019 13:10: Fix Offline Pupil Detection on Windows - #1727

In Pupil v.1.18-35, we fixed an issue that caused Pupil Player to crash when running the Offline Pupil Detection on Windows.