Eye tracking with EEG, and where the timing breaks
Most labs buying an eye tracker and an amplifier together put the budget into channel count and sampling rate. Then the two files do not line up and nobody knows by how much. What we would specify instead, with the calibration and the numbers.

Most labs buying an eye tracker and an EEG amplifier at the same time put the budget into channel count and sampling rate.
Then the two files do not line up, and nobody knows by how much.
Your setup has three clocks. The stimulus PC, the eye tracker, the amplifier. Nothing disciplines them to each other. The Lab Streaming Layer developers measured what happens when you sync only on start and stop events - drift of many milliseconds inside the first few minutes, growing with session length.
For an N170 that is the whole component.
One trigger word, two destinations
This is the part to fix first, before anything else on the shopping list.
A TTL pulse into the digital input of the amplifier is sampled by the same converter as the EEG. No network, no buffer, no clock conversion, nothing to correct afterwards.
The g.TRIGbox takes a parallel port, USB, photodiode, audio or a switch closure and puts out isolated pulses into the digital or analogue inputs of g.Nautilus Research. Input and output lines are isolated from each other, which you need when the same trigger has to reach two devices that must not share a ground.
The Tobii Pro Spectrum has an 8-bit TTL input port on the back that records 5 V markers next to the gaze data. The amplifier has one too.
Send the same 8-bit word to both. Now both files carry the same event codes, and aligning them offline is a fit on known events instead of an estimate.
Lab Streaming Layer for the rest
Gaze coordinates, motion capture and questionnaire responses need a software transport, and LSL is the one to use.
Its authors report sub-millisecond accuracy of LSL timestamps in their own tests. Read that carefully. Sub-millisecond is the relative precision once the streams are running. It says nothing about the constant offset each device adds before its data reaches LSL.
The same paper measured 12.20 ms of constant offset between two marker paths into one amplifier, with 156 microseconds of jitter. Large offset, small jitter. That is a number you subtract once, if you measure it.
g.Nautilus Research is wireless, 2.4 GHz, about 10 m indoors. The LSL authors warn that wireless protocol latency and large on-device buffers reach tens of milliseconds. We still prefer wireless for anything with head movement, because cable movement costs more than a measured offset does. But measure the offset.
The photodiode
Your software timestamps the moment the draw call returns. Not the moment light leaves the monitor. On a 60 Hz screen the quantisation alone is 16.7 ms.
Tape a photodiode over a corner of the screen. Draw a high contrast patch there on every stimulus frame. Route the photodiode through the g.TRIGbox into a spare EEG channel.
Now the onset on screen and the intended onset sit in the same file, and the difference between them is the number that belongs in your methods section.
Calibrating, once
- High contrast patch in a screen corner on every onset, photodiode mounted over it
- Photodiode through the g.TRIGbox into a spare EEG channel or digital input
- Software trigger in parallel, to the EEG digital input and the Tobii TTL port
- 200 trials minimum, on the exact hardware, refresh rate and settings you will use. Offsets do not transfer between setups
- Mean and standard deviation of photodiode minus software trigger, reported separately
Subtract the mean in preprocessing. Report the standard deviation.
A large mean with small jitter is a system behaving well. A small mean with large jitter usually points at a USB trigger path or a compositing window manager, and no amount of MATLAB fixes it afterwards.
Proving it worked
Export from Tobii Pro Lab with Eyetracker timestamp, Recording timestamp and Event value, one 8-bit TSV per participant. In EEGLAB, pop_importeyetracker aligns on the codes that appear in both files.
Then run pop_checksync. It cross-correlates horizontal gaze against the horizontal EOG channels, which measure the same eye movements through separate hardware. Aligned data peaks at zero lag. The published Tobii example reports 0.934 ms mean absolute synchronization error and a peak at exactly zero samples.
Run it on every participant, not only the first. It is the cheapest way to catch a trigger cable that came loose in session twelve.
Where we would not spend the money
If the paradigm is dwell time and fixation counts on static images, 1200 Hz gaze and 500 Hz EEG buy nothing you will report. To our taste Tobii Pro Fusion at 250 Hz, with the difference moved into the trigger path, is the better setup. The timing budget limits that study, not the sampling rate.
Saccade-locked potentials and microsaccades are the case where the fast tracker earns its price. Then take the Spectrum.
One more constraint before you fix channel count. Only one g.Nautilus runs in a room at 500 Hz. If you are planning two participants recording at once, that changes the whole design, and it is cheaper to know now than after delivery.
The timing budget
| Path | Typical error | Correctable |
| TTL into the EEG converter | One sample, 2 ms at 500 Hz | Not needed |
| TTL into the eye tracker port | Sub-millisecond | Not needed |
| LSL timestamps after offset correction | Sub-millisecond | Yes, once per setup |
| Device and wireless buffering | Up to tens of milliseconds | Yes, if measured |
| Display onset against software mark | One to two refresh intervals | Yes, with a photodiode |
| Start and stop event sync only | Many milliseconds, growing | No |
The last row is the one to avoid. Everything above it is a solved problem with known tools.
The parts
| Stage | Product |
| Stimulus presentation | E-Prime Extensions for Tobii Pro, or PsychoPy and Psychtoolbox |
| Response collection | Chronos response device |
| Eye tracking | Tobii Pro Spectrum at 300, 600 or 1200 Hz, or Tobii Pro Fusion at up to 250 Hz |
| Eye tracking software | Tobii Pro Lab, Tobii Pro SDK |
| EEG | g.Nautilus Research, 24-bit, 250 or 500 Hz, 8 to 64 channels |
| Trigger distribution | g.TRIGbox |
| Recording and analysis | g.Recorder, g.BSanalyze, EEGLAB with EYE-EEG, or MNE-Python |
NBT supplies g.tec, Tobii and Psychology Software Tools in Israel, and installs them.
Send us the paradigm and the components you care about timing, and we will tell you where the budget should go. Do you need sub-millisecond, or is this a dwell time study?

NEED MORE INFORMATION ABOUT THIS PRODUCT?
Send us your emailFrequently Asked Questions
What is the most accurate way to synchronize an eye tracker with EEG?
Send the same 8-bit TTL word to both. Into the amplifier digital input, where the same converter that samples the EEG samples the trigger, and into the eye tracker TTL port. Both files then carry the same event codes, and offline alignment is a fit on known events instead of an estimate.
Is Lab Streaming Layer accurate enough for ERP work?
Sub-millisecond in the developers' own tests, but that is relative precision. Each device adds a constant offset from buffering and transmission before its data reaches LSL, and over a wireless link that reaches tens of milliseconds. Measure it once, subtract it, and LSL is fine. Skip the measurement and it is not.
Do I need a photodiode if the stimulus software already sends triggers?
Yes, at least while you are validating. Software marks the moment the draw call returns, not the moment light leaves the monitor. On a 60 Hz screen the quantisation alone is 16.7 ms. A photodiode on the screen corner measures the onset so you can subtract the difference.
Do I need the 1200 Hz tracker?
For dwell time and fixation counts on static images, no. Tobii Pro Fusion at 250 Hz with the difference spent on the trigger path is the better setup for that work. For saccade-locked potentials and microsaccades the fast tracker earns its price, and then take the Spectrum.
How do I prove the synchronization worked?
Import into EEGLAB with the EYE-EEG toolbox and run pop_checksync. It cross-correlates horizontal gaze against the EOG channels, which record the same eye movements through separate hardware. A peak at zero lag and sub-millisecond mean error is the evidence a reviewer will accept. Run it on every participant.
Still have questions?
Advance Your Research
Contact NBT today for expert consultation on your neuroscience instrumentation needs.
.jpg)


