Release v0.8

We are happy to release v0.8 of the Pupil platform!

Introduction of the IPC Backbone

To allow realtime interaction with other actors on the same machine and across machine boundaries we have completely rewritten the way Pupil exchanges data internally.

From now on all exchanged data (pupil data, control messages, log messages) flow through a message bus we call the IPC Backbone. All messaging has been unified and is now sent using the ZMQ PUBSUB pattern. One of the greatest features of the IPC backbone is that it can be accessed from outside Pupil Capture and across the network. As an outside actor you can write to the IPC Backbone and subscribe to (parts of) the message stream.

Message Format

Messages are defined as multi-frame zmq messages. Some message topics we are using as of now are logging , pupil , gaze , notify , delayed_notify . More info can be found here: Pupil-Interprocess-and-Network-Communication

Tapping into the IPC from outside

Any external actor (on the same box or remote) can now tap into the IPC Backbone and subscribe to all (or parts) of the message stream. It can also send messages that will be received by all subscribers in the app.

Deprecation of Pupil Server

Since this IPC Backbone is basically Pupil Server on steroids we have no need for it any more in Pupil Capture and it has been removed from the app.

This also means that the Pupil Server data format is deprecated. The IPC Backbone will give you the similar data. The only difference is that gaze, surface, and pupil data are no longer grouped. All pupil helper scripts have been updated accordingly.

Gaze Mapping

All gaze mappers have been restructured to handle temporal correlation of pupil data explicitly. Two base classes for mono and binocular mappers have been added.

Plugin API changes

Plugins will continue working as before. There are no plugin API changes except delayed notifications. See plugin.py for details.

Plugin notifications are now published on the IPC Backbone. Note, that all notification subjects have changed!

More structure to Notification names

Notification subjects are grouped by categories category.command_or_statement. Example: recording.should_stop.

New Dependencies

We use msg_pack for message serialization

pip install msgpack-python

New App: Pupil Service

We have added a third app to the Pupil project: Pupil Service. It is like Pupil Capture except it does not have a world video feed or GUI.

It is intended for AR and VR eye tracking setups. Pupil Service is meant to run in the background and controlled via network commands only. The service process has no GUI.

The tools introduced in the HMD-eyes project are made to work with Pupil Service and Pupil Capture alike.

Bugfixes and Enhancements

  • Tweak USB Camera bandwidth settings.
  • Make eye window ROI interaction more intuitive.
  • Use new marker design for screen marker calibration.
  • Renamed surfaces event to surface.
  • Added 3d location data to surface events.
  • Add jump to next fixation button in Pupil Player
  • Added option to use inverted markers in realtime surface tracker.

We hope you find these new features useful and look forward to feedback!

Best, The Pupil Dev Team