test: committed replay fixtures from the public-domain corpus
Five HDF5 embedding dumps from bali/ — Road to Bali (1952) — 3.6 MB total, generated at 5 fps with a 32 px minimum face. CI never calls a model, so inference happens on a GPU host and CI replays these as data; everything downstream of embedding is cheap CPU maths. Public domain is the reason this corpus rather than a convenient one: derived fixtures can be committed, where anything cut from a copyrighted title could not live in the repository at all. The set covers distinct behaviours rather than being five of the same thing: bali_28 has 9 cuts, so it exercises shot/reverse-shot association (AR-007); bali_46 is sparse at 140 faces over 385 frames, so it exercises gaps and extinction (AR-013); bali_13 is the busiest at 4 faces per frame; bali_31 is short at 29s. All five recorded zero drops. Both pinned parameters are consequences of measurements, not defaults: 5 fps because 1 fps over a 77s clip is 77 frames, too thin for an extinction window measured in tens of seconds; 32 px because that is the VR-005 floor, and the corpus is 480x360 so a stricter value would reject most of what is there. make_fixtures.sh regenerates them. Reproducibility is the requirement — a fixture whose provenance is unknown is worse than none, because it will be trusted. These are byte-reproducible only because of AR-004: before node outputs blocked rather than dropped, the same command produced different dumps run to run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> TRACES: VR-001 | PR-002
This commit is contained in:
Executable
+60
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# make_fixtures.sh — regenerate the committed replay fixtures.
|
||||||
|
#
|
||||||
|
# TRACES: VR-001 | PR-002
|
||||||
|
#
|
||||||
|
# CI never calls a model (see docs/requirements.md, "CI never calls a model"):
|
||||||
|
# the embedder is impractical on the N100 CI host, so inference happens HERE, on
|
||||||
|
# a machine with a GPU, and CI consumes the HDF5 dumps as data. Everything
|
||||||
|
# downstream of embedding — tracking, presence windows, belief accumulation,
|
||||||
|
# expansion — is cheap CPU maths and replays from these files.
|
||||||
|
#
|
||||||
|
# Reproducibility is a requirement, not a nicety. A fixture whose provenance is
|
||||||
|
# unknown is worse than no fixture, because it will be trusted. Every parameter
|
||||||
|
# that affects the output is pinned below rather than left to a default, and the
|
||||||
|
# dumps carry the embedder identity and SHA-256 (GR-004) so a replay cannot be
|
||||||
|
# silently scored against the wrong gallery.
|
||||||
|
#
|
||||||
|
# These are byte-reproducible only because node outputs block rather than drop
|
||||||
|
# on a full channel (AR-004). Before that fix the same command produced
|
||||||
|
# different dumps run to run, since what got dropped depended on timing.
|
||||||
|
#
|
||||||
|
# Source: bali/ — Road to Bali (1952), public domain. That matters: derived
|
||||||
|
# fixtures can be committed, where anything cut from a copyrighted title could
|
||||||
|
# not live in the repository at all.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
CLIPS="${CLIPS:-$REPO/../bali}"
|
||||||
|
GALLERY="${GALLERY:-$REPO/gallery_lvface.h5}"
|
||||||
|
BIN="${BIN:-$REPO/build/scene_analyze}"
|
||||||
|
OUT="$REPO/tests/fixtures/dumps"
|
||||||
|
|
||||||
|
# Pinned. Changing either invalidates every committed fixture.
|
||||||
|
# fps 5 — 1 fps over a 77 s clip is 77 frames, too thin to exercise an
|
||||||
|
# extinction window measured in tens of seconds.
|
||||||
|
# min-face — 32 px, the VR-005 measured floor (98.1% TPI). The corpus is
|
||||||
|
# 480x360, so a stricter value would reject most faces present.
|
||||||
|
FPS=5
|
||||||
|
MIN_FACE_PX=32
|
||||||
|
|
||||||
|
[[ -x "$BIN" ]] || { echo "no scene_analyze at $BIN (set BIN=)" >&2; exit 1; }
|
||||||
|
[[ -f "$GALLERY" ]] || { echo "no gallery at $GALLERY (set GALLERY=)" >&2; exit 1; }
|
||||||
|
[[ -d "$CLIPS" ]] || { echo "no clips at $CLIPS (set CLIPS=)" >&2; exit 1; }
|
||||||
|
|
||||||
|
mkdir -p "$OUT"
|
||||||
|
|
||||||
|
for clip in "$CLIPS"/Road_To_Bali-*.webm; do
|
||||||
|
n="$(basename "$clip" .webm)"; n="${n##*-}"
|
||||||
|
echo "── bali_$n"
|
||||||
|
"$BIN" --movie "$clip" --gallery "$GALLERY" \
|
||||||
|
--fps "$FPS" --min-face-px "$MIN_FACE_PX" \
|
||||||
|
--dump-embeddings "$OUT/bali_$n.h5" \
|
||||||
|
--output /dev/null 2>&1 | grep -E "wrote|dropped" || true
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Regenerated in $OUT — verify the diff is empty if nothing upstream changed."
|
||||||
|
echo "A non-empty diff means detection, alignment or embedding moved. That is"
|
||||||
|
echo "either a regression or a deliberate change, and either way the golden"
|
||||||
|
echo "outputs derived from these fixtures need reviewing."
|
||||||
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Reference in New Issue
Block a user