Files
Sylpheed/tools/re-capture/title_sweep_probe.sh
sylph-decoder 15207b1c74 re: F6 unit 9 -- sweep period and onset, as ratios reproduced across two runs
Two captures of the same animation disagree on frame counts by 1.947x, so
frames are not comparable across runs. Expressed as ratios to a long
in-capture baseline, both runs agree: loop period = 13.93 baselines (0.35%
apart), and the sweep starts 0.79-0.80 baselines BEFORE the plate (0.9%).

This answers F6: the sweep does not start at t=0 as the port has it, nor
exactly with the plate -- it leads the plate by about 40 title units, under
a second, which is consistent with what the human reported seeing.

Surfaces a conflict rather than smoothing it: unit 8's title rate of 1.0
units/frame (from ptcopyright) and the plate's 0.571 units/frame are 1.75x
apart in the SAME capture. Either an element's declared ramp is misread or
the two are not on one clock -- the port's clock:"shared" premise. The
ratios stand without a clock; the title-unit conversions are 🟡 pending F4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
2026-09-02 19:20:30 +00:00

46 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# F6 unit 2 -- capture the TITLE's build-in and read the sweep's drawn alpha.
#
# Discriminator: pteff03's LEAF declares alpha 255 from its own t=0, while its
# PARENT ramps 0->255 across t=70..100. So in the drawn vertex colour:
# flat 255 throughout => the parent is NOT multiplied in
# a ramp 0->255 => it IS
# That also settles the port's own flagged ambiguity, whose stated separating
# interval (t=100..238) is the same one F6 is about.
#
# Simpler than the menu probe on purpose: ONE A press to skip the attract video,
# then no further input, so the title builds in undisturbed and stays.
set -u
export HOME=/sylph-home/re SDL_AUDIODRIVER=dummy DISPLAY=:98
export XENIA_PAD_FILE=/tmp/xenia_pad.txt
OUT="${1:-/sylph-home/re/f6}"; mkdir -p "$OUT"; rm -f "$OUT"/xenia_re_ui_draws_*.log
pad(){ printf '%s' "$1" > "$XENIA_PAD_FILE.tmp"; mv "$XENIA_PAD_FILE.tmp" "$XENIA_PAD_FILE"; }
pad ""
( cd "$OUT" && nohup run-canary --log_ui_draws=true \
--ui_draw_capture_frames=6000 --ui_draw_capture_max=1500000 \
>"$OUT/canary.stdout" 2>"$OUT/canary.stderr" & )
sleep 8
win="$(xdotool search --name "Xenia-canary" | tail -1)"
[ -n "$win" ] || { echo "FATAL: no Xenia window"; pkill -x xenia_canary; exit 1; }
xdotool windowactivate "$win" 2>/dev/null; xdotool key --window "$win" F10; xdotool key F10
echo "armed at ${SECONDS}s"
sleep 12; pad "press=A"; sleep 0.4; pad ""; echo "A (skip video) at ${SECONDS}s"
# ⚠️ ARMING IS NOT CONFIRMED BY SENDING THE KEY. Twice now a probe has printed
# "armed", pressed on, and written no draw log at all -- once because the window
# lookup failed, once with the window found and the key sent. A probe that cannot
# confirm its own instrument is recording is a probe whose negatives mean nothing.
# So: wait for the log to exist AND grow, and abort loudly if it does not.
for _ in $(seq 1 45); do
sz=$(stat -c %s "$OUT"/xenia_re_ui_draws_*.log 2>/dev/null | head -1 || echo 0)
[ "${sz:-0}" -gt 0 ] && break
sleep 1
done
[ "${sz:-0}" -gt 0 ] || { echo "FATAL: armed but no draw log after 45s -- not recording"; pkill -x xenia_canary; exit 1; }
echo "logging confirmed at ${SECONDS}s (${sz} bytes)"
sleep 260 # long enough for TWO leaf wraps, not one
pkill -x xenia_canary
echo "done at ${SECONDS}s"; ls -la "$OUT"/*.log 2>/dev/null