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.
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.

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.

| Day | Start | Minutes | Frames per eye | L − R counter | Error if paired by counter (s, median) | Exposure-start diff., median (µs) | Max (µs) |
|---|---|---|---|---|---|---|---|
| 11-01 | 09:48 | 27.5 | 49,473 | 48 | 1.6 | 15 | 57 |
| 11-01 | 10:20 | 17.9 | 32,225 | 53 | 1.77 | 15 | 52 |
| 11-01 | 10:42 | 21.7 | 38,998 | 61 | 2.03 | 15 | 55 |
| 11-01 | 11:11 | 14.1 | 25,334 | 68 | 2.27 | 15 | 70 |
| 11-01 | 11:28 | 32.2 | 58,015 | 32 | 1.07 | 15 | 67 |
| 11-01 | 12:05 | 31.9 | 57,345 | 35 | 1.17 | 15 | 56 |
| 11-02 | 09:06 | 27.8 | 50,105 | 2998 | 99.93 | 15 | 64 |
| 11-02 | 09:36 | 22.2 | 39,957 | 3000 | 100.0 | 15 | 51 |
| 11-02 | 10:04 | 17.6 | 31,605 | 3007 | 100.23 | 15 | 59 |
| 11-02 | 10:42 | 48.8 | 87,788 | 3009 | 100.3 | 15 | 57 |
| 11-03 | 10:37 | 35.8 | 64,380 | 0 | 0.0 | 15 | 59 |
| 11-03 | 11:16 | 30.1 | 54,130 | 2 | 0.07 | 15 | 59 |
| 11-03 | 11:52 | 73.6 | 132,425 | 4 | 0.13 | 15 | 65 |
| 11-04 | 09:38 | 40.0 | 72,024 | -1243 | 41.43 | 15 | 57 |
| 11-04 | 10:22 | 23.0 | 41,431 | -1241 | 41.37 | 15 | 57 |
| 11-04 | 10:49 | 40.4 | 72,802 | -1238 | 41.27 | 15 | 61 |
| 11-04 | 11:55 | 27.4 | 49,258 | -1209 | 40.3 | 15 | 56 |
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.


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?
Q02How well synchronised are the two cameras really?
Q03Do both eyes always record the same number of frames?
Q04Why do the counters differ?
Q05What does a buyer receive?
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.
origin-data-lab/stereo-frame-pairing-strobe-counter-offsetView repository origin-data-lab/stereo-frame-pairing-strobe-counter-offsetOpen dataset origindatalab/odl-stereo-frame-pairing-counter-offsetExplore on Kaggle Licence: CC BY 4.0 (data and figures) · MIT (code)
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.