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
- Start the NeonPlug the glasses into the Companion phone and open the Neon Companion app.
- Put the phone and the host on one networkSee Network setup. This is the step that fails most often.
- Enable the moduleCheck EyeTracker-Neon in the Modules menu. The Neon appears in the Devices panel when it is found; click it to connect.
- 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.
- 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.
| Requirement | Why |
|---|---|
| Host and phone on the same subnet | Both should get their address from the same router. Do not run a VPN on the host. |
| mDNS allowed, UDP port 5353 | RSLogger finds the Neon by its mDNS advertisement. If that traffic is blocked, the device never appears. |
| Client isolation off | Guest and enterprise networks often stop devices on the same WiFi from seeing one another. |
| Firewall allows RSLogger on TCP 8080 and 8086 | Control runs over HTTP on port 8080 and the streams arrive over RTSP on port 8086. |
| 5 GHz WiFi with bandwidth to spare | The scene video stream is the largest load. 5 GHz is more stable than 2.4 GHz in most buildings. |
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
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.
| Stream | From the Neon | Notes |
|---|---|---|
| Scene camera | 1600 × 1200 at 30 Hz | Recorded at the resolution and frame rate you set, 1280 × 720 at 10 fps by default |
| Eye cameras | 192 × 192 per eye at 200 Hz | Recorded side by side as 384 × 192, at 30 fps by default |
| Gaze | Up to 200 Hz | Every sample is recorded. The rate depends on the Companion phone |
| IMU, events, audio | As the Neon sends them | Optional, see the View menu |
What is written
For each trial, in the EyeTracker-Neon folder:
| File | Contents |
|---|---|
{token}_ET_trial001_GAZE.csv | Gaze samples with pupil diameter and eye state, 36 columns |
{token}_ET_trial001_EVENTS.csv | Fixations, saccades and blinks as the Neon classifies them, 24 columns |
{token}_ET_trial001_IMU.csv | Gyroscope, accelerometer and orientation, 19 columns |
{token}_ET_trial001_WORLD_1280x720_10fps.mp4 | Scene video, H.264, with the gaze marker drawn on it by default |
{token}_ET_trial001_EYES_384x192_30fps.mp4 | Eye camera video |
{token}_ET_trial001_AUDIO.wav | Scene 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.
| Column | Description |
|---|---|
x, y | Gaze 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. |
worn | 1 while the Neon reports the glasses as worn |
pupil_diameter_left, pupil_diameter_right | Millimetres |
stream_type | Which 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_mono | Host 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.
| Setting | Default | Notes |
|---|---|---|
| Recording resolution | 1280 × 720 | The scene video is scaled down from 1600 × 1200 |
| Recording FPS | 10 | The scene stream arrives at 30 Hz. Lower values cut file size and network load |
| Preview | Preset 4, 640 × 480 | The 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.