Release v1.13

Release v1.13

Jun 24, 2019

Jun 24, 2019

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

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


Eye Movement Detector - #1512, #1516, #1519

Our new eye movement detector is based on Naive Segmented Linear Regression and classifies fixation, saccade, post-saccadic oscillation, and smooth pursuit movements.

Event identification is based on segmentation that simultaneously de-noises the signal and determines event boundaries. The full gaze position time-series is segmented into an approximately optimal piecewise linear function in O(n) time. Gaze feature parameters for classification into fixations, saccades, smooth pursuits and post-saccadic oscillations are derived from human labeling in a data-driven manner.[1]

More details about this approach can be found here.

The open source implementation can be found here.

See this Pupil Helper script to filter eye movements in real time.

Surface Tracker Revamp - #1268, #1515

We have rewritten the surface tracker and included many improvements, e.g.:

  • Compensate camera distortion correctly when mapping gaze onto the surface

  • Do not block when recomputing surface location cache in post-hoc surface tracker in Pupil Player

  • Improve heatmap generation

  • General UI improvements

  • Improved timeline visualizations

  • Option to freeze the image in Capture for easier surface setup and editing

  • Use more than a single video frame to define a surface in post-hoc surface tracker in Pupil Player

See the pull request description for a full list.

Please be aware that the names of the exported csv files has changed slightly. See the documentation for the new names.

Caveat: You might need to readjust your surface definitions after upgrading pre-v1.13 recordings. This is due to the internal surface definition having changed and not being fully compatible with previously saved surface definitions.

Pupil Invisible Companion Compatibility Improvements

We are gearing up for a wider release of our new eye tracking glasses Pupil Invisible, and are adding some features to Pupil desktop to support Pupil Invisible. Pupil Invisible will ship with its own Companion Android app. This app will enable one to stream video over WiFi for monitoring purposes.


  • Improved ui responsiveness - pyglui#105, #1527

  • Fix Pupil Mobile intrinsics lookup - #1510

  • Fix audio playback in cases where the audio is shorter than the world video - #1514

  • Pupil data fields theta and phi changed to be consistently floats - #1526

Developers notes

Changed Requirements

  • Eye movement detector: nslr and nslr-hmm

pip install git+
pip install git+
  • ndsi v0.5

pip install git+ -U
  • pyglui v1.24

pip install git+ -U

API changes

  • Eye movement detector: See the format documentation for information.

  • New world_process.adapt_window_size notification. Request world process to fit window size to most recent world video frame - #1524

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.

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