Release v1.19

Release v1.19

Nov 21, 2019

Nov 21, 2019

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

Download the latest bundle (at the end of the release notes under Assets) and let us know what you think via the #pupil channel on Discord 😄

Features and Changes

Improved Fixation Detector - #1743

We made improvements to the Fixation Detector to improve detection accuracy:

  • We were able to get rid of large gaps in between detected fixations. Now there will be more sequential fixations detected.

  • We decreased the false-positive detection rate by omitting low-confidence data.

  • We fixed a bug that would sometimes result in wrong fixations on 3D gaze data.

API Changes

Due to the improvements mentioned above, the Fixation Detector now requires calibrated gaze in both 2D and 3D mode. To reflect these changes, the method field of a fixation datum now contains either 2d gaze or 3d gaze (previously pupil vs gaze). This effects both the real-time fixations published through the network API and the fixations.csv export file.

Removed Fixation-Boosted Calibration - #1744

Since the Fixation Detector now requires calibrated gaze, it will not be used anymore to speed up the calibration process.

Improved Binocular Gaze Mapping - #1731

We improved the mapping of monocular gaze data streams by using a dynamic windows size dependent on the frame rate. This will result in better temporal accuracy when matching binocular gaze data for eyes with frequent low-confidence phases.

We also investigated some other variants of binocular gaze mapping, but chose to stick with this simple improvement. For a full evaluation and discussion, see this jupyter notebook.

Bug Fixes

  • Add/remove markers for legacy square markers works again - #1737

  • Fixed some bad UX with switching surface detection modes - #1738

  • Player is now able to load recordings with square brackets in the name - #1740

  • Fixed a crash when setting 2D detector properties via network API - #1742

  • Improved inconsistent background process behavior - #1741

Developer Notes

Automated Testing - #1721, #1724, #1730, #1735

We have done some work to consolidate old tests in the codebase and set it all up nicely with pytest. You can run the test suite from the repository root with:

pip install pytest

We set up a travis-ci integration to run pytest on all commits and pull requests. Now you will get feedback if you break something 😄 The test coverage is currently low. But from this point on, we - and you - are encouraged to write tests when adding new features and when fixing bugs.

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 Notes Update

27.11.2019 17:00: v1.19.2

We have fixed an issue in v1.19.0 where multi-part Pupil Mobile and Pupil Invisible recordings were not displayed correctly in Pupil Player - #1747. If you have opened such a recording in Pupil Player v1.19.0 then delete all *_lookup.npy files and reopen the recording in Pupil Player v1.19.2.