unity-loop

Claude proposes and judges CSS variants of a fixed Unity WebGL scene on islo.dev sandboxes

unity-loop is a May 2026 proof of concept by Yossi Eliaz. Claude proposes CSS variants around a fixed Unity WebGL scene (Lightning VFX by @MirzaBeig), each served from its own islo.dev sandbox, then scores screenshots against a target prompt and promotes the winner. The scores on this page (1.2 to 4.8 over six rounds) come from the repo's deterministic offline demo. The Unity build itself never changes.

launch reel · 1080×1080 · scores shown come from the deterministic offline demo · download mp4 · rendered by agentreel

what this is

K parallel islo.dev sandboxes each serve the same fixed Unity WebGL build (Lightning VFX) wrapped in different CSS chrome. Claude screenshots each, scores against a target prompt (synthwave, ominous, calm), and the winner is promoted to the stage above. The 1.2 → 4.8 trajectory shown on this page is the canned run from the deterministic offline demo (bin/unity-loop demo); logs from a live Claude-judged run are not published.

pattern

for step in range(steps):
    variants = [proposer(target, history) for _ in range(K)]   # Claude proposes
    urls     = [islo_spawn(v) for v in variants]               # K islo sandboxes
    scored   = [(v, judge(url, target)) for v, url in zip(...)] # Claude judges
    winner   = max(scored, key=score)
    promote(winner)                                            # → champion.json
    history.append(winner)

headers (the part that breaks Unity hosts)

content-type: application/wasm
content-encoding: gzip
cross-origin-opener-policy: same-origin
cross-origin-embedder-policy: require-corp
cross-origin-resource-policy: cross-origin

Unity 2020 .unityweb is pre-gzipped — the server must say Content-Encoding: gzip or the loader fails. The islo gateway passes through both the encoding header and the body intact in streaming mode (verified end-to-end: 7MB .wasm.unityweb in 2.4s, HTTP/2).

why islo.dev

The loop needs many short-lived parallel workers: K=8 variants × 6 rounds is 48 sandbox runs. islo use foo --source github://… -- bash -c '…' + islo share foo 8080 is a one-liner per variant. Locally you'd be fighting ports and state.

not

This is not a Unity Editor pipeline. The wasm doesn't change between rounds. Real Unity rebuilds need unityci/editor:webgl (~10GB) and a license dance. That's the Tier 3 follow-on in POST.md.

credits