port: place the last unused capture; its residual is oracle-to-oracle, not the port's
live-attract-title-press-a-band.png is 1279x120 and the harness could not compare a band. Placed by sliding: y=520, a 25x drop over five pixels, and it fits at t=236-238, the plate's own window. Its 0.354% is not the port's error. The port reproduces the same band of live-title-press-a EXACTLY (0.000%), and the two captures differ from each other by 0.301% -- two thin strips, 248x5 and 206x1, the shape of a sub-pixel edge difference. The row's job is to stay near the oracle-to-oracle gap, not reach zero, and it says so. I had begun writing that the attract-returned title differs from the boot title. It is two hairlines. The connected-component breakdown stopped it. All eight live captures are now used. The three that were idle were each blocked by the harness, not the capture. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -100,6 +100,21 @@ MAP=(
|
||||
# no-plate one at ~400 -- and both to 0.01 % or better. A geometry error in how
|
||||
# the sweeps are drawn would leave a floor in both. Neither has one.
|
||||
"title_plate:$CAPS/live-title-press-a.png:plate"
|
||||
# A BANDED row -- the capture is 1279x120, not a full frame, and the harness
|
||||
# could not compare one until now. That was the only reason this capture sat
|
||||
# unused; nothing about it was unusable.
|
||||
#
|
||||
# Its y offset is MEASURED, not guessed: sliding it down the render, the
|
||||
# structural difference is 0.354 % at y=520 against 8.9-9.1 % five pixels
|
||||
# either side and 17-52 % further out. A 25x drop over five pixels.
|
||||
#
|
||||
# ⚠️ Its residual is NOT the port's error. The port reproduces the same band of
|
||||
# `live-title-press-a.png` EXACTLY (0.000 %), and the two captures differ from
|
||||
# each other by 0.301 % -- two thin horizontal strips, 248x5 px and 206x1 px,
|
||||
# the shape of a sub-pixel edge difference rather than a state difference. So
|
||||
# 0.354 % is very nearly the oracle-to-oracle gap and this row's job is to stay
|
||||
# near it, not to reach zero.
|
||||
"title_band:$CAPS/live-attract-title-press-a-band.png:band"
|
||||
"publisher_logo:$CAPS/live-splash-publisher.png:screen"
|
||||
"developer_logos:$CAPS/live-splash-developer.png:screen"
|
||||
)
|
||||
@@ -115,7 +130,12 @@ for row in "${MAP[@]}"; do
|
||||
IFS=: read -r name cap pose forced <<<"$row"
|
||||
if [ ${#want[@]} -gt 0 ] && ! printf '%s\n' "${want[@]}" | grep -qx "$name"; then continue; fi
|
||||
[ -f "$cap" ] || { printf '%-17s %s\n' "$name" "no capture"; continue; }
|
||||
if [ "$pose" = focus ]; then
|
||||
if [ "$pose" = band ]; then
|
||||
godot --path port --resolution 1280x720 -- "--screen=title" --overlay=press_start \
|
||||
--time=3.95 "--capture=$OUT/$name.full.png" >"$OUT/$name.log" 2>&1 || true
|
||||
[ -f "$OUT/$name.full.png" ] && convert "$OUT/$name.full.png" \
|
||||
-crop 1279x120+0+520 +repage "$OUT/$name.render.png"
|
||||
elif [ "$pose" = focus ]; then
|
||||
godot --path port --resolution 1280x720 -- "--menu=main_menu" "--focus=$forced" \
|
||||
--script=wait "--shots=$OUT/$name" >"$OUT/$name.log" 2>&1 || true
|
||||
[ -f "$OUT/${name}_00_start.png" ] && cp "$OUT/${name}_00_start.png" "$OUT/$name.render.png"
|
||||
@@ -161,7 +181,11 @@ for row in "${MAP[@]}"; do
|
||||
fi
|
||||
[ -f "$OUT/$name.render.png" ] || { printf '%-17s %s\n' "$name" "render failed"; continue; }
|
||||
# Crop the render to the capture's frame. The capture is the crop, not a scale.
|
||||
convert "$OUT/$name.render.png" -crop 1279x675+0+0 +repage "$OUT/$name.crop.png"
|
||||
if [ "$pose" = band ]; then
|
||||
cp "$OUT/$name.render.png" "$OUT/$name.crop.png"
|
||||
else
|
||||
convert "$OUT/$name.render.png" -crop 1279x675+0+0 +repage "$OUT/$name.crop.png"
|
||||
fi
|
||||
raw=$(convert "$OUT/$name.crop.png" "$cap" -metric RMSE -compare -format "%[distortion]" info: 2>&1 | tail -1)
|
||||
raw=$(python3 -c "print('%.2f' % (float('$raw')*255))" 2>/dev/null || echo "?")
|
||||
note=""
|
||||
|
||||
Reference in New Issue
Block a user