A world model is a neural network that plays the role of the game engine: given the frames that came before and the key a player is pressing, it invents the next frame. Nothing is a recording — the game exists only inside the weights. Your job is to train one for Procgen CoinRun that is good enough for a person to actually play: coins score, deaths reset the level, and the controls respond.
Getting there is not the hard part. Getting there fast is. This is a speedrun: every entry runs on the same fixed machine, and your rank is the wall-clock time your run takes to reach a fixed quality bar. Architecture, data generation, precision, the shape of the schedule, and how well you keep eight GPUs busy are all in scope, and they all cost the same currency — minutes.
The record book lives on GitHub, and records are claimed by pull request. You can play the current record model in the arcade.
Every entry is timed on the same rig: one 8×H100 + 64 vCPU box. No bigger cluster, no head start, no pre-warmed cache. The engineering of the run — getting the machine to do useful work from the first second — is part of the sport, not a distraction from it.
Your rank is the wall-clock time of your train.sh, end to end, measured on the node. Data generation is inside that window. A minute on the CPUs costs exactly what a minute on the GPUs costs, so overlapping the two is a real optimization, not an accounting trick. There is no separate “setup” budget to hide work in.
You get the environment, not a corpus. Roll CoinRun frames however you like on the node — how many, at what policy, at what resolution, in what order — using the training levels only. Deciding how much data is worth its minutes is one of the central trades in the run.
The run ends when the model reaches a score of 0.0016 or better on the frozen held-out split. That threshold is not arbitrary: it is a quality bar where the game demonstrably plays well, and it sits comfortably above eval noise, so you cannot win by getting lucky on a measurement.
score = held-out EDM denoising loss + 0.002 × event cross-entropy Lower is better. Target: score ≤ 0.0016
This is a proper scoring rule: it rewards a model for capturing the whole distribution of possible next frames rather than a blurry average of them. A model that hedges — smearing an uncertain coin or enemy across the frame — scores worse than one that commits to sharp, plausible futures.
The event term is what makes it a game rather than a video. Coins and deaths are rare, low-pixel-count events that a pure pixel loss will happily ignore, so they get their own cross-entropy: the model has to know when the level should reset and when the score should tick. Without it you get a beautiful side-scroller in which nothing ever happens.
Scoring is done by a frozen nanocoinrun-score harness on secret transitions, so the held-out split cannot be fit against directly.
There is no submission form. Records are claimed by pull request against the challenge repo: you run your train.sh on the reference node, score the resulting model with the frozen harness, and open a PR adding a row to RECORDS.md with your wall-clock time, score, and the recipe you used. The leaderboard on this site is derived from that file. Fewest wall-clock minutes to the target wins.
The reference entry is deliberately unoptimized — a 224-channel EDM UNet with a naive DDP loop. It is meant to be beaten.