raea play

Play a game live in a window, or headless with scripted keys, snapshots and a timing report.

View as Markdown

raea play runs a composition live: its Clock follows the wall clock, the keyboard, pointer and gamepads reach it, and its sound plays as it goes. It opens a window by default. With --offscreen it plays headless, which is how an agent plays a game: keys come from a script or a random hand, snapshots land at given seconds, and a JSON report says how each frame went.

Terminal
raea play game.tsx                                            # in a window, with your keyboard
raea play game.tsx --offscreen --input --seconds 10 --json report.json
raea play game.tsx --offscreen --input-script keys.json --snapshot 2 at-2s.png --snapshot 5 at-5s.png
raea play game.tsx --offscreen --input --input-log play.json  # record what was pressed ...
raea render game.tsx --input play.json -o same-run.mp4        # ... and render the very same run

A key script is {"FRAME": [keys]}, each set held from its frame until the next one, such as {"0": [], "30": ["ArrowRight"], "60": ["ArrowRight", "Space"]}. Keys can also be Mouse:Right, Wheel:Y 100, Pad0:South, Touch:0:16:16 and Pointer:X:Y (with :down while pressed). --input and --input-script both drive the keys, so they can't be given together.

Usage

Terminal
raea play EDIT.tsx [--input | --input-script KEYS.json] [--size WxH] [--seconds N|end]   (a game, live; also: --input-log FILE --offscreen --snapshot T FILE --json FILE --seek F FILE --scrub N --baked --autoplay --no-vsync --master --3d)

Headless: it needs nothing running and opens no window. Takes up to 1 argument besides its flags.

Flags

FlagTakesWhat it does
--3d–Draw the composition's 3D scene under its page, as its render draws it. With snapshots, the 3D is waited for before the clock starts.
--autoplay–Start playing at once instead of waiting for the first key or click.
--baked–Play a timeline from its bake: React steps through every frame once first, then no JavaScript runs while it plays.
--input–Press and release keys at random, 50 to 250 ms apart, like a player's hand, and measure input-to-photon latency. Arrow keys by default; RAEA_INPUT_KEYS names the sets to cycle through.
--input-logVALUEWrite each frame's input as played, in the timeline form raea render --input takes, so a render can repeat the play exactly.
--input-scriptKEYS.jsonDrive the keys from a script, {"FRAME": [keys]}, each set held until the next.
--jsonVALUEWrite the play's report (frame times, gaps, latency, memory) to this file.
--master–Master a timeline's sound the way its render masters it.
--no-vsync–Present frames as fast as they're drawn rather than at the display's rate, to measure the work itself.
--offscreen–Play headless, with no window: what agents and checks use.
--scrubVALUEJump to N frames spread over the timeline in shuffled order and report what each seek costs. Headless only.
--secondsN|endHow long to play, in seconds, or end to play a timeline to its last frame.
--seekV1 V2Jump straight to frame F and save it as a PNG. Repeatable; the report is the seeks alone. Headless only.
--sizeWxHThe stage's size in pixels (1080x1920 by default); a responsive composition lays out at it.
--snapshotV1 V2Save the stage at T seconds as a PNG. Repeatable. Headless only.

See also