Module reference

Eye tracker

Records gaze, eye events, head motion, scene video and eye video from Pupil Labs Neon glasses, alongside every other module in the session.

The module connects to the Neon through the Pupil Labs real-time API and records what the glasses stream. Gaze is where the participant is looking in the scene camera’s view. The Neon does its own gaze estimation on the Companion phone; RSLogger records the result and does not compute gaze itself.

Getting started

  1. Start the NeonPlug the glasses into the Companion phone and open the Neon Companion app.
  2. Put the phone and the host on one networkSee Network setup. This is the step that fails most often.
  3. Enable the moduleCheck EyeTracker-Neon in the Modules menu. The Neon appears in the Devices panel when it is found; click it to connect.
  4. Check the fitThe Neon needs no calibration for most use. The Companion app offers an offset correction for a participant whose gaze reads consistently off target.
  5. RecordStart a session and click Record.

Network setup

The Neon is the one device that reaches RSLogger over the network. Everything else connects to the host over USB or a radio dongle.

The glasses plug into the Companion phone’s USB-C port, and the Companion app publishes the device on the local network. RSLogger finds it by mDNS, the same service discovery that printers use, and then pulls the gaze, video, IMU, event and audio streams from the phone over HTTP and RTSP. So the host running RSLogger and the phone must be on the same local network, and that network must let them find and stream to each other. Because the phone’s only USB-C port is taken by the glasses, the link is always WiFi.

RequirementWhy
Host and phone on the same subnetBoth should get their address from the same router. Do not run a VPN on the host.
mDNS allowed, UDP port 5353RSLogger finds the Neon by its mDNS advertisement. If that traffic is blocked, the device never appears.
Client isolation offGuest and enterprise networks often stop devices on the same WiFi from seeing one another.
Firewall allows RSLogger on TCP 8080 and 8086Control runs over HTTP on port 8080 and the streams arrive over RTSP on port 8086.
5 GHz WiFi with bandwidth to spareThe scene video stream is the largest load. 5 GHz is more stable than 2.4 GHz in most buildings.
University and enterprise networks

Campus networks often block mDNS or isolate clients from one another, and the Neon then never appears. The reliable fix is a travel router or access point that you control, with only the host and the phone on it. That sidesteps the institution’s network and is what we suggest to most labs.

If the scene video stutters or the gaze stream drops samples, lower the recording resolution or frame rate in the settings, which cuts what the link has to carry.

The eye tracker window

Eye tracker window with the scene video, gaze overlay, eye cameras and event metrics
Eye tracker window with the scene view, gaze marker and eye cameras.

The scene view shows the Neon’s forward camera with a red circle at the gaze point. The View menu turns the eye camera, IMU, event and audio streams on and off, both for display and for recording. The status panel shows the device name, whether it is connected, and whether a recording is running. File > Eye Tracker Settings opens the settings.

What the Neon streams

The Neon’s streams are fixed by the hardware. RSLogger can record the scene video at a lower resolution and frame rate than it arrives.

StreamFrom the NeonNotes
Scene camera1600 × 1200 at 30 HzRecorded at the resolution and frame rate you set, 1280 × 720 at 10 fps by default
Eye cameras192 × 192 per eye at 200 HzRecorded side by side as 384 × 192, at 30 fps by default
GazeUp to 200 HzEvery sample is recorded. The rate depends on the Companion phone
IMU, events, audioAs the Neon sends themOptional, see the View menu

What is written

For each trial, in the EyeTracker-Neon folder:

FileContents
{token}_ET_trial001_GAZE.csvGaze samples with pupil diameter and eye state, 36 columns
{token}_ET_trial001_EVENTS.csvFixations, saccades and blinks as the Neon classifies them, 24 columns
{token}_ET_trial001_IMU.csvGyroscope, accelerometer and orientation, 19 columns
{token}_ET_trial001_WORLD_1280x720_10fps.mp4Scene video, H.264, with the gaze marker drawn on it by default
{token}_ET_trial001_EYES_384x192_30fps.mp4Eye camera video
{token}_ET_trial001_AUDIO.wavScene microphone, when the audio stream is on

The resolution and frame rate in the video file names are the values in force when the trial started.

The columns that matter most

Every CSV starts with the six columns shared by all modules, then device_time_unix and device_time_ns, which are the Neon’s own timestamp for the sample.

ColumnDescription
x, yGaze point in scene camera pixels, as the Neon reports it. The scene frame is 1600 × 1200, and this stays true when the recorded video is smaller. Scale by the recorded size over 1600 × 1200 to draw on the recorded video.
worn1 while the Neon reports the glasses as worn
pupil_diameter_left, pupil_diameter_rightMillimetres
stream_typeWhich gaze record type the Neon sent. The eye-state and eyelid columns are empty when the record does not carry them
event_type (events file)Fixation, saccade or blink
record_time_monoHost time when the sample arrived. Use to line up with other modules

The data output reference lists all columns of the three files.

Timing

Each gaze sample carries two times. device_time_unix is the Neon’s timestamp, set on the Companion phone when the sample was taken. record_time_unix and record_time_mono are the host’s clocks when the sample arrived over WiFi. The two differ by the network delay plus any offset between the phone’s clock and the host’s, and RSLogger measures neither.

To line gaze up with other modules on the host, use record_time_mono. To line gaze up with the Neon’s own scene video frame by frame, use device_time_ns, which is on the same clock as the video the Neon sends. Synchronization has an example.

Settings

File > Eye Tracker Settings.

SettingDefaultNotes
Recording resolution1280 × 720The scene video is scaled down from 1600 × 1200
Recording FPS10The scene stream arrives at 30 Hz. Lower values cut file size and network load
PreviewPreset 4, 640 × 480The live view only

The eye video rate, 30 fps by default, and whether the gaze marker is drawn on the recorded video, on by default, are set in the module’s configuration file.

Troubleshooting

The Neon does not appear

Nearly always the network. Confirm the glasses are plugged in and the Companion app is running. Confirm the host and the phone are on the same WiFi network. Check that mDNS is not blocked and client isolation is off. Turn the host firewall off for a moment to see whether it is the cause, and if so allow RSLogger on TCP 8080 and 8086. Move both onto a dedicated 5 GHz access point.

The video stutters or gaze samples are missing

Move closer to the access point or use a dedicated one with nothing else on it. Lower the recording resolution or frame rate.

Gaze is off target

Check the fit. The glasses must sit level and steady. Use the offset correction in the Companion app for that participant. Clean the eye camera lenses on the inside of the frame.

Files are missing after a trial

Check the System Log in the main window for write errors and check free disk space. The eye video, IMU, events and audio files stay empty when their stream is turned off in the View menu.

Further reading