Website asset evidence

assets/manifest.json is the machine-readable provenance record for every image and the downloadable PDF staged by scripts/prepare_assets.py. It records source, renderer and input SHA-256 hashes, crop bounds, output hashes/dimensions, and the intended interpretation.

The teaser and pipeline are source-native SVG exports of the current report drawing functions. Typography, arrows and geometry remain vectors; measured RGB scatter layers are re-rendered at 900 DPI. The exporters call the original drawing functions through a return-figure option, so they do not rewrite report figures or their evidence manifests. The two figures remain method illustrations, not prediction galleries. paper.pdf is a byte-for-byte copy of the current report build.

The six qualitative PNGs are native Matplotlib re-renders of the same selected predictions, at least 2400px wide. The original PDFs contained 100-DPI scatter layers: rendering those PDFs at a higher resolution would only magnify existing pixels. Instead, scripts/render_qualitative.py runs the unchanged gallery producers on saved prediction artifacts and exports their live plot artists at the new resolution. The verified PDF-space rectangles still exclude producer title bands, scene/specimen identifiers and gallery footers. Predictions, colors, geometry, camera conventions and in-panel labels are preserved; there is no image upscaling or neural inference. These remain selected validation examples, not per-example AP evidence.

Reproduction gate: before high-resolution export, both full gallery producers reproduce their original 190-DPI PNGs with exact RGB equality (mean and maximum difference both zero). This also checks the dense artifact and losslessly unpacked union used by the handle renderer. The new exports use fresh 1400-DPI scatter layers inside temporary PDFs, then native Poppler rendering of the unchanged panel rectangles. Hinge panels are 2400×2329px; handle panels are 2400×1846px. The original report galleries and all saved predictions remain unchanged.

The source gallery’s visualization matching and labels are class-agnostic illustrations. They do not replace the benchmark evaluator’s IoU/AP matching protocol. Its footer counts are deliberately not presented on the site because they are producer-specific populations and must not be interpreted as AP evidence.

Selected panels

Website asset Source panel Meaning
motion-before.png Hinge gallery, first column / centroid row Same specimen and predicted part as the paired after panel; 0.42 m line error, FAIL.
motion-after.png Hinge gallery, first column / handle-guided row Same specimen and predicted part, separately computed projection frame; 0.05 m line error, PASS.
handle-recovered.png Handle gallery, third column Selected median-size child-only recovered handle.
handle-context.png Handle gallery, sixth column Selected matched child relabelled by its containing movable part.
failure-axis.png Hinge gallery, fourth column / handle-guided row Selected nonvertical-hinge failure.
failure-handle.png Handle gallery, fifth column Selected overextended dense-handle prediction.

Run python3 website/scripts/prepare_assets.py after a verified report rebuild to refresh the staged assets and manifest. It uses the existing .venv plotting environment and saved local data, without network access or model inference. The fixed hinge specimen list and the handle producer’s original deterministic selection rule are preserved. Reproduction checks guard against silently changing the illustrated specimens. Exports are staged before replacing the live assets. Previous website bitmaps are retained in the ignored preview/resolution-before.zip review archive.

Reader-facing legends

The source crops omit the gallery-wide legend, so the website supplies a separate key beside each example. In the recovery and overextended-mask panels, black is the annotated handle. In the context-correction panel, black is the predicted child handle, and green is the predicted containing part (experiments/fig_complementarity.py:159-180). Do not reuse a single “black = ground truth” legend across the handle gallery. In hinge panels, green is the predicted part, black is the annotated hinge line, and the colored dot/segment show the predicted origin and its perpendicular error. PASS means origin error below 0.25 m, not that every condition of a full detection is correct (experiments/fig_hinge_gallery.py:75-115).

Comparison alignment audit — September 21, 2026

The hinge pair is not pixel-registered. In experiments/fig_hinge_gallery.py:80, panel() chooses the origin for each arm, then passes it to frame() at line 82. frame() flips the viewing normal using that origin as the toward point (lines 55–60). This can reverse the projected direction between rows even though the specimen and predicted part are identical. A whole-image selector is therefore used on the website; there is no spatial wipe or interpolated prediction.

The gallery’s source docstring/report describe a shared view, but that is not guaranteed by the current renderer. Before introducing a registered slider or reusing the shared-camera claim, compute one projection frame per specimen and reuse it across both rows. The prediction-gallery renderers and report artwork were not modified as part of the website revisions; only the illustration functions gained an optional return-figure export hook.