We measured 46 browser games built by AI from one prompt
Everyone has an opinion about whether AI can build a real game now. Nobody had run the games. We loaded every playable one into a real browser at 1440Γ900 and 390Γ844, clicked past the menus, and recorded what it actually did. Here is the whole dataset.
Correction, 12 August 2026: we have withdrawn every frame-rate number on this page
This page used to lead with βmedian frame time 66.6ms β about 15fpsβ and conclude that most AI-built games are too slow to play. That conclusion was not earned, and the fault was ours. Two independent bugs in our own harness, both found on 12 August:
- We measured on a software rasteriser. Our headless Chrome ran with
--disable-gpu, so it quietly fell back to Microsoft Basic Render Driver. Re-running one game under both settings: 76ms in software, 30ms on the GPU. The column we stored as the renderer name heldgl.VERSION, which readsWebGL 2.0 (OpenGL ES 3.0 Chromium)on both β so nothing in the dataset could have revealed it. - On 17 of 46 games we never got past the title screen. The harness captured a frame before and after an automated nudge specifically to detect this, and then never compared the two. Where the nudge did nothing, the βframe time while playingβ is the cost of drawing a menu.
We have now re-measured all 41 live games on a real GPU, sampling only after the game is open and only where we could confirm something on screen was actually moving. Twenty-one games clear that bar. Their median is 96 ms to draw one frame, against the 66.6 ms we withdrew.
π΄ So the games are slower than we said, not faster β and that is the least comfortable outcome available. We assumed the software renderer had inflated everything and expected to publish an apology and a set of better numbers. The two faults were pulling in opposite directions: software rendering made every game look slower, while sampling frames during menus and loading screens made them look faster. They roughly cancelled, and we published the result as though we had measured it.
The old average was accidentally in the right area. Almost none of the individual numbers were. Measured properly in play, Sunset Circuit moved from 16.7 ms to 137.7 and Kart Royale from 50 to 156.6, while other games moved as far in the opposite direction. Each of those sat on a game's own page as a fact about somebody's work. A roughly-right average built from wrong rows is a coincidence, not a measurement, and it would have gone on being quoted.
What we still cannot do: automatically prove a browser we do not control has reached gameplay. Judging by "did the picture change" accepts a game that merely opened another dialog; judging by "is the picture still moving" rejects a first-person game standing in an empty room, which is exactly what one of these is. We require both, which means we withhold more than we have to β twenty games are unpublished here that may be perfectly fine. A withheld number costs us a row; a wrong one costs the person who made the game.
Unaffected throughout and never withdrawn: download size, load time, console errors, phone rendering. Per-game figures are live again on the games we could confirm; the table below stays as the record of what we originally published, struck through.
The finding: the failure is the one a critic can't see
These games were built with a method whose core is an independent visual critic β a fresh agent that looks at the running game beside a reference and says which is better. It works, and it is the part of the method everyone reproducing it has confirmed.
But it is a visual critic, and a game running at 15fps screenshots identically to one running at 60fps. Frame rate is invisible to a still image, so it is invisible to the judge β that argument is structural and does not depend on any measurement. What we can no longer tell you is how badly this particular population falls down, because the numbers we had are the ones withdrawn above. The point survives; our evidence for its size does not.
There is a sharper version of the lesson now, and it is at our expense. We built a page arguing that nobody instruments these games, and then ran the instrument wrong for two weeks β in the direction that made our own argument look stronger. A bug that flatters your thesis is the one you will not go looking for. The fix is not more care; it is an assertion that fails the run: read the unmasked GPU string and refuse to record a number when it names a software device.
The assumption that died was ours. We expected phones to be the weak spot. They aren't β 38 of 39 render fine at 390Γ844 and only two overflow horizontally. We were wrong about that before we measured, which is the reason we measured.
Every game, slowest last
Frame time is p50 sampled while playing, after an automated nudge past the menus. Lower is better. Weight is what the browser transferred on first load.
Game names link to our page for that game β screenshot, full specs and a play button. The β goes straight to the creatorβs site.
| Game | Frame ms | βfps | KB | Errors | Phone |
|---|---|---|---|---|---|
| Pastel Nuketown β Β· Luckey Systems | 16.7 | ~60 | 345 | 0 | yes |
| Dream Logic β Β· Voidtalker | 16.7 | ~60 | 30 | 0 | yes |
| Claude\Zombies β Β· Justin Whitton | 16.7 | ~60 | 205 | 0 | yes |
| Workmelt β Β· Erik Nomitch | 16.7 | ~60 | 622 | 0 | no |
| Minimax of Duty β Β· sigco3111 | 16.7 | ~60 | 503 | 2 | yes |
| Nerd of Duty β Β· Simon Taylor | 16.7 | ~60 | 541 | 0 | yes |
| Everything Must Go β Β· Jeremiah Daws | 16.7 | ~60 | 251 | 0 | yes |
| Tiro Libre β Β· Morfeo Labs | 16.7 | ~60 | 333 | 2 | yes |
| Nutso Cab-O β Β· RE:Skob | 16.7 | ~60 | 9 | 0 | yes |
| Sunset Circuit β Β· Bee.games | 16.7 | ~60 | 259 | 1 | yes |
| RICHTER β Β· Stas Kulesh | 33.3 | ~30 | 2332 | 0 | yes |
| Wind Waker Game β Β· martbln_dev | 33.3 | ~30 | 272 | 0 | yes |
| Der Koloss β Β· Vesper | 33.4 | ~30 | 23197 | 0 | yes |
| Phantasy Claude Online β Β· fauxdufafa_ | 33.4 | ~30 | 2760 | 0 | yes |
| Kart Royale β | 50 | ~20 | 625 | 2 | yes |
| Dungeon Crawler Carnage β Β· Borelli Corp. | 50 | ~20 | 337 | 0 | yes |
| Yakko Kart β Β· pedrour | 50 | ~20 | 185 | 1 | yes |
| Story in NYC β Β· Edzzle | 50 | ~20 | 165 | 0 | yes |
| Starfall β Β· Mike Luan | 50 | ~20 | 429 | 0 | yes |
| You Always Do This β Β· B33fyDan | 66.6 | ~15 | 614 | 0 | yes |
| Frontline β Β· maximus_v0 | 66.8 | ~15 | 475 | 1 | yes |
| Clawd Pop 3D β Β· VibezZzCoder | 83.3 | ~12 | 200 | 0 | yes |
| Whirlwind Ascension β Β· Dylan Hsieh | 83.3 | ~12 | 612 | 0 | yes |
| Hoop D Doop β Β· Edzzle | 83.3 | ~12 | n/a | 0 | yes |
| K3-of-Duty β Β· OpenGame | 83.4 | ~12 | 3771 | 2 | yes |
| Sunset Runners β Β· Evan Milenko | 99.9 | ~10 | 672 | 3 | yes |
| Future Bots β Β· jonathanAIbr | 100 | ~10 | 238 | 0 | yes |
| Operation IronHold β Β· prasenx | 116.7 | ~9 | 217 | 2 | yes |
| Claude for Speed β Β· hey_madni | 133.3 | ~8 | 16811 | 1 | yes |
| Codex of Duty β Β· luongnv89 | 133.4 | ~7 | 1047 | 2 | yes |
| Skramble β Β· Atom Tan Studio | 150 | ~7 | 292 | 1 | yes |
| Kuru of Duty β Β· ravsau | 183.2 | ~5 | 436 | 0 | yes |
| Sands of the Restless β Β· Eddie Belaval | 350 | ~3 | 6969 | 0 | yes |
| Penguin Peak β Β· Jurij | 516.7 | ~2 | 1434 | 0 | yes |
| Dust Corridor β Β· Leon Lin | 583.3 | ~2 | 246 | 0 | yes |
| Sakura β Petals of the Everblossom β Β· danmana | 700 | ~1 | 525 | 0 | yes |
| DESCENT β Β· sjwebster-bne | 983.3 | ~1 | 632 | 2 | yes |
| Rocketball β Β· Atom Tan Studio | 1200 | ~1 | 1230 | 2 | yes |
| Claude of Duty: Phadda β Β· Zain Zafar | 1433.2 | ~1 | 1383 | 0 | yes |
One self-contained file looks like the better build
Six of the games ship as a single HTML file with no external scripts. The other 33 load a bundle. The single-file group is faster and more phone-proof:
| Build shape | n | Median frame ms | Median KB | Renders on phone |
|---|---|---|---|---|
| Single self-contained file | 6 | 33.4 | 612 | 6 / 6 |
| Bundled | 33 | 66.8 | 436 | 32 / 33 |
Treat this as a signal, not a proof β n is 6. Six games is not enough to claim single-file causes better performance, and the causation could easily run the other way: a developer who can fit a game in one file may have built a simpler game. We are reporting it because it is what the data says, with the sample size attached.
How we measured it, and where it is weak
Headless Chrome driven over the DevTools Protocol. Each game got a fresh page, eight seconds to boot, then six rounds of real clicks and Enter/Space to get past loading screens and menus β synthetic events do not work, because these games gate start behind input the browser considers trusted. Then a ~10 second requestAnimationFrame sample, a screenshot decoded pixel by pixel, and the console read for errors.
The limits, stated plainly:
- 7 of the 46 are missing because they blocked the browser's main thread for longer than our debugger call would wait. That is our instrument's ceiling, not a verdict on those games β two of them render perfectly well given more time. They are listed below rather than counted as failures.
- Three games under-report their weight, because cross-origin assets do not expose transfer size to the page. Those show n/a.
- An automated nudge is not a player. Where it never got past a menu, the frame time is a menu's frame time β which flatters the game, not the reverse.
- One machine, one run, headless, GPU disabled. Absolute numbers would differ on your hardware; the spread across 39 games measured identically is the part that carries.
Not measurable by our harness:
- Operation Blackout Β· taozhuo
- Speed Racer Β· Rahil Bhansali
- The Long Silence Β· Anshu Chimala
- Aleppo Corridor Β· Bryan Helmkamp
- KINDLE Β· Tony Downey
- Clawdbot Β· keshav0479
- The Hooded One Β· Christopher Kocurek
If you're about to build one
The lesson we took from this is in our prompt generator: it asks the agent for a measured number every round β frame time, console, weight β alongside the judged one, because the judge cannot see the failure that actually happens. Free, no email.
Open the prompt generator β or give a finished game a permanent home β
Method credit: the games here were built with the Gauntlet Loop, published by Matt Shumer after Claude of Duty. The directory of games is his; the measurements are ours. Nothing here is a criticism of the people who built these β shipping a playable 3D game in a weekend is the achievement, and the frame-rate gap is a property of the method, not the builders.