RSIGame/rsigame-page

Space

RSIGame — project page

12

57 commits

1 linked in READMEs

updated Oct 1, 2026

See the code

README

RSIGame — project page

Static site: plain HTML/CSS/JS, no build step, no framework. It shows every game we ran RSIGame on twice — the initial generation (round 0) and the same game after 30 RSIGame rounds — plus one game that visitors play in the browser.

Live: https://rsigame-rsigame-page.static.hf.space (a public HF static Space)

Run it locally

python -m http.server 8765        # then open http://127.0.0.1:8765

The page fetch()es JSON, so open it over HTTP, not as a file:// path.

Video, images and the playable builds are not in this repo (see Media below). By default they stream from the published site, so a fresh clone works with no extra files. To use a local copy instead, put it (or a symlink to it) at ./media and open the page with ?media=local:

ln -s /path/to/evogame-page-media media     # then http://127.0.0.1:8765/?media=local

Layout

index.html              the page: game screen, hero, before/after, gallery, results, citation
play.html               standalone Godot web player (one shared engine, one game pack per build)
static/css/base.css     tokens + everything shared (cards, modal, charts, wipe comparison)
static/css/v1.css       this design's own pieces (game screen, spotlight, pair cards)
static/js/core.js       data loading, video scheduling, before/after wipe, game dialog, charts
static/js/v1.js         this page: what goes where
static/data/evo.json    one row per game: round-0 and round-30 scores, chosen demo, score curve
static/data/evo/<arm>/<task>.json   per-requirement before/after + judge rationales + 30-round timeline
static/data/play.json   the playable builds (engine + per-round .pck sizes)
static/data/games.json  the 280 initial generations across both engines (used by v2–v4 only)
_build/*.py             regenerate everything from the experiment runs (see below)
v2/ v3/ v4/             earlier design drafts kept for reference; the live page is v1 (root)

static/js/core.js is shared by all four designs — change it carefully.

Media (not in this repo)

Built into /storage/admin/wenyi/evogame-page-media on the lab machine:

pairs/<arm>/<task>/p0.mp4, final.mp4, p0.webp, final.webp   the same demo on both builds (54 MB)
play/engine/godot.js, godot.wasm.gz, godot.audio*.js        one shared Godot 4.6.2 web engine (9 MB gz)
play/<arm>/<task>/<r0|r30>/index.pck                        one game pack per playable build
hero_evo.mp4 / .webp                                        the moving background: 30 games in one video
baseline/...                                                clips for the v2–v4 drafts

Everything the live site needs is also in the Space repo, so the quickest way to get a full working copy is to clone the Space (below).

Rebuild the data

Needs the experiment runs on the lab machine, and Godot 4.6.2 with web export templates for build_web.py.

python _build/build_pairs.py                 # before/after clips + evo.json + per-game detail JSON
python _build/build_hero.py --evo --out hero_evo --cols 5 --rows 6 --tile 320x180 --gap 3
python _build/build_web.py --games godot_qwen/platformer-dig-descent   # playable web builds
python _build/build_media.py                 # only for the v2–v4 drafts (280 baseline games)

build_pairs.py --reuse-media rebuilds the JSON without re-encoding video.

Deploy

The live site is the HF Space RSIGame/rsigame-page (sdk: static). It holds the page and its media, so a clone is a complete, runnable copy:

git clone https://huggingface.co/spaces/RSIGame/rsigame-page
cd rsigame-page && python -m http.server 8765

Push to that repo to publish (needs write access on the Space). The Space copy differs from this repo in two small ways, both injected at deploy time: window.EVO_MEDIA = "media" pins the media folder, and window.EVO_NO_SWITCH = true hides the v1–v4 switcher.

Notes for whoever picks this up

  • Scores are ×100 of the GameCraft-Bench reward, judged by Qwen3.8-27B over three passes; round 0 and round 30 use the same scorer, judge and demo scripts, so the two sides are comparable.
  • The gallery holds 181 of the 280 runs. The 99 skipped ones are skipped on purpose: the champion is round 0 (41), base and champion share no replayable demo (39), no og record (14), not scored yet (5).
  • Videos never autoplay more than a handful at a time: cards hold a poster until they scroll into view, at most 12 clips play at once, and the hero is one pre-composited video rather than 30.
static

RSIGame/rsigame-page

Space

RSIGame — project page

12

57 commits

1 linked in READMEs

updated Oct 1, 2026

See the code

README

RSIGame — project page

Static site: plain HTML/CSS/JS, no build step, no framework. It shows every game we ran RSIGame on twice — the initial generation (round 0) and the same game after 30 RSIGame rounds — plus one game that visitors play in the browser.

Live: https://rsigame-rsigame-page.static.hf.space (a public HF static Space)

Run it locally

python -m http.server 8765        # then open http://127.0.0.1:8765

The page fetch()es JSON, so open it over HTTP, not as a file:// path.

Video, images and the playable builds are not in this repo (see Media below). By default they stream from the published site, so a fresh clone works with no extra files. To use a local copy instead, put it (or a symlink to it) at ./media and open the page with ?media=local:

ln -s /path/to/evogame-page-media media     # then http://127.0.0.1:8765/?media=local

Layout

index.html              the page: game screen, hero, before/after, gallery, results, citation
play.html               standalone Godot web player (one shared engine, one game pack per build)
static/css/base.css     tokens + everything shared (cards, modal, charts, wipe comparison)
static/css/v1.css       this design's own pieces (game screen, spotlight, pair cards)
static/js/core.js       data loading, video scheduling, before/after wipe, game dialog, charts
static/js/v1.js         this page: what goes where
static/data/evo.json    one row per game: round-0 and round-30 scores, chosen demo, score curve
static/data/evo/<arm>/<task>.json   per-requirement before/after + judge rationales + 30-round timeline
static/data/play.json   the playable builds (engine + per-round .pck sizes)
static/data/games.json  the 280 initial generations across both engines (used by v2–v4 only)
_build/*.py             regenerate everything from the experiment runs (see below)
v2/ v3/ v4/             earlier design drafts kept for reference; the live page is v1 (root)

static/js/core.js is shared by all four designs — change it carefully.

Media (not in this repo)

Built into /storage/admin/wenyi/evogame-page-media on the lab machine:

pairs/<arm>/<task>/p0.mp4, final.mp4, p0.webp, final.webp   the same demo on both builds (54 MB)
play/engine/godot.js, godot.wasm.gz, godot.audio*.js        one shared Godot 4.6.2 web engine (9 MB gz)
play/<arm>/<task>/<r0|r30>/index.pck                        one game pack per playable build
hero_evo.mp4 / .webp                                        the moving background: 30 games in one video
baseline/...                                                clips for the v2–v4 drafts

Everything the live site needs is also in the Space repo, so the quickest way to get a full working copy is to clone the Space (below).

Rebuild the data

Needs the experiment runs on the lab machine, and Godot 4.6.2 with web export templates for build_web.py.

python _build/build_pairs.py                 # before/after clips + evo.json + per-game detail JSON
python _build/build_hero.py --evo --out hero_evo --cols 5 --rows 6 --tile 320x180 --gap 3
python _build/build_web.py --games godot_qwen/platformer-dig-descent   # playable web builds
python _build/build_media.py                 # only for the v2–v4 drafts (280 baseline games)

build_pairs.py --reuse-media rebuilds the JSON without re-encoding video.

Deploy

The live site is the HF Space RSIGame/rsigame-page (sdk: static). It holds the page and its media, so a clone is a complete, runnable copy:

git clone https://huggingface.co/spaces/RSIGame/rsigame-page
cd rsigame-page && python -m http.server 8765

Push to that repo to publish (needs write access on the Space). The Space copy differs from this repo in two small ways, both injected at deploy time: window.EVO_MEDIA = "media" pins the media folder, and window.EVO_NO_SWITCH = true hides the v1–v4 switcher.

Notes for whoever picks this up

  • Scores are ×100 of the GameCraft-Bench reward, judged by Qwen3.8-27B over three passes; round 0 and round 30 use the same scorer, judge and demo scripts, so the two sides are comparable.
  • The gallery holds 181 of the 280 runs. The 99 skipped ones are skipped on purpose: the champion is round 0 (41), base and champion share no replayable demo (39), no og record (14), not scored yet (5).
  • Videos never autoplay more than a handful at a time: cards hold a poster until they scroll into view, at most 12 clips play at once, and the hero is one pre-composited video rather than 30.
static