Technical Field Note #22 · November 2026

Checking stereo sync from the outside: a flashing monitor puts left and right within 0.15 ms

Field Note #22 · External optical check of left/right synchronisation on a head-mounted stereo+IMU rig (ODL-EGO S1), follow-up to Field Note #18

In Field Note #18 we measured our stereo rig's left/right synchronisation at 15 µs, but only from the exposure timestamps the rig writes about itself. Here we checked it from the outside. A PC monitor flashed a panel black and white at random 70–250 ms intervals while both eyes filmed it, in two 2-minute recordings (362 flashes each). Frames whose exposure straddled a switch record a partial brightness; the share of the exposure that saw white, combined with each eye's own exposure start and duration, places the switch in time. Each eye timed the same 357 and 316 switches independently. Averaging rising and falling edges (which cancels brightness-gain differences between the eyes), left − right was −23 µs (95% CI −56 to −14) and −40 µs (−110 to −12); under every sensor-response curve we tried it stayed within ±0.15 ms. That holds in the second recording even though auto-exposure was active and the left exposure was 0.5 ms shorter than the right. The optical method cannot resolve 14 µs, but it independently confirms there is no hidden offset larger than about 0.15 ms: under 0.5% of a frame, about 0.25 px of image motion during a fast 200°/s head turn.

Published November 2026⏱ 15 min readStatus Preliminary · automated analysisOpen data GitHub · Hugging Face · Kaggle
−23 µs and −40 µsOptical left − right timing (γ = 1)two recordings, 357 and 316 switches timed in both eyesVerified (automated)
within ±0.15 msUnder any assumed response curveγ 0.7–2.2: −15 to −124 µsVerified (automated)
0 real disagreementsFrames where the eyes disagreed on black/white18 of 7,194 frames sat at 47–53% brightness mid-switch in both eyesVerified (automated)
−14 µs medianRig metadata, exposure-start L − Rmax 60 µs; consistent with the optical resultVerified (automated)

Why this matters

A rig should not be the only witness to its own timing

Stereo depth, stereo SLAM and hand-pose triangulation assume both images in a pair were exposed at the same instant. In Field Note #18 we found that our rig's left and right exposures start a median 15 µs apart, but that number came from the exposure-start timestamps the rig writes into its own video stream. If the firmware stamped both eyes from the same clock while the sensors actually fired at different times, the metadata would still look perfect.

This note closes that gap with an external, optical reference: something both cameras can see change at a single physical moment, timed independently from each eye's images.

Setup

A flashing monitor panel and two 2-minute recordings

Rig: R8 stereo+IMU (ODL-EGO S1), the same unit as in Field Notes #15–#21, 1600×1200 per eye at 30 fps, set on a desk facing a PC monitor. The monitor showed a page that switched a panel between black and white at random 70–250 ms intervals. No display refresh or flash schedule was logged; the method does not need one.

Recording 1 (2026-11-08 13:32, camera slightly below the monitor): exposure steady at 10.04 ms in both eyes. Recording 2 (13:36, camera at mid-monitor height): auto-exposure active, left 6.9–11.3 ms, and the left exposure a median 0.51 ms shorter than the right. Each recording contains about 120 s of flashing (362 flashes).

Per frame and eye we used the exposure start and exposure duration (µs) from the stream metadata and the mean brightness of the panel region, found automatically as the pixels that toggled most often (611 and 651 px at 160×120 in recording 1).

Left and right camera views of a desk and monitor, with the flashing panel on the right of the screen outlined
Figure 1. Recording 1, both eyes. The outlined panel switches between black and white; everything else in the scene is static.

Method

Timing a switch from a partly exposed frame

Each exposure lasts about 10 ms of the 33.3 ms frame period. If the panel switches while a frame is being exposed, that frame records an intermediate brightness. The share f of the exposure that saw white, taken against the full-black and full-white frames on either side (rescaled to the same exposure time), places the switch: for a rise, t = start + exposure × (1 − f); for a fall, t = start + exposure × f.

Each eye does this with its own images and its own timestamps, so for every switch both eyes see we get two independent times. Their difference is the synchronisation error the metadata would have to hide. We used only switches with full frames on both sides and 0.05 < f < 0.95 in both eyes.

Converting brightness to light needs the sensor's response curve, which we do not know. A gain or response mismatch between the eyes shifts rise and fall estimates in opposite directions, so we report the mean of the rise median and the fall median, and repeat everything for response exponents γ = 0.7, 1.0, 1.3, 1.6 and 2.2.

Diagram of left and right exposure windows straddling the moment a panel turns white
Figure 2. A switch inside the exposure window: the fraction f that saw white locates the switch within the window.
Two seconds of panel brightness in both eyes, square waves with occasional intermediate points
Figure 3. Panel brightness in both eyes over two seconds of recording 1. The traces overlap; intermediate points are partly exposed frames.

Finding 1

Left and right time the same switches within tens of microseconds

Recording 1: 357 switches timed in both eyes; left − right was −96 µs for rises and +51 µs for falls, −23 µs on average (95% bootstrap CI −56 to −14 µs). Recording 2: 316 switches; +27 µs for rises, −106 µs for falls, −40 µs on average (−110 to −12 µs). The per-switch spread (median absolute deviation 81 and 127 µs) is the method's own noise, set by brightness noise inside a 10 ms window.

The binary black/white state agreed in every frame. 18 of 7,194 frames during flashing fell on different sides of the threshold, but all of them were mid-switch frames at 47–53% brightness in both eyes.

Table 1. Left and right time the same switches within tens of microseconds
RecordingCamera positionExposure (L / R, median)FlashesEdges used (rise / fall)Rise medianFall medianOptical L − R (γ = 1, 95% CI)Range over γ 0.7–2.2SEI exposure-start L − R (median / max)
1slightly below the monitor10.04 / 10.05 ms362357 (143 / 214)−96 µs+51 µs−23 µs (−56 to −14)−15 to −106 µs−14 / 49 µs
2mid-monitor height8.99 / 9.42 ms362316 (121 / 195)+27 µs−106 µs−40 µs (−110 to −12)−40 to −124 µs−14 / 60 µs
Histograms of per-switch left minus right timing for rises and falls in two recordings
Figure 4. Per-switch left − right timing (γ = 1). Rises and falls are offset in opposite directions; their mean (black) sits next to the metadata value (red).

Finding 2

The result does not depend on the assumed response curve, or on equal exposures

Across γ 0.7–2.2 the average stayed between −15 and −106 µs in recording 1 and between −40 and −124 µs in recording 2: always within ±0.15 ms, always the same sign as the metadata (left slightly earlier).

Recording 2 is the harder case: auto-exposure was moving and the two eyes did not choose the same exposure (left a median 0.51 ms shorter). Individual rise estimates then tracked the exposure difference (correlation 0.78), because the display does not switch instantly and a shorter window integrates the transition differently. Averaged, the result still matched recording 1.

Optical left minus right timing for five assumed response curves in two recordings, all within plus or minus 150 microseconds
Figure 5. Average left − right (95% CI) for each assumed response curve. Grey band: ±150 µs. Red: rig metadata.

Side observation

Pair frames by exposure start, not by presentation timestamp

In recording 1 both eyes carried identical presentation timestamps (PTS) in every pair. In recording 2 they matched in only 0.4% of pairs and differed by up to 1.0 ms, while the exposure starts of the same pairs were still within 60 µs. Pairing by PTS would still have found the right frames here, but PTS is evidently not a hardware timestamp. We pair by nearest exposure start (within 2 ms), which agrees with the order-based rule of Field Note #18.

How to check your own rig

Fifteen minutes, one monitor, no extra hardware

Anyone with a stereo rig that records per-frame exposure times can repeat this.

  • Show a panel that switches black/white at random 70–250 ms intervals (random, so no switch pattern locks to the frame rate); film it for 2 minutes with both eyes.
  • Find the panel automatically as the most frequently toggling pixels; take its mean brightness per frame.
  • Pair frames by exposure start; time every partly exposed switch in each eye with its own exposure start and duration.
  • Average rise and fall medians; repeat for several response curves. A rig with a real offset shows it in all of them.

What this means

Synchronisation is now verified twice, by two independent routes

Verified: on this rig, an external optical reference agrees with the internal metadata. There is no hidden left/right offset larger than about 0.15 ms, which is under 0.5% of a frame; during a fast 200°/s head turn that is 0.03°, about 0.25 px at this camera's 482 px focal length.

Process: the flash recording becomes a standard acceptance test for every new rig before field use, alongside the per-frame metadata checks of Field Note #18. The scripts and per-switch tables are published with this note.

  • Optical check per rig before deployment: pass if all γ within ±0.5 ms.
  • Metadata check on every delivery: every pair within 1 ms by exposure start.
  • Report per-eye exposure differences; auto-exposure can diverge between eyes.

SCOPE AND LIMITS

Limitations

What this note does not show, stated up front.

  • One rig, two 2-minute recordings in one office on one day, camera static; not a population estimate.
  • The method assumes the display switches the whole panel at the same moment for both eyes; display scan-out and pixel response are common to both cameras but limit precision to roughly 0.1 ms per switch.
  • The sensor response curve is unknown; results are reported for γ 0.7–2.2 rather than for a calibrated curve.
  • The flash schedule was not logged; switch times are known only from the images, so the absolute timing of each eye is not tested, only their difference.
  • All checks are automated: AI-assisted preliminary analysis; no human re-verification or third-party review.

FAQ

Questions data buyers ask

Q01How can I verify stereo camera synchronization without special hardware?
Film a monitor panel that flashes at random 70–250 ms intervals with both cameras. Frames whose exposure straddles a switch record a partial brightness, which, with each camera's exposure start and duration, times the switch independently in each eye. Compare the two times.
Q02How well synchronized is the ODL-EGO S1 stereo rig?
The rig's metadata gives a median 14–15 µs between left and right exposure starts. The optical check here found −23 µs and −40 µs, and within ±0.15 ms under every response-curve assumption.
Q03Why average rising and falling edges?
A brightness gain or response difference between the eyes biases rise and fall estimates in opposite directions; their mean cancels it.
Q04Can this method measure 15 µs?
Not directly. Its per-switch noise is about 0.1 ms and its systematic uncertainty is under 0.15 ms. It rules out hidden offsets larger than that, which is what matters for depth and pose.
Q05Do the left and right cameras use the same exposure?
Usually yes on this rig, but not always: with auto-exposure active in one recording the left exposure was a median 0.51 ms shorter, while exposure starts stayed aligned within 60 µs.

OPEN DATA AND CODE

Reproduce and inspect the evidence

Every number in this note can be checked: derived tables, analysis code, figures and a runnable notebook are public.

Run the notebook on Kaggle

Licence: CC BY 4.0 (data and figures) · MIT (code)

Cite this note

Origin Data Lab (2026). Technical Field Note #22: Checking stereo sync from the outside. https://origindatalab.io/technical-field-notes/stereo-sync-external-flash-verification.html

Want this measured on your data?

Origin Data Lab plans and runs egocentric, stereo+IMU and field video capture with documented QA, for physical AI and robotics teams.