Open in Chrome (Android) or Safari (iPhone) — not inside another app.
Stay on Wi-Fi. First run downloads ~40 MB; after that it's cached.
Keep the screen on and don't switch apps while it runs.
When asked, enter your name and your phone's model — e.g.
Rahul and Pixel 8.
What it actually does
Two models run one after the other on each photo:
Stage
Model
Output used
1. Vehicle detection
YOLO11n, 80 COCO classes, 640×640
Boxes for car and truck
2. Parts segmentation
Fine-tuned YOLO, 21 car parts, 640×640
Which parts are visible
Processing details
Preprocessing — each photo is letterboxed to 640×640 (aspect preserved,
grey 114 padding), not stretched.
Decoding — 8400 candidate boxes per image; best class per box; keep
confidence ≥ 0.40; class-aware NMS at IoU 0.45.
Masks are skipped. Both models can output segmentation masks; we only need to know
whether a part is visible, so mask data is discarded.
Coverage — a part counts as covered if it's found in any of the 8 photos.
All 21 should be found across the set.
Correctness check — before a runtime is trusted, it runs 2 reference photos
3× each and its output must match the desktop floating-point result within
0.15. Runtimes that fail are rejected and the next one is tried.
The 8 photos
A full walkaround of one vehicle — four faces and
four corners, so every panel is visible at least once.
Runtimes being compared
#
Runtime
Used when
1
LiteRT + WebGPU
Preferred — smallest and usually fastest
2
TensorFlow.js + WebGPU
If LiteRT fails the correctness check (e.g. iPhones)
3
TensorFlow.js + WebGL
If the device has no WebGPU at all
The test runs all three regardless, so we can
compare. In production only the first one that passes would be used.