Skip to content
Branch: master
Go to file

Latest commit


Failed to load latest commit information.
Latest commit message
Commit time


Unfortunately, I no longer work in psychology and therefore don't have access to tobii devices. If you'd like to take the project forward, please do!

tobii psychopy

This is a port, with some modifications, of a script written by @SogoHiroyuki, to make it easier to use tobiis from psychopy.

The original is located here:

I have taken the Psychopy version of his script and adapted it to:

  • not use PIL
  • have a slightly more intuitive calibration procedure


Install by typing: pip install git+


You will need:

  • numpy (pip install numpy)
  • psychopy (pip install psychopy, but check the requirements at
  • the tobii pro analytics sdk 3.X (from the tobii website)
  • datetime (pip install datetime)


You can try out the controller by running as a script rather than importing it: enter python in a commandline in the same directory as the file.

When using it as part of a PsychoPy experiment, import it first, and then create a "controller" class by calling myController = tobiicontroller.TobiiController(window), where window is the handle of an open psychopy window.

The following functions of the controller can be used for calibrating and tracking:

  • myController.findEyes() mirrors the eyes so you can adjust the angle of the tobii and move the participant to the right distance
  • myController.doCalibration() calibrates the scanner. You can provide, as an optional argument, a list of tuples that contain the coordinates of your points. You should provide this list in "Active Display Coordinates", where (0.0, 0.0) is top left, and (1.0, 1.0) is bottom right. The default is [(0.5, 0.5), (0.1, 0.9), (0.1, 0.1), (0.9, 0.9), (0.9, 0.1)], and more or fewer points aren't really advisable.
  • myController.setDataFile(filename) for setting where to save data. Currently, this overwrites whatever is in the file before, so make sure you set a new file for each trial you do. You can provide None if you don't want data to be saved.
  • myController.startTracking() and myController.stopTracking() for tracking. This means the tobii actually produces data that gets picked up by python.
  • myController.recordEvent(eventString) if you want to record something that happened. This makes sure you have a record of events - i.e. stimulus onset - that is synchronised to the tobii eye tracking data stream.
  • myController.getCurrentGazePosition(), myController.getCurrentGazeAverage, myController.getCurrentPupilSize, myController.getCurrentEyePosition, if you want to get online estimates of where the subject is looking, what the pupil size is, and where the eyes are in 3D space, respectively.


A package to use Tobii Eyetrackers with psychopy in python




No releases published


You can’t perform that action at this time.