peregrine's real FP32 detector vs. its own INT8 quantization — the nanostoop
path, calibrated on peregrine's real warehouse frames — running side by side in your
browser via ONNX Runtime Web, on a bundled deterministic clip. This tab measures only
accuracy divergence (agreement %, lost/gained boxes, IoU drift). It does not measure or
display latency as a performance comparison — ORT-Web's WebGPU EP has incomplete INT8
coverage, so an in-browser FP32-vs-INT8 speed race is structurally invalid (see the
latency reference panel below, and site/lab/README.md).
Detected in this tab, this session — not a claim about any other device. Nothing below is a performance number.
Full chain (WebGPU → WASM-SIMD-threads → bundled clip → recorded GIF) is a v1 hard requirement (TZ S3-Phase3-4) — v0 ships the WASM-only rung plus the bundled clip and a styled recorded-run screen; see README.md.
Default path per TZ S3-Phase3-1: a bundled 90-frame clip (real,
sequential warehouse stills, declared 30fps — assets/clip/manifest.json), not a
webcam. Webcam is an upgrade button below. JPEG severity reuses
src/stoop/degrade/params.py's exact quality ladder, applied to the source frame
before letterbox/preprocess — identically to both panels.
conf=0.25 ·
NMS IoU=0.45 · match IoU=0.50 — same
constants as nanostoop.py and scripts/fragility_derisk.py's
decode_yolov8.
Aggregate over the full 90-frame clip
(run full 90-frame clip above) — not run yet.
Real per-target latency on real named hardware, embedded from
artifacts/matrix/target-matrix-2026-08-19.html. Your browser's own inference time
is intentionally not shown as a number here — see the subtitle at the top of this page.
| hardware | runtime | precision | p50 ms | p95 ms | truth |
|---|---|---|---|---|---|
| loading… | |||||
Full matrix (8 lanes, 3 hardware classes): target-matrix-2026-08-19.html
Pick a target device and drag its latency budget. While the budget
stays at or above the device's RECORDED p95, the verdict is PASS. Drag it below —
the verdict flips to REFUSED, naming the budget that failed, the device, and
the evidence file it came from. A second, device-independent budget does the same for the
INT8 quantization tax on mAP50:95 (the metric ADR-0002 found
protocol-robust — mAP50 moved ~6.7x under an NMS-threshold sweep on this exact
data, mAP50:95 moved ~1%). Both budgets must clear for an overall PASS — same
rule as peregrine.gates.evaluate_release_gates()'s all(gate.status ==
"pass" for gate in gates).
This mirrors the real gate engine — budgets committed in git before the run they
judge (see configs/targets/matrix.yaml's l4_trt_* budgets,
committed 2026-08-19 before the L4 spot-VM run they judge even started —
peregrine/src/peregrine/gates.py). Here the visitor's slider stands in for that
committed budget so the mechanic is explorable — the two RECORDED numbers each device is
judged against never move.
| gate | name | measured | budget | status | detail | evidence |
|---|---|---|---|---|---|---|
| loading… | ||||||
6 of the 24 stratified overlays from the golden-v1 collapse
investigation (artifacts/golden/golden-v1-collapse-investigation-2026-08-20.md)
— real predictions on real independent-warehouse frames the model never trained on. Green =
ground truth, red = predicted pallet, blue = predicted carton, conf≥0.25. Captions are
copied from that investigation's own visual audit, not written for this page.
ONNX Runtime Web failed to initialize (WebAssembly unsupported, blocked, or out of memory in this tab). This is the hard fallback TZ S3-Phase3-4 requires — never an empty panel. Below is a recorded run captured on a working browser, honestly labeled.
Recorded via Playwright + Chromium against this exact build — not a mockup. See site/lab/README.md for how to regenerate it.