Delay Lab

See why AR punishes headset delay more than VR, on an ordinary laptop webcam. Add a delay, watch a sticker slide off your nose, measure the slide in pixels, then fix it with prediction.

Animated simulation at 100 ms of delay: the VR-style room follows the head late; in AR-style the red sticker trails the real nose; in AR + fix it stays on the nose.
Simulated, not a webcam recording: a synthetic head swings side to side, and Delay Lab's real delay buffer, prediction and drawing code produce every frame.

The idea in 30 seconds

Every headset is a little late

When you move your head, the picture catches up a few milliseconds afterwards.

In VR you can't see it

The whole fake world is late together. You only feel it, as floatiness or, above about 50 ms, sickness.

In AR you can

The real world is never late, so a virtual object visibly slides off the real thing it was stuck to.

slip = head speed × delay
At a normal 100°/s head turn, 20 ms of delay moves an AR object 1 m away by about 3.5 cm.

Chart: AR object slip at 1 m grows in a straight line with delay; Vision Pro 11 ms gives 1.9 cm, Quest 3 about 6–7 cm, a laptop webcam 10–26 cm.
Calculated from the formula and published latency figures, not a Delay Lab measurement.

Three modes, one key each

V VR-style

Camera hidden. A wireframe room moves with your delayed head.

A AR-style

Your live face, with a red sticker at the delayed nose position.

F AR + fix

The sticker is drawn where your head is predicted to be: late position + speed × delay.

A slider sets the added delay (0–150 ms). The strip at the top shows the gap between the sticker and your real nose, in pixels.

Where the project stands

✅ Verified: the app runs live on a laptop webcam (~30 fps, face found in ~100% of frames), the packaged exe runs without Python, and 26 tests pass.

⏳ Pending: the 20-second sweep recording the experiment is built around. Want to record the first one?

⚠️ So far: the only real measurement is one 2.5 s self-test clip. That's a first sign, not a result.

Expected sweep chart: without the fix the gap grows in a straight line; with the fix it stays several times smaller.
A prediction, not a measurement: synthetic head motion run through the real sweep code.

Try it

Windows 10/11, a webcam and Python 3.11. Or download DelayLab.exe and skip Python altogether.

py -3.11 -m venv .venv && .venv\Scripts\activate
pip install -r requirements.txt
python download_model.py      # one-time, ~4 MB face model
python app.py                 # or: python app.py --selftest 8
SystemMotion-to-photon delayAR slip at 1 m (100°/s)
Comfortable VR target (3GPP TR 26.918)< ~20 ms< 3.5 cm
Apple Vision Pro passthrough~11 ms~1.9 cm
Meta Quest 3 / Quest Pro / HTC Vive XR Elite~35–40 ms~6–7 cm
A laptop webcam pipeline~60–150 ms~10–26 cm

Help out, no webcam needed

The tests run on synthetic head tracks, so you can work on the sweep maths, charts, docs and CI without a camera. Look for good first issues, or ask in Discussions.