Table of contents

Cleaning eye-tracking recordings

eidon provides a graphical user interface for inspecting and manually correcting eye-tracking data. For this guide, we will assume that you have recorded some eye-tracking as described in the getting started guide. Your experiment folder should look similar to this:

📂 my_experiment
├─ config.yaml
├─ experiment.json
├─ 📁 materials
├─ 📁 stimuli
├─ 📁 sessions
├─ 📁 setups
└─ 📂 recordings
   └─ 📂 my-experiment.P1.20260710-172305
      ├─ 📄 my-experiment.P1.20260710-172305.csv
      └─ 📄 my-experiment.P1.20260710-172305.log

Using the cleaning interface

From the root directory of your experiment, run:

eidon clean P1

This will open a window where you can flip through every screen of your experiment and inspect the data. Use these keys to navigate and edit:

Key Meaning
(right arrow key) Go to the next screen
(left arrow key) Go to the previous screen
(left arrow key) Go to the previous screen
Home Go to the first screen
End Go to the last screen
X Remove data from this screen
Ctrl+Z Undo
ESCAPE Save and exit

You can click and drag the blue dots to move and warp the gaze data on this screen. This applies a thin-plate spline transformation to the gaze coordinates. If the data on a screen is not rescuable, you can exclude it using the X key – this will set the gaze coordinates for these samples to null.

NOTE: For reading experiments, it is recommended to only apply vertical drift correction, as judging horizontal drift visually is not feasible. You can restrict your edits to the vertical axis by checking Edit > Vertical correction only in the menu.

While correcting drift, it is often useful to visualize areas of interest. After (re-)building your experiment with the --area-images flag, you can specify the area types to visualize in eidon clean. For example, to see word-level areas of interest:

eidon clean P1 --areas word

Note that any corrections you make in the interface are not immediately applied to the gaze CSV file. Instead, they are stored in a JSON file in the recording directory:

📂 my_experiment
├─ config.yaml
├─ experiment.json
├─ 📁 materials
├─ 📁 stimuli
├─ 📁 sessions
├─ 📁 setups
└─ 📂 recordings
   └─ 📂 my-experiment.P1.20260710-172305
      ├─ 📄 my-experiment.P1.20260710-172305.edf
      ├─ 📄 my-experiment.P1.20260710-172305.asc
      ├─ 📄 my-experiment.P1.20260710-172305.json
      ├─ 📄 my-experiment.P1.20260710-172305.csv
      ├─ 📄 my-experiment.P1.20260710-172305.corrections.json
      └─ 📄 my-experiment.P1.20260710-172305.log

Applying the corrections

To apply the manual corrections, run:

eidon clean --apply

This will generate a new gaze CSV file for each recording that has a corrections file:

📂 my_experiment
├─ config.yaml
├─ experiment.json
├─ 📁 materials
├─ 📁 stimuli
├─ 📁 sessions
├─ 📁 setups
└─ 📂 recordings
   └─ 📂 my-experiment.P1.20260710-172305
      ├─ 📄 my-experiment.P1.20260710-172305.edf
      ├─ 📄 my-experiment.P1.20260710-172305.asc
      ├─ 📄 my-experiment.P1.20260710-172305.json
      ├─ 📄 my-experiment.P1.20260710-172305.csv
      ├─ 📄 my-experiment.P1.20260710-172305.corrections.json
      ├─ 📄 my-experiment.P1.20260710-172305.clean.csv
      └─ 📄 my-experiment.P1.20260710-172305.log

NOTE: Make sure to keep the original version and the corrections file and include them when publishing your dataset. This increases transparency (reporting data quality) and reusability of the dataset for other purposes (e.g., automatic gaze correction). See Jakobi et al. (2024) for more information.

Further cleaning steps

Depending on your use case, further processing is likely necessary, for example:

  • Removing blinks
  • Detecting fixations and other events
  • Analyzing data quality

The Python package pymovements can be used for these steps.


This site uses Just the Docs, a documentation theme for Jekyll.