Technical Field Note #18 · November 2026

Don't pair stereo frames by their counters: per-session offsets of up to 3,009 frames, true sync 15 µs

Field Note #18 · Stereo frame pairing and strobe-counter offsets, head-mounted stereo+IMU rig (ODL-EGO S1)

Every frame our stereo rig records carries an embedded strobe counter, and that counter looks like the natural key for joining left and right images. Over four days of real produce-portioning work (17 sessions, 116 five-minute files per eye, 957,332 frame pairs) we found that the left and right counters never share an origin: within a session they differ by a fixed constant, and that constant changes from session to session, from −1,243 to +3,009 frames. Joining by counter would have matched each left image with a right image taken between 0.07 s and 100.3 s later in 16 of 17 sessions. Joining by frame order inside each file, which we verified with the exposure timestamps, pairs exposures that start a median of 15 µs apart (99th percentile 29 µs, maximum 70 µs). Our delivery QA now pairs by order, checks every pair against its exposure timestamps, and ships the pairing table.

Published November 2026⏱ 11 min readStatus Preliminary · automated analysisOpen data GitHub · Hugging Face · Kaggle
−1,243 to +3,009 framesLeft−right counter offsetconstant within each of 17 sessions, different between sessionsVerified (automated)
up to 100.3 sError if paired by countermedian 1.8 s; correct in 1 of 17 sessionsVerified (automated)
15 µs medianExposure-start difference, paired by orderp99 29 µs, max 70 µs, 957,332 pairsVerified (automated)
110 of 118Files with equal L/R frame countsthe 8 others differ by one frame at a session's endVerified (automated)

Why this matters

The obvious join key is the wrong one

Stereo depth, stereo SLAM and hand-pose triangulation all assume that the left and right images in a pair were exposed at the same moment. Pipelines therefore need a reliable rule for which left frame goes with which right frame.

Our rig embeds a strobe counter in every frame (an SEI field in the H.264 stream, written alongside the exposure start, exposure duration and a presentation timestamp). Because the counter increments by exactly one per frame in each eye, it is tempting to use it as the join key. This note shows why that fails on real recordings, and what to use instead.

Setup

Four days, 17 work sessions, 957,332 frame pairs

Recordings: 2026-11-01 to 2026-11-04, produce portioning for school meals in a food supplier's workroom, rig worn on the head by the same operator. 17 work sessions of 14–74 minutes plus 3 accidental recordings shorter than 2 s; the recorder splits each session into 5-minute files (118 files per eye in total).

Inputs per frame and eye: presentation timestamp, exposure start (µs), exposure duration (µs), strobe counter and flags, extracted from the video stream without decoding images. Total: 957,336 left and 957,336 right frames, about 8.9 hours.

Diagram of six left frames numbered 1048 to 1053 paired with right frames numbered 1000 to 1005
Figure 1. The same exposures carry different counter values in the two eyes. In this session the left counter is always the right counter plus 48.

Finding 1

The two counters differ by a constant that changes every session

Within every one of the 118 files the difference between the left and right counter was the same for every frame, and both counters advanced by exactly one per frame. But the difference itself was never stable across sessions: 48, 53, 61, 68, 32 and 35 frames on day 1; 2,998 to 3,009 on day 2; 0, 2 and 4 on day 3; −1,243 to −1,209 on day 4.

Small increases between sessions on the same day (48 → 53 → 61 → 68) and large jumps between days suggest that each sensor's counter runs freely and is not reset when a recording starts. We have not confirmed this with the manufacturer; it is a working hypothesis.

Bar chart of the left minus right strobe counter per session, from minus 1243 to plus 3009 frames
Figure 2. Left − right strobe counter for each work session, coloured by day.
Table 1. The two counters differ by a constant that changes every session
DayStartMinutesFrames per eyeL − R counterError if paired by counter (s, median)Exposure-start diff., median (µs)Max (µs)
11-0109:4827.549,473481.61557
11-0110:2017.932,225531.771552
11-0110:4221.738,998612.031555
11-0111:1114.125,334682.271570
11-0111:2832.258,015321.071567
11-0112:0531.957,345351.171556
11-0209:0627.850,105299899.931564
11-0209:3622.239,9573000100.01551
11-0210:0417.631,6053007100.231559
11-0210:4248.887,7883009100.31557
11-0310:3735.864,38000.01559
11-0311:1630.154,13020.071559
11-0311:5273.6132,42540.131565
11-0409:3840.072,024-124341.431557
11-0410:2223.041,431-124141.371557
11-0410:4940.472,802-123841.271561
11-0411:5527.449,258-120940.31556

Finding 2

Pairing by frame order is right; pairing by counter is seconds off

We compared the two rules on the same frames. Pairing by counter matched left and right exposures that were a median 1.8 s apart and up to 100.3 s apart; only the one session whose offset happened to be 0 came out right, and offsets of 2 and 4 frames already produced 67 ms and 133 ms errors, enough to ruin stereo matching on a moving head.

Pairing by frame order inside each file gave exposure starts a median 15 µs apart (99th percentile 29 µs, maximum 70 µs, under 0.25% of the 33.3 ms frame period). In 110 of 118 files both eyes had the same number of frames; in the other 8, all at the end of a session, one eye wrote one extra final frame, which is simply left unpaired.

Two histograms: left shows counter-based pairs seconds apart, right shows order-based pairs about 15 microseconds apart
Figure 3. The same 957,332 frames under the two pairing rules. Pairs that the counter rule gets right (offset 0) fall below the left panel's range.
Histogram of left-right exposure start differences concentrated between 12 and 18 microseconds
Figure 4. Exposure-start difference of every order-based pair: the rig's true stereo synchronisation.

How to check your own data

Three tests that take seconds per file

These checks need only the per-frame metadata, not the images, so they run in seconds on a full day of recordings.

  • Within each file, verify that L − R counter is constant; record the constant per session instead of assuming 0.
  • Pair by order (or by nearest exposure start) and require every pair to start within 1 ms; flag any file that fails.
  • Allow one unpaired frame at a session's end; treat any mismatch elsewhere as a dropped frame and investigate.

What we changed

Pairing is now verified, not assumed

Verified: on four days of real work, order-based pairing is correct for every frame pair, and the true left/right synchronisation is 15 µs median, 70 µs worst case.

Process: our delivery QA (published with this note) pairs frames by order, checks each pair against its exposure timestamps, reports the per-session counter offset, and ships a pairing table with every delivery so customers never have to infer pairs from counters.

SCOPE AND LIMITS

Limitations

What this note does not show, stated up front.

  • One rig, one operator, one workroom, four mornings (2026-11-01 to 11-04); not a population estimate.
  • Synchronisation is measured from the rig's own exposure-start timestamps; no external optical or electrical reference was used.
  • The cause of the counter offset is a hypothesis; firmware behaviour was not confirmed with the manufacturer.
  • All checks are automated: AI/algorithm-only preliminary analysis; no human re-verification.

FAQ

Questions data buyers ask

Q01Can I pair left and right frames by their strobe counter?
Not on this rig. The two counters differ by a constant that changes every session (−1,243 to +3,009 frames in our data), so counter-based pairs were up to 100 s apart.
Q02How well synchronised are the two cameras really?
Paired by frame order, left and right exposures started a median 15 µs apart, 29 µs at the 99th percentile and 70 µs at most, over 957,332 pairs.
Q03Do both eyes always record the same number of frames?
In 110 of 118 files, yes. In the other 8, all at the end of a session, one eye recorded one extra final frame.
Q04Why do the counters differ?
Most likely each sensor's counter runs freely and is not reset at recording start. This is our hypothesis from the data; the manufacturer has not confirmed it.
Q05What does a buyer receive?
A per-frame pairing table, the exposure timestamps, and a QA report with the per-session counter offset and the worst left/right exposure difference.

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 #18: Don't pair stereo frames by their counters. https://origindatalab.io/technical-field-notes/stereo-frame-pairing-strobe-counter-offset.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.