Release v1.13

July 17, 2019


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