Skip to main content
Springer logoLink to Springer
. 2026 Jun 29;58(8):209. doi: 10.3758/s13428-026-03089-8

PyNeon: A Python package for the analysis of Neon multimodal mobile eye-tracking data

Qian Chu 1,2,3,✉,#, Jan-Gabriel Hartel 1,#, Alex Lepauvre 1,4, Lucia Melloni 1,2,5,6,
PMCID: PMC13314724  PMID: 42373975

Abstract

Mobile eye-tracking has revolutionized the study of human behavior and cognition by enabling researchers to record eye movements in the real world. However, the dynamic and multimodal nature of mobile eye-tracking data also introduces significant analytical challenges, including the alignment, integration, and interpretation of complex data. To fill these gaps, we present PyNeon, a versatile, community-oriented Python package designed to streamline the analysis of mobile eye-tracking, motion, and video data from the Neon eye-tracking system (Pupil Labs GmbH). We describe how PyNeon provides accessible APIs for reading, preprocessing, epoching, and exporting Neon data. Furthermore, it supports advanced video processing such as mapping between eye movement data and real-world coordinates and dynamic scanpath estimation. PyNeon presents an open-source and extendable framework for analyzing mobile eye-tracking data and forms the foundation for higher-level applications.

Supplementary Information

The online version contains supplementary material available at 10.3758/s13428-026-03089-8.

Keywords: Eye movements, Mobile eye-tracking, Pupil labs neon, Python, Open-source software, BIDS

Introduction

From the earliest investigations in classical experimental psychology – such as those by Helmholtz (1867), Yarbus (1967), and Stratton (1896) – eye movements have served as a window into the mind. These foundational studies revealed that visual perception is not a passive process. Instead, we use eye movements and fixations as our primary means to actively sample and explore the visual world (Holmqvist et al., 2011; Kowler, 2011; Martinez-Conde et al., 2004; Moca et al., 2011; Rolfs & Schweitzer, 2022).

Most contemporary research builds on this tradition, showing that eye movements are closely linked to a wide range of cognitive processes, including attention (Hoffman, 1998; Itti & Koch, 2000; Rizzolatti et al., 1987; van Ede et al., 2019), conscious perception (Frässle et al., 2014; Gollan & Raggam, 2025; Kronemer et al., 2022), memory (Hannula et al., 2010; Ryan & Shen, 2020; Voss et al., 2017), and decision-making (Orquin & Mueller Loose, 2013; Spering, 2022). Similarly, pupil size – once viewed narrowly as an index of arousal – has been increasingly recognized as a sensitive marker of cognitive effort, surprise, uncertainty, and other higher-order mental processes (Kahneman & Beatty, 1966; Grujic et al., 2024; Joshi & Gold, 2020; Schwiedrzik & Sudmann, 2020). Taken together, these lines of work reaffirm what classical studies first hinted at: the eyes are actively used to sample the visual world, opening a window to explore and characterize how perception and cognition unfold.

Most conventional eye-tracking experiments confine participants to tightly controlled, artificial settings, such as viewing stimuli on a static screen while maintaining head and/or body fixation. While these setups have been instrumental in advancing the field, studies presenting static stimuli are overly simplistic and ignore how behavior arises adaptively from the natural environment, limiting the generalizability of findings to real-world human behavior. Acknowledging these limitations, researchers have sought to bring eye-tracking research from the confines of artificial laboratory contexts to the real-world (Hayhoe & Ballard, 2005; Hayhoe & Rothkopf, 2011; Land, 2006; Nolte et al., 2026). This shift is fueled by the development of highly portable, head-wearable eye trackers, some of which are as unobtrusive as a pair of glasses, while maintaining accuracy to comparable degrees (Ehinger et al., 2019). These devices have opened new possibilities for the emerging field of neuroethology by enabling researchers to collect data in a much wider range of settings; studying eye movement patterns during locomotion (Matthis et al., 2018; Muller et al., 2024), social interactions (Hessels et al., 2022; Konovalova et al., 2021), artistic appreciation (Gulhan et al., 2024; Walker et al., 2017), among others.

Mobile eye-tracking also presents unique technical challenges. Unlike screen-based eye-tracking systems, mobile devices record gaze data relative to the wearer’s head position and orientation. Therefore, portable eye-tracking devices need to acquire additional contextual data – such as a video feed that captures the wearer’s view (i.e., a scene video) and motion data (from the head or the body) recorded by an inertial measurement unit (IMU) – to relate eye movements to the real world, which can be used, for example, to reconstruct the participant’s location in 3D space, or to help extract fixation events with higher precision. The richness of multimodal data, in turn, introduces challenges in data synchronization and integration. For instance, eye-tracking data typically has a higher sampling rate (e.g., 200 Hz) compared to the frame rate of the scene camera (e.g., 30 frames per second, fps). Resampling methods are thus desirable for data synchronization, especially in the face of potential data loss – a common problem with portable devices. The synchronization is essential for understanding oculomotor behavior in the real world with the aid of computer vision (CV) algorithms. Moreover, the naturalistic nature of experiments makes events of interest (e.g., viewing of a specific object) highly dynamic and variable, warranting novel ways of constructing event-based analyses.

To address challenges in eye-tracking data analysis, several open-source packages have been developed – among them GazeAlyze (Berger et al., 2012), eyetrackingR (Dink & Ferguson, 2015), Pymovements (Krakowczyk et al., 2023), and PupEyes (Zhang & Jonides, 2026). These tools have proven valuable for traditional, laboratory-based experiments that involve static screen stimuli with uniformly sampled gaze data acquired with stationary eye trackers. However, current open-source solutions remain limited when it comes to handling the full complexity of mobile eye-tracking. Specifically, none provides comprehensive tools for reading, synchronizing, and processing data beyond gaze and pupillometry (e.g., scene video or IMU), or for leveraging such multimodal data to address the unique challenges associated with dynamic, real-world environments. On the other hand, toolkits targeting specific challenges in mobile eye-tracking have recently emerged, including SocialEyes (Saxena et al., 2025), gazeMapper (Niehorster et al., 2025), and GazeClassify (Mueller & Mann, 2025). These packages are well suited to particular use cases (e.g., mapping gaze into world-centered reference frames or annotating scene video), but their specialization can make them less extensible for the diverse and rapidly evolving requirements of mobile eye-tracking research. Overall, the field still lacks a general framework for systematically managing and integrating multimodal mobile eye-tracking data that can serve as a backbone for advanced applications.

As a starting point toward addressing these challenges, we present PyNeon, an open-source package tailored to streamline the processing and analysis of multimodal eye-tracking data. Our package focuses on Neon, a modern head-worn eye-tracking system from Pupil Labs GmbH, and one of the many available devices for mobile eye-tracking. In this methods article, we introduce the initial release of PyNeon (https://github.com/ncc-brain/PyNeon) and provide an overview of its current core functionalities, including: data importation; basic signal processing and synchronization routines; data visualization; automated mapping of gaze data to scene videos; and export to standardized formats such as the Brain Imaging Data Structure (BIDS). Full details are available in the online documentation (https://ncc-brain.github.io/PyNeon/).

Summary of the Neon system

The Neon system by Pupil Labs is a lightweight, wearable eye tracker engineered for real-world, mobile applications. Its modular design supports attachment to various head-worn frames, suitable for a wide range of natural behavior in dynamic, everyday settings.

A detailed technical characterization of the Neon system has been provided elsewhere (Baumann & Dierkes, 2023); here, we briefly summarize its key components. The core module houses two high-speed eye cameras (nominally 200 fps) and an embedded real-time neural network for continuous gaze estimation. This system achieves a reported median accuracy < 1.5° with offset calibration (Baumann & Dierkes, 2023; Foucher et al., 2026). The module includes a nine-axis inertial measurement unit (IMU; TDK InvenSense Inc., San Jose, CA, USA; nominally 110 Hz) to capture head and body movements, supporting integrated analyses of gaze and locomotion. Visual input from the environment is recorded using a high-definition scene camera (103° × 77° field of view, 1600 × 1200 resolution, nominally 30 fps), allowing gaze data to be contextualized in a rich visual stream. When enabled, audio is recorded by dual microphones at a 44.1-kHz sampling rate and embedded into the scene video file. Data is streamed to a companion device, typically a smartphone that performs real-time processing and local storage (Fig. 1a, left).

Fig. 1.

Fig. 1

Overview of PyNeon. a Left: Diagram of Pupil Labs Neon mobile eye tracker with a typical data acquisition setup. The tennis table image illustrates a single frame from a scene video recorded during outdoor walking. The red circle indicates the concurrent gaze position. Data can be obtained either by direct extraction from the companion device or by download from Pupil Cloud. Right: Illustration of selected data files in Pupil Cloud or native format. b A Unified Modeling Language-like diagram that illustrates how files are imported into PyNeon instances and accessible as properties of the Recording class. Arrows between (a) and (b) denote the correspondence between exemplary source files and the Recording class properties. Red denotes data organized under the Stream class, blue denotes data organized under the Events class, and green denotes video-related data organized under the Video class. For full details on how PyNeon reads and organizes source files, refer to the online documentation. c Six main functionalities of PyNeon included in the first release

Pupil Labs provides several tools for acquiring and analyzing data collected with the Neon eye-tracking system. During data acquisition, a companion device records data in a proprietary native format (Fig. 1a, bottom right). These native data can be accessed programmatically using the Pupil Labs Neon Recording Python library (https://github.com/pupil-labs/pl-neon-recording/) or explored visually using the interactive desktop application Neon Player (https://docs.pupil-labs.com/neon/neon-player/). In addition, native recordings can be uploaded to Pupil Cloud (https://cloud.pupil-labs.com/), where a standardized processing pipeline is automatically applied. This pipeline performs preprocessing and organization of the data into a structured hierarchical format that can be downloaded for local use (see official documentation at https://docs.pupil-labs.com/neon/data-collection/data-format/; Fig. 1a, top right). Pupil Cloud further supports post hoc analyses, including data visualization and gaze mapping onto surfaces using reference images or marker-based systems. Notably, multiple key features of Pupil Cloud – including unlimited storage, anonymization, and full access to analysis algorithms – require a paid subscription, which limits its accessibility to users.

Inspired by these tools, PyNeon is an open-source software package that integrates core functionalities of the official Pupil Labs ecosystem while extending them with features tailored to research workflows. PyNeon can read data stored in either the native format or the Pupil Cloud-processed format through a unified application programming interface (API), internally harmonizing both formats (Fig. 1b). For example, column names from native recordings are automatically remapped to the more descriptive and standardized Pupil Cloud naming scheme (e.g., the ambiguous “x” to “gaze x [px]”). By supporting both data formats through a single API, PyNeon serves as a central hub for analysis, ensuring that workflows remain consistent and transferable regardless of the source format. Beyond data loading, PyNeon offers an end-to-end analysis framework that includes preprocessing, epoching, surface mapping, and dynamic scanpath estimation. This integrated approach enables efficient quantitative processing, visualization, and management of eye-tracking data throughout the analysis process. The following sections describe each functionality in detail.

Importing hierarchical Neon data

PyNeon provides an input/output class, Recording, to effortlessly import/export various types of data associated with a single recording session. A Recording object is initialized by specifying the path to the recording directory. This object tracks the files present in the directory based on the naming conventions from Pupil Labs. Data is read into computer memory only when the corresponding property, such as Recording.gaze or Recording.scene_video, is accessed (Fig. 1b). This design allows users to quickly access each data modality and flexibly accommodates recordings with an incomplete set of files, for example, when recordings are downloaded without the accompanying scene video.

PyNeon reads metadata from JSON files (e.g., info.json) into Python dictionaries. The scene video in MP4 format, along with its timestamps and metadata, is read into a Video object, which contains an OpenCV VideoCapture object (Bradski, 2000). In the current release, PyNeon does not natively process audio data which is optionally embedded in the scene video; however, users can manually extract the audio track from the.MP4 file for custom processing. Tabular timeseries or events data – stored as CSV files when downloaded from Pupil Cloud, or as binary files in the native format – are read into Pandas DataFrame objects (McKinney, 2010) and attached to either an instance of Stream or Events.

A Stream object contains time-series data, including gaze, eye states, and IMU. Stream data is acquired in a semi-continuous manner, with a UTC timestamp with nanosecond precision, indexing each data point with multiple measurements (example shown in Fig. 2a). In contrast, an Events object contains discrete events indexed by timestamps. These events can be physiological, including blinks, saccades, and fixations detected by Neon (Dierkes et al., 2018; Drews & Dierkes, 2024); or user-supplied, for instance, triggers sent to Neon during the recording, or event annotations made post-hoc. Events.data includes the start and end timestamps, durations, and event descriptions. Beyond data output by Neon, any tabular data indexed by the same timestamp format can be used to initialize Stream or Events objects. This allows users to process custom data, including manually or automatically annotated events (e.g., audio-derived stimulus onset), or streams from additional sensors with the full functionality provided by these classes.

Fig. 2 .

Fig. 2 

Core data structure and preprocessing functionalities in PyNeon. a Example of a tabular data structure underlying a PyNeon Stream object. Data are stored as a Pandas DataFrame (e.g., loaded from gaze.csv), where each row corresponds to a sample and the index represents UTC timestamp in nanoseconds (“timestamp [ns”]). Columns contain measurements such as gaze coordinates and other stream-specific variables. b Basic preprocessing methods of the Stream class: The Stream.crop(tmin, tmax) method extracts a time window from a stream. The Stream.restrict(other) method aligns two streams by trimming one stream to the temporal range of another, facilitating subsequent multi-stream analysis. c The Stream.interpolate() method enables resampling of data to a custom set of timestamps – for example, to enforce uniform sampling. Interpolated values at new timestamps are shown in green, original samples in black. d The Recording.concat_stream() method allows for the temporal alignment of multiple data streams by interpolating them to the same set of timestamps. After concatenation, new data points (red) are aligned to a common and uniform temporal grid (red dashed lines)

By leveraging Pandas and OpenCV to manage tabular and video data, PyNeon offers users access to whole suites of functionality from these libraries. Pandas is a versatile library that efficiently manipulates and analyzes tabular data through powerful data structures and diverse operations. OpenCV can efficiently process images and videos and provides native integration with computer vision methods. Additionally, the specialized Stream, Events, and Video classes include tailored attributes and methods for common operations and integrative analyses. For example, simply calling Stream.duration allows users to retrieve the stream’s duration in seconds, dynamically computed from the associated data; Or, users can correct the fisheye camera distortion in scene video by using Video.undistort_video() to generate a new scene video with the distortion corrected. In the following sections of the manuscript, we will provide an overview of additional methods that are crucial for mobile eye-tracking data analysis.

Preprocessing of data streams

PyNeon provides a comprehensive suite of preprocessing tools designed to address specific challenges encountered with mobile eye-tracking data. Its functionalities enable users to refine, synchronize, and align multimodal data streams, offering methods for data cropping, flexible interpolation, concatenation, and robust synchronization of gaze with video frames.

One preprocessing step is data cropping, useful when extracting data within a specified time window or aligning the start and end times of different data streams. PyNeon Stream objects thus come with a crop() method that allows cropping based on user-defined start and end times in various time formats (UTC nanoseconds/relative time/sample number) (Fig. 2b, upper). Moreover, the Stream.restrict() method limits one stream data to the timespan of another by cropping to the latter’s first and last timestamps (Fig. 2b, lower).

A key challenge of portable eye-tracking devices is their lightweight design, which limits their computational power compared to larger systems like laptops. Consequently, hardware limitations may lead to Stream data losses or temporal gaps between data points. If data were assumed to be regularly sampled at the nominal sampling rate, disregarding the actual timestamps, such irregular sampling can accumulate into substantial temporal asynchrony. To address this, PyNeon offers a Stream.interpolate() method that leverages the interp1d class from SciPy (Virtanen et al., 2020) to interpolate Stream data to a custom set of (uniformly spaced) timestamps. An example is shown in Fig. 2c, where lost samples are visibly “filled in”. By default, Stream.interpolate() performs linear interpolation for columns of stream data of float type, and nearest interpolation for columns of other data types. To avoid unreliable interpolation across large temporal gaps, PyNeon emits warnings and returns missing values when gaps exceed a configurable threshold (max_gap_ms).

This interpolation method, in turn, lays the foundation for other utilities. For example, the Stream.interpolate_events() method allows users to interpolate data points surrounding physiological events (e.g., interpolating pupil size around blinks, during which the pupils are invisible to the camera and data should therefore be considered invalid). Additionally, the Recording-level method concat_stream() enables concatenating multiple streams. The method interpolates selected streams onto a shared set of timestamps (with user-configurable sampling rate), so that data originally sampled at different frequencies (e.g., 200-Hz gaze and 110-Hz IMU) is fully synchronized after concatenation (Fig. 2d).

Moreover, since Neon gaze data is reported in pixel coordinates of the scene camera, it often needs to be interpreted in the visual context captured by the scene camera. However, the scene video has a much lower frame rate (30 fps) than gaze data (200 Hz). This disparity makes downsampling the gaze stream to match the video frames essential for studies requiring precise integration of gaze measurements with scene video frame-derived information – for example, rapid serial visual presentation experiments. While interpolating gaze to video timestamps could be one solution, it is prone to transient noise around each video frame, as only two nearby data points are used for estimation. Therefore, PyNeon instead recommends the Recording-level method sync_gaze_to_video(), which uses a rolling window average (Stream.window_average()) to estimate the mean gaze location at the time a video frame is acquired. Compared to interpolation, this approach better reflects the continuous evolution of naturalistic scenes and offers greater robustness to signal fluctuations. It is important to note that applying a window average alters the frequency characteristics of the gaze signal, and thus should be used with caution when spectral properties are of interest. In later sections, we will show how to use the synchronized gaze data in conjunction with the scene video to enable advanced gaze-video mapping.

Event-based analyses via epoching

A fundamental step in time series analysis is segmenting data into time windows around events of interest, i.e., epochs. In mobile eye-tracking, such events could be the presentation of particular stimuli (e.g., faces), the participant viewing certain scenes, or reaching specific locations. Through epoching, researchers can easily gain insights on whether oculomotor patterns occur systematically around predefined events (for example, see Nolte et al. (2025)).

PyNeon offers the Epochs class to flexibly construct, visualize, and analyze epochs. An Epochs object is initialized by supplying a source data object (Stream or Events) and a DataFrame containing time information about the epochs. Each row of the DataFrame contains the reference time (e.g., stimulus onset time), the time window (how much time before and after the reference time to extract data from), and a description string (to differentiate epochs of different types, e.g., stimulus 1 versus stimulus 2). The time information DataFrame can be defined manually or automatically extracted from an Events object with the helper function events_to_epoch_info().

Figure 3 illustrates a representative epoching analysis pipeline using a sample recording. The participant fixated on a monitor screen that alternated between black and white (duration = 750 ms) every 3 s in a dark room. Concurrent with each luminance switch, an event was sent to Neon via the real-time network API. This paradigm was designed to trigger the well-documented pupillary light reflex (Ellis, 1981), which benchmarks the validity of the analysis. Figure 3a displays the left pupil diameter throughout the recording, with grey dotted lines marking each luminance switch. While it is observable that the pupil narrows following each switch, epoching provides a clearer view.

Fig. 3.

Fig. 3

Pupillary light reflex analyzed through epoching. a Raw time series of left pupil diameter recorded during an experimental display. Grey dotted lines indicate the times of black-to-white screen switches; A transient pupil constriction is visible following each. See text for details of the paradigm. The x-axis reflects the original Neon timestamp format (UTC timestamp with nanosecond precision). b Data epoched around switches. Each colored trace represents a single epoch extracted from the same underlying recording shown in panel (a), aligned to the event time (0 s). c Average pupil diameter across epochs (mean ± SEM). The mean response illustrates the characteristic pupillary constriction following luminance increases. SEM standard error of the mean

To construct epochs, we extracted the timestamps of the switch onsets from Recording.events (which reads data from events.csv) as the reference time. We set epoching time windows to span from – 1 to 3 s relative to the reference time. Since only one event type was considered, the event type (“switch onset”) itself served as the description. The Epochs.plot() method generated the trial-by-trial epoched pupil traces depicted in Fig. 3b.

Note that in the example, the source data was a Stream of eye states, with a consistent time window (– 1 to 3 s) applied to all epochs. Under such conditions, the epoch data can also be converted to a three-dimensional NumPy array (Harris et al., 2020) with shape (nepochs×nmeasurement×ntimes) by calling the to_numpy() method. Internally, this is achieved by interpolating epoched data to a common temporal grid relative to the epoch reference time. The 3D array format allows users to perform efficient numerical operations and effortlessly compute various statistical measures. For example, in Fig. 3c, we plotted the mean and standard error of the mean of the converted 3D data. Taken together with the trial-wise plot, these analyses show that pupil constriction consistently occurred approximately 300 ms after the screen switched in luminance.

In addition to the earlier example using a Stream as the data source, Epochs can also be constructed from an Events object. To illustrate this, we show results from an experiment where a participant freely viewed 40 artworks, each presented for 4 s following a 500-ms central fixation cross. We epoched saccade and blink events from – 0.5 to 4 s relative to artwork onset and visualized trial-by-trial event durations using Epochs.plot() (Fig. 4). These plots reveal that saccade frequency increased markedly around 480 ms after stimulus onset, reflecting a shift from rapid, bottom-up scene gist perception to active exploration. In contrast, blinks were relatively rarer and less consistent in time relative to the onset of artworks.

Fig. 4.

Fig. 4

Epoching saccades and blinks during viewing of artworks. Raster plots showing the epoched saccades (top) and blinks (bottom) across 40 epochs, aligned to artwork presentation onset (vertical dashed line at 0). Each short gray line represents a single event, with line length indicating saccade or blink duration. Individual epochs are arranged along the y-axis. The x-axis shows time relative to artwork onset. The periods corresponding to the fixation cross (crimson) and artwork presentation (cyan) are indicated above the plots

Surface mapping using fiducial markers

In many experiments, researchers aim to understand gaze behavior on surfaces such as computer screens, artworks, or projections. Traditional eye-tracking systems typically handle this by performing a calibration procedure at the beginning of the experiment, where participants are asked to fixate on a series of known points on the surface. This allows the system to compute a fixed transformation that maps the raw gaze data (usually in eye-centered coordinates) to the coordinates of the surface, such as a screen. Once established, this mapping remains stable because both the participant’s head and the surface remain relatively fixed throughout the recording. However, in mobile eye-tracking, this transformation cannot remain static. The participant – and therefore the eye tracker – moves through the environment, and the relevant surfaces may change or shift in the field of view. As a result, the gaze-to-surface mapping must be dynamically updated over time. This introduces a major challenge: how to continuously and accurately estimate where someone is looking in relation to changing reference frames. Addressing this issue is key to extending traditional gaze analysis techniques (like fixations, scanpaths, and heatmaps) into more naturalistic, mobile contexts.

Fiducial markers such as AprilTags (Olson, 2011) and ArUco (Garrido-Jurado et al., 2014) offer a robust and lightweight solution for establishing spatial references in dynamic environments. These high-contrast visual markers can be unobtrusively placed on or around the target surface of interest – such as a screen, poster, or physical object. Because their positions in the physical world are known, they act as stable spatial anchors. When captured in video frames from a mobile eye tracker, their detection enables the computation of precise transformations between the video and the tagged surface. This allows gaze data to be mapped to the relevant surface even as the participant or the environment moves.

PyNeon provides a flexible and modular pipeline for integrating fiducial markers into surface-based gaze and fixation analysis. The Video.detect_markers() method identifies markers within each frame of the scene video and returns their unique marker ID along with the coordinates of their corners (Fig. 5a). When the physical positions of these markers (marker_layout, Fig. 5b) are supplied in the surface coordinate system (e.g., screen pixel space), PyNeon’s find_homographies() method can estimate a frame-wise transformation matrix between camera and surface coordinates, known as a homography. These homographies are then used by the apply_homographies() method of a gaze or fixation Stream/Events instance to map gaze and fixation data from scene camera coordinates onto surface coordinates. Further details, including customizable parameters and full workflow, can be found in Supplementary Information. This flexibility highlights an advantage of PyNeon over Pupil Cloud, which also offers AprilTag-based mapping but through a fixed workflow in which marker detection parameters and output formats are not user-configurable. Note also that unlimited access to this functionality on Pupil Cloud requires a paid subscription.

Fig. 5.

Fig. 5

Mapping eye movements to a surface using fiducial markers. a Exemplary scene video frame showing six AprilTags displayed near the borders of a computer screen. Magenta lines connect the four corners of each marker detected by the detect_markers() method. b Visualization of the user-supplied marker layout obtained by the plot_marker_layout() function, representing ground truth knowledge about the locations of markers in the surface coordinates. c Frame-wise homographies are estimated using marker detections and marker layout, which can be applied to gaze or fixation data to obtain the gaze location in surface coordinates. The top image illustrates an exemplary scanpath of a single participant mapped to the artwork. The color gradient denotes temporal sequence of fixations. d Fixations of 35 participants mapped onto the reconstructed screen frame. e Fixation heatmap obtained by smoothing the group fixation points with a Gaussian kernel. The artwork used in the example recording is under Creative Commons Zero Public Domain Designation and is reproduced from: Flemish. Philip the Good, Duke of Burgundy; Isabelle of Bourbon, 1510–1530. The Art Institute of Chicago

In Fig. 5c–e, we show the results for an experiment (similar to the one described in Fig. 4) where participants (N = 35) viewed artworks on a computer screen. Six AprilTags (tag family = 36h11) were displayed in the corners of the screen and detected by Video.detect_markers(). Successfully detected markers can be visualized on top of the scene video frame by calling Video.plot_detections(), as showcased in Fig. 5a. To establish a correspondence between the camera coordinates of the detected markers and the ground truth placement of the markers (e.g., at which locations of the screen were the markers actually presented, in pixels), users need to specify the marker layout, which can be visually verified by the plot_marker_layout() function as in Fig. 5b. Figure 5c illustrates the sequence of mapped fixations from one participant viewing the image, also known as a scanpath. At the group-level, we can probe gaze behavior across participants by plotting the fixations on the surface in Fig. 5d and the corresponding gaze density map in Fig. 5e.

For situations where placing physical markers on a surface is impractical or undesirable, PyNeon provides an alternative mapping method that detects a rectangular contour – such as the edge of a bright screen – based on luminance contrast (Supplementary Fig. 1). Since contours are more susceptible to occlusion at corners and more prone to false detections than fiducial markers, manual fine‑tuning of detection parameters may be required to achieve optimal performance. Further details about this method are provided in the Supplementary Information.

Dynamic scanpath estimation with optical flow

Beyond the information provided by fixation density – that is, where subjects tend to look most often – scanpaths, or sequences of fixations, offer a rich and complementary source of insight into cognitive processes. For example, the act of revisiting previously viewed locations serves as a critical marker of memory recollection, even in the absence of verbal reports (Kragel & Voss, 2022; Nikolaev et al., 2024; Ryan et al., 2000). Additionally, the fixation sequence plays a central role in modern models of visual saliency and gaze prediction (Kümmerer & Bethge, 2023).

While the estimation of scanpaths is straightforward when a well-defined and, ideally, static reference frame is available as in Fig. 5e, it becomes markedly more challenging in truly mobile settings. After all, the real world is dynamic: people walk past, cars pass by, and clouds drift overhead. From the perspective of a camera, the coordinates of the same object constantly change. Consequently, we cannot assume that the location of a past fixation still corresponds to the originally fixated object. To obtain accurate estimates of past fixations, we need to actively account for the evolving visual scene and the movement of objects within it.

In computer vision, this challenge of apparent motion of objects across a sequence of video frames is known as optical flow. One effective approach to address it is tracking how small image patches surrounding fixation points move from frame to frame (Lucas & Kanade, 1981), thereby estimating apparent motion regardless of whether that motion arises from observer movement, object movement, or both. PyNeon implements this technique using the pyramidal Lucas-Kanade (LK) optical flow algorithm from OpenCV (Bouguet, 1999; Bradski, 2000), with additional implementation details provided in the Supplementary Information. This algorithm estimates motion in a hierarchical, coarse-to-fine manner, enabling it to robustly track both large and small displacements across frames.

The result is a dynamic scanpath that remains aligned with the evolving visual content. Each fixation is annotated with a status flag that indicates whether it is ongoing, successfully tracked, or lost – e.g., due to occlusion, tracking drift, or moving out of frame – as illustrated in Fig. 6a. Users can adjust optical flow parameters to optimize performance in challenging scenarios, such as poor lighting or low-contrast surfaces. The resulting scanpath is returned as a frame-synchronized Stream object and can be visualized using overlay_scanpath_on_video(), as shown in Fig. 6b and c.

Fig. 6.

Fig. 6

Dynamic scanpath estimation. a Sequence of frames showcasing the principles of scanpath estimation in dynamic environments. i.) Ongoing fixation (blue) on the front of the truck. ii.) As a new fixation occurs, the past fixation gets passed to the optical flow algorithm and tracked (green). iii.) As the yellow car occludes the front of the truck, the previously tracked fixation is lost (red) because the image features used for tracking are no longer visible. iv.) Lost fixations are no longer tracked as the algorithm has no global model or memory of the scene. (v.) Once a fixation travels past the edge of the video frame, it also becomes lost. b Scanpath data format. Scanpath data is saved as a nested DataFrame indexed by video timestamps. Each row contains the corresponding frame index and a sub-DataFrame containing information about all ongoing, tracked, and newly lost fixations (including fixation coordinates and tracking status). c Two nearby frames with scanpath overlaid in a real outdoor recording, demonstrating how tracked fixations remain aligned with the underlying scene content across frames

Exporting data to Brain Imaging Data Structure (BIDS) formats

Adopting standardized data formats is essential for ensuring transparency, reproducibility, interoperability, and data sharing in research. The Brain Imaging Data Structure (BIDS) provides a widely accepted framework for organizing and sharing behavioral and neuroimaging data in a consistent, machine-readable way. Originally developed for magnetic resonance imaging datasets (Gorgolewski et al., 2016), BIDS has since been extended to cover a variety of data modalities (Poldrack et al., 2024). Two BIDS extensions are particularly relevant for mobile eye-tracking: Motion-BIDS (BEP029), which standardizes motion data including acceleration and angular velocity from IMUs (Jeung et al., 2024); and Eye-Tracking-BIDS (BEP020), which organizes gaze position and pupil data (Szinte et al., 2026). Together, these extensions capture participants’ locomotion and head movements as well as eye-movement behavior.

Preparing recordings to conform to BIDS is, however, non-trivial. BIDS prescribes specific file formats (e.g., TSV/TSV.GZ) and detailed accompanying metadata (e.g., JSON sidecars), as well as dataset-level files and a standardized directory hierarchy. Building conversion pipelines can be challenging for beginners, particularly when working with data from newer devices such as Neon. For example, the existing eye2bids conversion tool currently supports conversion only from EyeLink systems to Eye-Tracking-BIDS (Szinte et al., 2026), limiting broader adoption of BIDS for mobile eye-tracking datasets.

PyNeon provides convenience methods for exporting Neon recordings into BIDS-compatible files (Fig. 7). For Motion-BIDS export, users can call the Recording-level method export_motion_bids(), specifying an output directory, a filename prefix (typically containing the relevant BIDS entities, e.g., sub-, ses-, task-, run-), and optionally additional metadata. The method then automatically generates the four Motion-BIDS files (<prefix>_motion.tsv, <prefix>_motion.json, <prefix>_channels.tsv, <prefix>_channels.json). Device-specific metadata is extracted from the recording’s info field (e.g., serial number) and combined with relevant technical specifications from the associated Neon module. Additionally, users can pass a Python dictionary to include custom metadata fields (e.g., task name, instruction, institution name). These entries are automatically incorporated and updated in the corresponding JSON files, allowing for flexible annotation while preserving standardization.

Fig. 7.

Fig. 7

Exporting data to Motion-BIDS and Eye-Tracking-BIDS. Workflow and output files of PyNeon’s exporting to BIDS functionalities. Blue and red denote workflows related to exportation to Motion-BIDS and Eye-Tracking-BIDS, respectively. The human silhouette and eye drawings are adapted from Zane Mitrevica and John Chilton’s contributions to Scidraw.io (Chilton, 2020; Mitrevica, 2021) and are licensed under Creative Commons 4.0 (CC-BY)

Similarly, for Eye-Tracking-BIDS export, users can call Recording.export_eye_tracking_bids() with an output directory, and optionally a filename prefix and extra metadata. The resulting <prefix>_physio.tsv.gz contains timestamped gaze position and pupil diameter measurements, while events such as fixations, saccades, blinks, and logged messages are stored in <prefix>_physioevents.tsv.gz. Corresponding JSON sidecars are generated automatically and can be enriched with user-supplied metadata.

With only a small amount of additional metadata (e.g., dataset_description.json) and appropriate organization of outputs within the BIDS directory structure, PyNeon-exported datasets can be made fully BIDS-compliant and have passed validation checks using the BIDS Validator (RRID:SCR_017255, https://github.com/bids-standard/bids-validator). By supporting export to BIDS, PyNeon helps users align mobile eye-tracking data with the growing ecosystem of standardized behavioral and neural datasets, facilitating integration with existing analysis pipelines, enabling easier sharing with collaborators or the community, and lowering barriers to future reanalysis and reuse.

Discussion

Mobile eye-tracking holds the promise of transforming research on human cognition and behavior by transcending the constraints of traditional laboratory settings. Mobile eye-tracking allows participants to navigate – not on screens or in virtual worlds, but in their real, lived environment; to appreciate art – not on computer screens, but in galleries, museums, and concert halls; to interact socially – not with fictional characters, but real humans: Strangers on the streets, students in classrooms, family members at home. As such, it contributes to the ongoing push for human neuroethology – understanding human behavior and cognition, not in the narrow confines of laboratories, but in the real world. While mobile eye-tracking has already enabled many naturalistic behavioral studies (Hessels et al., 2022; Muller et al., 2024; Nolte et al., 2025; Walker et al., 2017), analyzing such datasets remains technically demanding due to the complexity of multimodal recordings and dynamic visual environments.

However, conducting mobile eye-tracking research in dynamic environments presents substantial technological and analytical challenges. Data from diverse sensors – such as scene cameras, inertial measurement units, and gaze trackers – are acquired in distinct formats, with differing sampling rates and vulnerability to unique sources of noise or data loss. Crucially, these streams cannot yield insight individually, but must be synchronized and integrated to create a coherent picture of the participant’s behavior and context. Existing software, designed for static, screen-based setups, is ill-equipped to handle this complex, multimodal interplay.

PyNeon was developed specifically to address these needs. Rather than introducing fundamentally new algorithms, PyNeon focuses on integrating established computational methods into a coherent workflow tailored to mobile eye-tracking datasets. It draws inspiration from time-series processing software like MNE (Gramfort et al., 2013) and Pynapple (Viejo et al., 2023), positioning itself as a flexible backbone for mobile eye-tracking research using Neon. By providing data structures across a rich collection of modalities (Video, Stream, Events, Epochs), PyNeon simplifies the handling of multimodal data. By designing a wide range of preprocessing methods, PyNeon facilitates efficient data manipulation, quality control, and integration. Advanced computer vision-based methods, including surface mapping and dynamic scanpath estimation, further accelerate the process of turning complex and dynamic data into scientific insight. Taken together, the comprehensive suite of methods streamlines data handling and analysis. This allows researchers to focus on what they do best: asking questions, designing experiments, and interpreting results.

A community built by and for researchers

PyNeon was built with a deep commitment to open science and collaborative development. While it is designed for seamless integration with Neon data, it is an independent, community-driven initiative unaffiliated with Pupil Labs. This approach ensures that the toolbox remains open, collaborative, and adaptable to the evolving needs of the research community. PyNeon is designed to complement rather than replace existing Python scientific libraries, building on widely used packages such as NumPy, Pandas, SciPy, and OpenCV. The codebase is fully open source under the MIT license, supporting free and unrestricted use. PyNeon is distributed via the Python Package Index (https://pypi.org/project/pyneon/), facilitating installation and adoption across a broad range of research environments. Addressing the reproducibility crisis and advancing open science, PyNeon embodies the FAIR (Findable, Accessible, Interoperable and Reusable) principles (Wilkinson et al., 2016; Zheng et al., 2024) by building on open-source libraries and providing interoperability with established data standards such as BIDS.

To support users in adopting PyNeon, we provide comprehensive documentation available at https://ncc-brain.github.io/PyNeon/, alongside sample datasets hosted on the Open Science Framework (Chu, 2026), tutorials in the form of executable Jupyter notebooks (https://ncc-brain.github.io/PyNeon/tutorials/index.html), in addition to a contributing guide and governance statement to ensure the package’s sustainability. We welcome users to report issues, contribute code, datasets, and tutorials in various formats, including notebooks and videos. We are committed to continued support and development, ensuring that PyNeon remains a living, evolving resource – built by and for the research community.

Outlook on enhancements and extensions

PyNeon should not be viewed as a static tool, as we expect it to be ever evolving based on the community’s needs. Here we outline two directions by which PyNeon can be further improved with the help of the community: enhancing currently implemented functionalities; and extending PyNeon to achieve novel, emerging goals.

PyNeon’s gaze mapping and scanpath estimation techniques are presently constrained by the absence of an accurate model of the visual world, making these techniques susceptible to visual disruptions. This limitation may be overcome by advanced computer vision techniques. For instance, Simultaneous Localization And Mapping [SLAM; (Abaspur Kazerouni et al., 2022)] could facilitate robust, long-term tracking even in the presence of discontinuous visual input, provide precise camera pose estimation, and enable spatial mapping. Detailed 3D reconstructions of experimental environments can also be obtained with advanced methods like Gaussian splatting (Kerbl et al., 2023). Such capabilities would provide richer insights into spatially grounded attentional behavior.

Building on PyNeon’s modular design, we envisage that the community could benefit from developing APIs that interface with diverse lines of existing research. For instance, frameworks for multi-participant eye-tracking (Saxena et al., 2025) and predictive gaze modeling (Kümmerer & Bethge, 2023) may be integrated with PyNeon’s infrastructure, further unifying methodological approaches for naturalistic behavior studies. Future extensions could include audio data processing – such as automated transcription and event detection – to enrich research in real-world settings. In this spirit, we invite conceptual and methodological contributions from the community to collectively advance the field of human neuroethology.

Supplementary Information

Below is the link to the electronic

ESM 1 (DOCX 315 KB) (315.3KB, docx)
ESM 2 (MP4 44.7 MB) (44.7MB, mp4)

Acknowledgements

We would like to thank Lorna Bittner and the graphics department of the Max Planck Institute for Empirical Aesthetics for their support in generating the graphics of this paper; Kyle Kahraman and Maksim Eremenko for their technical assistance; and Ivan Skelin for his comments on previous versions of the manuscript.

Authors’ contributions

Conceptualization: Q.C., J.G.H., L.M.

Funding acquisition: Q.C., L.M.

Methodology: Q.C., J.G.H., A.L.

Project administration: Q.C.

Resources: Q.C., J.G.H., L.M.

Software: Q.C., J.G.H., A.L.

Supervision: L.M.

Visualization: Q.C., J.G.H.

Writing—original draft: Q.C., J.G.H., A.L.

Writing—review & editing: Q.C., J.G.H., A.L., L.M.

Funding

Open Access funding enabled and organized by Projekt DEAL. This work was supported by a Mitacs Globalink Research Award (FR121655) to Q.C., the Max Planck – University of Toronto Centre for Neural Science and Technology to Q.C. and L.M., and the Max Planck Society to L.M.

Data availability

Sample datasets are available at 10.17605/OSF.IO/3N85H.

Code availability

The full codebase is available at https://github.com/ncc-brain/PyNeon.

Declarations

Ethics approval

Not applicable.

Consent to participate

Not applicable.

Consent for publication

Not applicable.

Competing Interests

The authors declare no competing interests.

Open Practices Statement

The package is open-source and hosted on GitHub at https://github.com/ncc-brain/PyNeon. The sample datasets are available at 10.17605/OSF.IO/3N85H. Tutorials for analyzing these sample datasets are available at https://ncc-brain.github.io/PyNeon/tutorials/index.html. None of the reported studies were preregistered.

Footnotes

Publisher's Note

Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Qian Chu and Jan-Gabriel Hartel contributed equally.

Contributor Information

Qian Chu, Email: qian.chu@ae.mpg.de.

Lucia Melloni, Email: lucia.mellonibuljevic@ruhr-uni-bochum.de.

References

  1. Abaspur Kazerouni, I., Fitzgerald, L., Dooly, G., & Toal, D. (2022). A survey of state-of-the-art on visual SLAM. Expert Systems with Applications,205, Article 117734. 10.1016/j.eswa.2022.117734 [Google Scholar]
  2. Baumann, C., & Dierkes, K. (2023). Neon Accuracy Test Report: An Evaluation of Lab and In-The-Wild Performance. Zenodo. 10.5281/zenodo.10420388
  3. Berger, C., Winkels, M., Lischke, A., & Höppner, J. (2012). GazeAlyze: A MATLAB toolbox for the analysis of eye movement data. Behavior Research Methods,44(2), 404–419. 10.3758/s13428-011-0149-x [DOI] [PubMed] [Google Scholar]
  4. Bouguet, J. (1999). Pyramidal Implementation of the Affine Lucas Kanade Feature Tracker. https://robots.stanford.edu/cs223b04/algo_affine_tracking.pdf
  5. Bradski, G. (2000). The OpenCV Library. Dr. Dobb’s Journal of Software Tools.
  6. Chilton, J. (2020). Eye [Graphic]. 10.5281/zenodo.3926351
  7. Chu, Q. (2026). PyNeon sample data . OSF. 10.17605/OSF.IO/3N85H
  8. Dierkes, K., Kassner, M., & Bulling, A. (2018). A novel approach to single-camera, glint-free 3D eye model fitting including corneal refraction. Proceedings of the 2018 ACM Symposium on Eye Tracking Research & Applications, ETRA ’18, 1–9. 10.1145/3204493.3204525
  9. Dink, J. W., & Ferguson, B. (2015). eyetrackingR: An R Library for Eye-tracking Data Analysis [Computer software]. http://www.eyetrackingr.com
  10. Drews, M., & Dierkes, K. (2024). Strategies for enhancing automatic fixation detection in head-mounted eye tracking. Behavior Research Methods,56(6), 6276–6298. 10.3758/s13428-024-02360-0 [DOI] [PMC free article] [PubMed] [Google Scholar]
  11. Ehinger, B. V., Groß, K., Ibs, I., & König, P. (2019). A new comprehensive eye-tracking test battery concurrently evaluating the Pupil Labs glasses and the EyeLink 1000. PeerJ,7, Article e7086. 10.7717/peerj.7086 [DOI] [PMC free article] [PubMed] [Google Scholar]
  12. Ellis, C. J. (1981). The pupillary light reflex in normal subjects. British Journal of Ophthalmology,65(11), 754–759. 10.1136/bjo.65.11.754 [DOI] [PMC free article] [PubMed] [Google Scholar]
  13. Foucher, V., Krug, A., & Sauter, M. (2026). Independent comparative evaluation of the Neon—A new mobile eye-tracker. Collabra: Psychology,12(1), Article 156503. 10.1525/collabra.156503 [Google Scholar]
  14. Frässle, S., Sommer, J., Jansen, A., Naber, M., & Einhäuser, W. (2014). Binocular rivalry: Frontal activity relates to introspection and action but not to perception. Journal of Neuroscience,34(5), 1738–1747. 10.1523/JNEUROSCI.4403-13.2014 [DOI] [PMC free article] [PubMed] [Google Scholar]
  15. Garrido-Jurado, S., Muñoz-Salinas, R., Madrid-Cuevas, F. J., & Marín-Jiménez, M. J. (2014). Automatic generation and detection of highly reliable fiducial markers under occlusion. Pattern Recognition,47(6), 2280–2292. 10.1016/j.patcog.2014.01.005 [Google Scholar]
  16. Gollan, B., & Raggam, P. (2025). Beyond gaze: Quantifying conscious perception through an innovative eye tracking biomarker. Proceedings of the ACM on Human-Computer Interaction,9(3), 1–17. 10.1145/372583140909183 [Google Scholar]
  17. Gorgolewski, K. J., Auer, T., Calhoun, V. D., Craddock, R. C., Das, S., Duff, E. P., Flandin, G., Ghosh, S. S., Glatard, T., Halchenko, Y. O., Handwerker, D. A., Hanke, M., Keator, D., Li, X., Michael, Z., Maumet, C., Nichols, B. N., Nichols, T. E., Pellman, J., … Poldrack, R. A. (2016). The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments. Scientific Data,3(1), Article 160044. 10.1038/sdata.2016.44 [DOI] [PMC free article] [PubMed] [Google Scholar]
  18. Gramfort, A., Luessi, M., Larson, E., Engemann, D., Strohmeier, D., Brodbeck, C., Goj, R., Jas, M., Brooks, T., Parkkonen, L., & Hämäläinen, M. (2013). MEG and EEG data analysis with MNE-Python. Frontiers in Neuroscience, 7. https://www.frontiersin.org/articles/10.3389/fnins.2013.00267 [DOI] [PMC free article] [PubMed]
  19. Grujic, N., Polania, R., & Burdakov, D. (2024). Neurobehavioral meaning of pupil size. Neuron Article S0896627324004069. 10.1016/j.neuron.2024.05.029 [DOI] [PubMed]
  20. Gulhan, D., Aliyeva, A., Bolouki, S., Aslani, A., Deroy, O., & Bahrami, B. (2024). Gaze scan-path similarity in mobile eye tracking using dynamic time warping (DTW). OSF. 10.31219/osf.io/57j8y
  21. Hannula, D., Althoff, R., Warren, D., Riggs, L., Cohen, N., & Ryan, J. (2010). Worth a glance: Using eye movements to investigate the cognitive neuroscience of memory. Frontiers in Human Neuroscience, 4. https://www.frontiersin.org/articles/10.3389/fnhum.2010.00166 [DOI] [PMC free article] [PubMed]
  22. Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith, N. J., Kern, R., Picus, M., Hoyer, S., van Kerkwijk, M. H., Brett, M., Haldane, A., del Río, J. F., Wiebe, M., Peterson, P., … Oliphant, T. E. (2020). Array programming with NumPy. Nature,585(7825), 357–362. 10.1038/s41586-020-2649-2 [DOI] [PMC free article] [PubMed] [Google Scholar]
  23. Hayhoe, M. M., & Ballard, D. (2005). Eye movements in natural behavior. Trends in Cognitive Sciences,9(4), 188–194. 10.1016/j.tics.2005.02.009 [DOI] [PubMed] [Google Scholar]
  24. Hayhoe, M. M., & Rothkopf, C. A. (2011). Vision in the natural world. WIREs Cognitive Science,2(2), 158–166. 10.1002/wcs.113 [DOI] [PubMed] [Google Scholar]
  25. Helmholtz, H. (1867). Handbuch der physiologischen Optik: Mit 213 in den Text eingedruckten Holzschnitten und 11 Tafeln. Voss. [Google Scholar]
  26. Hessels, R. S., Benjamins, J. S., Niehorster, D. C., van Doorn, A. J., Koenderink, J. J., Holleman, G. A., de Kloe, Y. J. R., Valtakari, N. V., van Hal, S., & Hooge, I. T. C. (2022). Eye contact avoidance in crowds: A large wearable eye-tracking study. Attention, Perception, & Psychophysics,84(8), 2623–2640. 10.3758/s13414-022-02541-z [DOI] [PMC free article] [PubMed] [Google Scholar]
  27. Hoffman, J. E. (1998). Visual Attention and Eye Movements. Attention (pp. 119–153). Psychology Press.
  28. Holmqvist, K., Nyström, M., Andersson, R., Dewhurst, R., Jarodzka, H., van de Weijer, J., Holmqvist, K., Nyström, M., Andersson, R., Dewhurst, R., Jarodzka, H., & Weijer, J. (2011). van de. A comprehensive guide to methods and measures. Oxford University Press. [Google Scholar]
  29. Itti, L., & Koch, C. (2000). A saliency-based search mechanism for overt and covert shifts of visual attention. Vision Research,40(10), 1489–1506. 10.1016/S0042-6989(99)00163-7 [DOI] [PubMed] [Google Scholar]
  30. Jeung, S., Cockx, H., Appelhoff, S., Berg, T., Gramann, K., Grothkopp, S., Warmerdam, E., Hansen, C., Oostenveld, R., & Welzel, J. (2024). Motion-BIDS: An extension to the brain imaging data structure to organize motion data for reproducible research. Scientific Data,11(1), 716. 10.1038/s41597-024-03559-8 [DOI] [PMC free article] [PubMed] [Google Scholar]
  31. Joshi, S., & Gold, J. I. (2020). Pupil size as a window on neural substrates of cognition. Trends in Cognitive Sciences,24(6), 466–480. 10.1016/j.tics.2020.03.005 [DOI] [PMC free article] [PubMed] [Google Scholar]
  32. Kahneman, D., & Beatty, J. (1966). Pupil diameter and load on memory. Science,154(3756), 1583–1585. 10.1126/science.154.3756.1583 [DOI] [PubMed] [Google Scholar]
  33. Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. (2023). 3D gaussian splatting for real-time radiance field rendering. ACM Transactions on Graphics. 10.1145/3592433 [Google Scholar]
  34. Konovalova, I., Antolin, J. V., Bolderston, H., & Gregory, N. J. (2021). Adults with higher social anxiety show avoidant gaze behaviour in a real-world social setting: A mobile eye tracking study. PLoS ONE,16(10), Article e0259007. 10.1371/journal.pone.0259007 [DOI] [PMC free article] [PubMed] [Google Scholar]
  35. Kowler, E. (2011). Eye movements: The past 25 years. Vision Research, Vision Research 50th Anniversary Issue: Part 2,51(13), 1457–1483. 10.1016/j.visres.2010.12.014 [DOI] [PMC free article] [PubMed] [Google Scholar]
  36. Kragel, J. E., & Voss, J. L. (2022). Looking for the neural basis of memory. Trends in Cognitive Sciences,26(1), 53–65. 10.1016/j.tics.2021.10.010 [DOI] [PMC free article] [PubMed] [Google Scholar]
  37. Krakowczyk, D. G., Reich, D. R., Chwastek, J., Jakobi, D. N., Prasse, P., Süss, A., Turuta, O., Kasprowski, P., & Jäger, L. A. (2023). pymovements: A Python package for eye movement data processing. Proceedings of the 2023 Symposium on Eye Tracking Research and Applications, ETRA ’23, 1–2. 10.1145/3588015.3590134
  38. Kronemer, S. I., Aksen, M., Ding, J. Z., Ryu, J. H., Xin, Q., Ding, Z., Prince, J. S., Kwon, H., Khalaf, A., Forman, S., Jin, D. S., Wang, K., Chen, K., Hu, C., Agarwal, A., Saberski, E., Wafa, S. M. A., Morgan, O. P., Wu, J., & Blumenfeld, H. (2022). Human visual consciousness involves large-scale cortical and subcortical networks independent of task report and eye movement activity. Nature Communications,13(1), 7342. 10.1038/s41467-022-35117-4 [DOI] [PMC free article] [PubMed] [Google Scholar]
  39. Kümmerer, M., & Bethge, M. (2023). Predicting visual fixations. Annual Review of Vision Science,9, 269–291. 10.1146/annurev-vision-120822-072528 [DOI] [PubMed] [Google Scholar]
  40. Land, M. F. (2006). Eye movements and the control of actions in everyday life. Progress in Retinal and Eye Research,25(3), 296–324. 10.1016/j.preteyeres.2006.01.002 [DOI] [PubMed] [Google Scholar]
  41. Lucas, B. D., & Kanade, T. (1981). An iterative image registration technique with an application to stereo vision. IJCAI’81: 7th International Joint Conference on Artificial Intelligence, 2, 674–679.
  42. Martinez-Conde, S., Macknik, S. L., & Hubel, D. H. (2004). The role of fixational eye movements in visual perception. Nature Reviews Neuroscience,5(3), 229–240. 10.1038/nrn1348 [DOI] [PubMed] [Google Scholar]
  43. Matthis, J. S., Yates, J. L., & Hayhoe, M. M. (2018). Gaze and the control of foot placement when walking in natural terrain. Current Biology,28(8), 1224-1233.e5. 10.1016/j.cub.2018.03.008 [DOI] [PMC free article] [PubMed] [Google Scholar]
  44. McKinney, W. (2010). Data Structures for Statistical Computing in Python. Proceedings of the 9th Python in Science Conference, 445. 10.25080/Majora-92bf1922-00a
  45. Mitrevica, Z. (2021). Human silhouette [Graphic]. 10.5281/zenodo.4646644
  46. Moca, V. V., Ţincaş, I., Melloni, L., & Mureşan, R. C. (2011). Visual exploration and object recognition by lattice deformation. PLoS ONE,6(7), Article e22831. 10.1371/journal.pone.0022831 [DOI] [PMC free article] [PubMed] [Google Scholar]
  47. Mueller, D., & Mann, D. (2025). Algorithmic gaze annotation for mobile eye-tracking. Behavior Research Methods,57(10), 290. 10.3758/s13428-025-02803-2 [DOI] [PMC free article] [PubMed] [Google Scholar]
  48. Muller, K. S., Bonnen, K., Shields, S. M., Panfili, D. P., Matthis, J., & Hayhoe, M. M. (2024). Analysis of foothold selection during locomotion using terrain reconstruction. eLife,12, Article RP91243. 10.7554/eLife.91243 [DOI] [PMC free article] [PubMed] [Google Scholar]
  49. Niehorster, D. C., Hessels, R. S., Nyström, M., Benjamins, J. S., & Hooge, I. T. C. (2025). GazeMapper: A tool for automated world-based analysis of gaze data from one or multiple wearable eye trackers. Behavior Research Methods,57(7), 188. 10.3758/s13428-025-02704-4 [DOI] [PMC free article] [PubMed] [Google Scholar]
  50. Nikolaev, A. R., Meghanathan, R. N., & van Leeuwen, C. (2024). Refixation behavior in naturalistic viewing: Methods, mechanisms, and neural correlates. Attention, Perception, & Psychophysics.10.3758/s13414-023-02836-9 [DOI] [PMC free article] [PubMed] [Google Scholar]
  51. Nolte, D., Schmidt, V., Grasso-Cladera, A., & König, P. (2025). Investigating saccade-onset locked EEG signatures of face perception during free-viewing in a naturalistic virtual environment. eNeuro. 10.1523/ENEURO.0573-24.2025 [DOI] [PMC free article] [PubMed] [Google Scholar]
  52. Nolte, D., Walter, J. L., von Bassewitz, L., Scherer, J., Müller, M. M., & König, P. (2026). Mobile eye tracking in the real world: Best practices. Journal of Vision,26(2), 6. 10.1167/jov.26.2.6 [DOI] [PMC free article] [PubMed] [Google Scholar]
  53. Olson, E. (2011). AprilTag: A robust and flexible visual fiducial system. IEEE International Conference on Robotics and Automation,2011, 3400–3407. 10.1109/ICRA.2011.5979561 [Google Scholar]
  54. Orquin, J. L., & Mueller Loose, S. (2013). Attention and choice: A review on eye movements in decision making. Acta Psychologica,144(1), 190–206. 10.1016/j.actpsy.2013.06.003 [DOI] [PubMed] [Google Scholar]
  55. Poldrack, R. A., Markiewicz, C. J., Appelhoff, S., Ashar, Y. K., Auer, T., Baillet, S., Bansal, S., Beltrachini, L., Benar, C. G., Bertazzoli, G., Bhogawar, S., Blair, R. W., Bortoletto, M., Boudreau, M., Brooks, T. L., Calhoun, V. D., Castelli, F. M., Clement, P., Cohen, A. L., … Gorgolewski, K. J. (2024). The past, present, and future of the brain imaging data structure (BIDS). Imaging Neuroscience,2, 1–19. 10.1162/imag_a_00103 [DOI] [PMC free article] [PubMed] [Google Scholar]
  56. Rizzolatti, G., Riggio, L., Dascola, I., & Umiltá, C. (1987). Reorienting attention across the horizontal and vertical meridians: Evidence in favor of a premotor theory of attention. Neuropsychologia,25(1, Part 1), 31–40. 10.1016/0028-3932(87)90041-8 [DOI] [PubMed] [Google Scholar]
  57. Rolfs, M., & Schweitzer, R. (2022). Coupling perception to action through incidental sensory consequences of motor behaviour. Nature Reviews Psychology,1(2), 112–123. 10.1038/s44159-021-00015-x [Google Scholar]
  58. Ryan, J. D., Althoff, R. R., Whitlow, S., & Cohen, N. J. (2000). Amnesia is a deficit in relational memory. Psychological Science,11(6), 454–461. 10.1111/1467-9280.00288 [DOI] [PubMed] [Google Scholar]
  59. Ryan, J. D., & Shen, K. (2020). The eyes are a window into memory. Current Opinion in Behavioral Sciences, Understanding Memory: Which Level of Analysis?,32, 1–6. 10.1016/j.cobeha.2019.12.014 [Google Scholar]
  60. Saxena, S., Visram, A., Lobo, N., Mirza, Z., Khan, M., Pirabaharan, B., Nguyen, A., & Fink, L. K. (2025). SocialEyes: Scaling Mobile Eye-tracking to Multi-person Social Settings. Proceedings of the 2025 CHI Conference on Human Factors in Computing Systems, CHI ’25, 1–19. 10.1145/3706598.3713910
  61. Schwiedrzik, C. M., & Sudmann, S. S. (2020). Pupil diameter tracks statistical structure in the environment to increase visual sensitivity. Journal of Neuroscience,40(23), 4565–4575. 10.1523/JNEUROSCI.0216-20.2020 [DOI] [PMC free article] [PubMed] [Google Scholar]
  62. Spering, M. (2022). Eye movements as a window into decision-making. Annual Review of Vision Science,8, 427–448. 10.1146/annurev-vision-100720-125029 [DOI] [PubMed] [Google Scholar]
  63. Stratton, G. M. (1896). Some preliminary experiments on vision without inversion of the retinal image. Psychological Review,3(6), 611–617. 10.1037/h0072918 [Google Scholar]
  64. Szinte, M., Bach, D. R., Draschkow, D., Esteban, O., Gagl, B., Gau, R., Gregorova, K., Halchenko, Y. O., Huberty, S., Kling, S. M., Kulkarni, S., Maintainers, T. B., Markiewicz, C. J., Mikkelsen, M., Oostenveld, R., & Pfarr, J.-K. (2026). Eye-tracking-BIDS: The Brain Imaging Data Structure extended to gaze position and pupil data. bioRxiv. 10.64898/2026.02.03.703514 [DOI] [PMC free article] [PubMed] [Google Scholar]
  65. van Ede, F., Chekroud, S. R., & Nobre, A. C. (2019). Human gaze tracks attentional focusing in memorized visual space. Nature Human Behaviour,3(5), 462–470. 10.1038/s41562-019-0549-y [DOI] [PMC free article] [PubMed] [Google Scholar]
  66. Viejo, G., Levenstein, D., Carrasco, S. S., Mehrotra, D., Mahallati, S., Vite, G. R., Denny, H., Sjulson, L., Battaglia, F. P., & Peyrache, A. (2023). Pynapple, a toolbox for data analysis in neuroscience. eLife. 10.7554/eLife.85786.2 [DOI] [PMC free article] [PubMed] [Google Scholar]
  67. Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N., Nelson, A. R. J., Jones, E., Kern, R., Larson, E., … van Mulbregt, P. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. Nature Methods,17(3), 261–272. 10.1038/s41592-019-0686-2 [DOI] [PMC free article] [PubMed] [Google Scholar]
  68. Voss, J. L., Bridge, D. J., Cohen, N. J., & Walker, J. A. (2017). A closer look at the hippocampus and memory. Trends in Cognitive Sciences,21(8), 577–588. 10.1016/j.tics.2017.05.008 [DOI] [PMC free article] [PubMed] [Google Scholar]
  69. Walker, F., Bucker, B., Anderson, N. C., Schreij, D., & Theeuwes, J. (2017). Looking at paintings in the Vincent Van Gogh Museum: Eye movement patterns of children and adults. PLoS One,12(6), Article e0178912. 10.1371/journal.pone.0178912 [DOI] [PMC free article] [PubMed] [Google Scholar]
  70. Wilkinson, M. D., Dumontier, M., Aalbersberg, Ij. J., Appleton, G., Axton, M., Baak, A., Blomberg, N., Boiten, J.-W., da Silva Santos, L. B., Bourne, P. E., Bouwman, J., Brookes, A. J., Clark, T., Crosas, M., Dillo, I., Dumon, O., Edmunds, S., Evelo, C. T., Finkers, R., … Mons, B. (2016). The FAIR Guiding Principles for scientific data management and stewardship. Scientific Data, 3(1), 160018. 10.1038/sdata.2016.18 [DOI] [PMC free article] [PubMed]
  71. Yarbus, A. L. (1967). Eye Movements and Vision. Springer. 10.1007/978-1-4899-5379-7 [Google Scholar]
  72. Zhang, H., & Jonides, J. (2026). PupEyes: An interactive Python library for eye movement data processing. Behavior Research Methods,58(1), 29. 10.3758/s13428-025-02830-z [DOI] [PMC free article] [PubMed] [Google Scholar]
  73. Zheng, Z., Chen, X., Brown, T., Cousijn, H., & Melloni, L. (2024). A FAIR Workflow Guide for Researchers in Human Cognitive Neuroscience. OSF. 10.31234/osf.io/yhj5c

Associated Data

This section collects any data citations, data availability statements, or supplementary materials included in this article.

Supplementary Materials

ESM 1 (DOCX 315 KB) (315.3KB, docx)
ESM 2 (MP4 44.7 MB) (44.7MB, mp4)

Data Availability Statement

Sample datasets are available at 10.17605/OSF.IO/3N85H.

The full codebase is available at https://github.com/ncc-brain/PyNeon.


Articles from Behavior Research Methods are provided here courtesy of Springer

RESOURCES