Capture Bevy visuals with BRP state-gated scenarios first, and timed screenshots only as fallback. Use when a task needs reliable screenshots of specific game states.
Use a minimal visual-check workflow for any Bevy app.
Default to BRP state-gated capture. Use timed capture only when BRP hooks are unavailable.
bash /Users/chris/.codex/skills/bevy-eyes-on/scripts/capture_after_brp_sequence.sh \
--requests-jsonl /path/to/scenario.jsonl \
--brp-url http://127.0.0.1:15702 \
--settle-ms 250 \
--app "<AppName>"
Use for screenshots of gameplay/submenus/precise states.
scenario.jsonl is one JSON object per line:
{"body": <request>, "wait_ms": <n>}{"probe": <request>, "until": {"path": "result.menu", "equals": "settings", "timeout_ms": 5000, "interval_ms": 100}}until supports exactly one matcher: equals or in.path uses dot lookup through objects/lists (list index by numeric segment, e.g. result.items.0.id).Example:
{"body":{"method":"open_pause_menu","params":{}},"wait_ms":120}
{"probe":{"method":"ui_state","params":{}},"until":{"path":"result.current_menu","equals":"pause","timeout_ms":4000,"interval_ms":100}}
{"body":{"method":"open_settings","params":{}}}
{"probe":{"method":"ui_state","params":{}},"until":{"path":"result.current_menu","equals":"settings","timeout_ms":4000,"interval_ms":100}}
If BRP hooks are missing, use $bevy-brp-instrumentation.
bash /Users/chris/.codex/skills/bevy-eyes-on/scripts/capture_after_delay.sh \
--delay-seconds 3 \
--app "<AppName>"
Use only for non-specific capture when state-driven BRP is unavailable.
--app or --window-id), then one full-display fallback.Run --help on either script for full flags.