the same save file, resumed twice Β· same actions, different chance

One save.
Two futures.

Butterfly is a small game played inside a neural world model. The world is a file: save it, rewind it, fork it. What keeps the two copies from staying the same is chaos β€” and in here, chaos is measured.

29.5 fps
one GPU Β· 1.8B world model
PSNR ∞
save β†’ load β†’ bit-exact resume
4.4 s
half-life of a world under chaos
4.8 MB
the smallest file a world fits in
M1 Β· the save button

The world is a file.

In a neural game there is no level geometry, no entity list, no scene graph. Every frame is sampled by a video diffusion model, and the only place the world exists is the model's running state: a few gigabytes of attention cache, a sliding window of latent frames, and the exact position of the random-number generator.

.wsave serializes all of it. Load one back and the world resumes bit-for-bit β€” the same clouds, the same grass, the same next frame. Neural games never had a save button. Now they do, and it turns out to be a measuring instrument.

KV caches Γ—4the dream's short-term body VAE conv cache1.07 GB of streaming decoder latent windowthe last second of world actions + RNGeverything you did, and fate's dice β†’ 2,740 MBexact, PSNR ∞ or 4.8 MBre-primed, 41.8 dB
drop an anchor β†’ wander into a different future β†’ load: the world comes back exactly.

An honest footnote: naΓ―vely quantizing the cache to int8 shrinks the file to 1.9 GB and ruins the world (13.5 dB) β€” the state is far more fragile than the weights. A 4.8 MB re-prime save matches that fidelity at 1/400th of the size. The gap between "exact" and "re-primed" is a direct measurement of what the cache remembers beyond the pixels.


M2 Β· chaos, measured

Your opponent is a probability distribution.

Freeze a world. Resume it twice with the same actions but different noise: the copies drift apart with a half-life of 109 frames β€” 4.4 seconds. Nothing in the game scripts this; it is the raw stochastic physics of the model.

Now do the opposite β€” same noise, different action β€” and the worlds separate 3.55Γ— faster. That single ratio is the entire premise of the game: your hands are stronger than chance. But chance never stops.

drift frames 096192 TΒ½ = 4.4 s (chaos)
one changed action (your hands) chaos alone (same actions, re-rolled noise) measured on Matrix-Game-2.0 Β· latent MSE Β· 192 frames
3.55Γ—
controllability signal-to-noise ratio
0.85 s
the model's attention memory window
164 s
dream lifetime (RoPE budget) β€” then it collapses

Kindred instrument: Hansen & Wang detect world-model hallucination live with label-free predictors and dare you to break their world. Butterfly is the mirror image β€” chaos is always breaking ours, and the game is to hold it. Their flow-instability meter is on our roadmap as a live "dream stability" gauge.


the objective Β· hold the dream

The mission: your world is about to be re-rolled.

Butterfly's default run has one explicit goal. You get 10 moves to walk β€” that walk becomes the original timeline, the world you must defend. Then THE TEAR: fate re-rolls, and chaos starts pulling the dream away from what it was.

Hold it for 10 moves. Each move where you push the world further than chaos itself would (drift > 1.25Γ— the measured baseline) is a strike β€” three strikes and the dream tears. Survive, and you're graded S/A/B/C by how much more world you held than doing nothing. The frame's border burns green β†’ red with your drift, live. Mimicry scores zero; you win by steering against the drift.


the dream is chaotic, finite, and forkable. so we made those the rules.

the game Β· four dreams

Play against the physics, not a script.

Every mechanic below exists only because the engine is a neural network. A classical engine cannot offer any of these; a neural one cannot avoid them.

flagship Β· convergence race

βš”Anchor Duel

Anchor a moment, play on β€” that segment becomes the original timeline. Then fate re-rolls, chaos starts pulling the world away, and you steer it back. You play split-screen against your own ghost.

score = world held vs doing nothing Β· graded on the measured chaos curve Β· mimicry scores zero
divergence race

πŸ¦‹One Flap

Same fate β€” the saved RNG replays, bit-exact, nothing moves. You get one wing-beat: a single changed action. Everything that differs afterwards is your ripple.

verdict = your one flap vs a full re-roll of fate (S β‰₯ 1.25Γ—)
asynchronous multiplayer

⇩Relay

A world is a file, so hand it to a friend. They adopt your .wsave and continue the dream on their own timeline. The tree grows across people. Multiplayer with zero netcode.

2.7 GB exact Β· 4.8 MB re-primed (roadmap)
sandbox

☁Lucid

WASD through a photograph. Anchor, rewind, branch; watch the timeline tree grow, and open the inspector to see the dream's 2.7 GB body β€” cache by cache.

any image can become a world (image-to-world host)
one save, two choices: the same world resumed under "turn left" vs "turn right".

play

Runs on one GPU. Honestly.

Butterfly drives Matrix-Game-2.0 (1.8B, MIT) as its first world model host β€” 29.5 fps at 352Γ—640 on a single H200, β‰₯24 GB VRAM. No hosted demo yet; you bring the GPU, we bring the save button.

# 1 Β· code + world model source
git clone https://github.com/lixuan27/butterfly && cd butterfly
bash scripts/get_matrix_game.sh          # clones MG2 + downloads weights (~28 GB)

# 2 Β· serve the dream (needs 1Γ— GPU, β‰₯24 GB)
bash scripts/serve.sh                    # http://localhost:7860

# 3 Β· play
WASD walk Β· IJKL look Β· βš“ anchor Β· βš” duel chaos Β· πŸ¦‹ one flap Β· ⇩ relay a dream

The dream has inertia. Actions land once per world-move (~0.5 s) β€” every mode is built for steering, not twitch reflexes. Dreams live 164 seconds before the position encoding runs out and the world collapses. Both limits are physics, not design; we wrote the fiction around them.

Hosted play β€” the Space is up, the GPU is next. The game server is live at huggingface.co/spaces/Recharge23/butterfly with its one-seat queue (one dreamer plays, everyone spectates live, the seat rotates) β€” currently in landing mode while the GPU grant is pending. One granted GPU turns it into the first neural game with save-states anyone can play in a browser. Until then it's bring-your-own-GPU, honestly.