M4: two static baselines of one session differ by 0.0092 px on the same footage, twelve times M3's spread, unexplained
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 10/100
- Issue type
- Bug
- Clarity
- Needs clarification
- Activity status
- Active
- Tech stack
- javascript, typescript
- Domain
- performance, testing-qa
Research direction
Start with compareExports in examples/js/bench-metrics.mjs and the two round-1 static exports named in the issue, then recompute jitterPx on their 168 common media times. The issue's desk checks are corner agreement between those baselines and a per-window residual breakdown, and the calibration plan in docs/benchmarks/README.md sets the criteria. Done means a written account of the 0.0092 px gap, not a fix; the issue asks for an explanation, so expect to coordinate with the maintainer before changing anything.
Written by the indexing model from the issue text.
Description
Two static runs of one configuration, in one session, read 0.0092 px apart in jitterPx on the same footage. That is about twelve times the whole range of M3's four static runs, and nothing in the record accounts for it. This issue holds the question until the calibration block of M4's plan answers it (#122: docs/benchmarks/README.md, "The null control's jitter clause (2026-10-14)", item 3).
The observation
Round 1's two static baselines: 2026-09-28-tab9-tuning-r1-baseline-static.json and -baseline-static-repeat.json.
- One configuration: Tab_9_WiFi, Chrome 153, the 64-patch target
4af6a7fb…, the tracker's defaults. - One session: they were its first and last runs, exported at 12:32:14 and 12:51:05, 19 minutes apart.
- On their 168 common media times:
compareExports(examples/js/bench-metrics.mjs) readsjitterPx0.1476 and 0.1568, which is 0.0092 px apart. - Over their whole windows: 0.1476 → 0.1552, which is 0.0076 px apart. So a window covering different footage is not the cause.
M3's four static runs: 2026-10-01-tab9-m3-{sync,worker}-static-{1,2}.json.
- Configuration: the 48-patch target
9e8eb486…, run with?loops=4. - When: 07:35:46 to 07:46:07.
runSummary.jitterPx: 0.14163, 0.14175, 0.14192 and 0.14240. The range is 0.14240 − 0.14163 = 0.00077 px.
The ratio: 0.0092 ÷ 0.00077 = 11.9.
What the ratio is, and what it is not
It compares one pair's difference with the range of four runs:
- the pair's difference is taken over 212 and 207 frames of common footage (a media time a window reaches again after a wrap counts each time);
- the range of four is taken over 815 to 822 counted-loop frames per run.
From one spread, the range of four is expected to be wider than one pair's difference, and the smaller sample is expected to be noisier. So the ratio states the size of the question. It is not a ratio of two measured spreads.
Two more facts in the record that bear on it
- Round 2's three static baselines (
2026-09-29-tab9-tuning-r2-baseline-static-{1,2,3}.json): one session, 64 patches, the window procedure.- Over their windows they read 0.14984, 0.15676 and 0.15647, a range of 0.15676 − 0.14984 = 0.00692 px.
- That is over windows, not common footage, but it is of the order of round 1's, not M3's.
- M3's frame-resampling figure. M3's record (
docs/benchmarks/2026-10-01-m3-device-session.md, "What was looked at before the decision") reports a check that kept each processed frame with probability 0.9.- That moves a run's
jitterPxwith a standard deviation of 0.0013–0.0015 px, about twice the four runs' whole range (0.0014 ÷ 0.00077 = 1.8). - Nothing in the record accounts for how a resampling spread that wide sits beside a run-to-run range that narrow. It is one more reason not to take 0.00077 px as the norm.
- That moves a run's
Candidates, none of them shown
- The time and the device's thermal state. Round 1's pair spans 19 minutes of a session; M3's four ran in about 10.
- The configuration. Round 1 ran 64 patches under the window procedure (a run ended by Stop, its last 300 ticks kept); M3 ran 48 patches with
?loops=4. - Sampling. The common-footage sample is the smaller one.
- The build and the harness, which differed between 2026-09-28 and 2026-10-01.
Why it matters
- Round 1 does not transfer. It ran 64 patches under the window procedure, so its figure cannot be assumed to hold for the campaign's configuration.
- The calibration block is where we find out which figure is normal for the campaign's configuration. It is eight static runs on Tab_9_WiFi at
37dc6d4, distributed in time as counted runs will be. - If the variability is real and reappears in M4, the paired design itself is at risk. A treatment's difference from its baseline would then carry run-to-run movement an order of magnitude above what M3's four suggest.
Desk checks it could start with (none run yet)
- Corner agreement at common media times between round 1's two baselines. M3's record measured 0.0003–0.0006 px at the median for its four runs.
- Round 2's three baselines, compared on their common media times.
- Where the 0.0092 px sits: the residuals window by window over the common footage, to see whether the difference is spread across the clip or concentrated.
What decides it: the calibration block's eight runs, read by the plan's rule and its within-run check, beside M3's four.
- Dominant language
- TypeScript
- Stars
- 11
- Forks
- 3
- Avg merge
- 3h 13m
- Merged PRs (30d)
- 48
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from webarkit/webarkit
-
LOST conflates “never acquired” with “lock lost”Possibly taken A pull request linked to this issue is open or already merged. Opendocumentation enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
webarkit/webarkit#108 · 1 comment ·
Maintainers usually reply within 1 day
-
cv-backend-jsfeatnext enhancement
Difficulty 1/5 Under an hour Newbie friendliness 90/100
webarkit/webarkit#94 · 1 comment ·
Maintainers usually reply within 1 day
-
ADR cv-backend-spec enhancement Typescript
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
webarkit/webarkit#39 · 1 comment ·
Maintainers usually reply within 1 day
All issues in webarkit/webarkit
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
umami-software/umami#4637 ·
Maintainers usually reply within 3 days
-
Hotkeys fire when pressed with the Ctrl key, so browser shortcuts also trigger player actionsPossibly taken @RaphaelFakhri claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
muxinc/media-chrome#1332 ·
Maintainers usually reply within 5 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
polarsource/polar#15580 ·
Maintainers usually reply within 1 day
-
accepted bug via-triage
Difficulty 2/5 1-3 hours Newbie friendliness 69/100
pingdotgg/t3code#20931 · 1 comment ·
Maintainers usually reply within 1 day
-
bug/1-unconfirmed kind/bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day