Night city: 3,707 buildings and 1.04 million raindrops on one InstancedMesh
A cyberpunk city in the rain, from GPT-6 Astra iterating five times inside Codex CLI with ten render checks. Street-level canyons, wet-ground reflections, neon signage and streaked rain all computed in shaders, with matching fixed-time screenshot hashes. Of the two runs, this is the one that reads as a city.
The on-screen labels are in Chinese: this is the model's verbatim output from an experiment run in Chinese, and editing it would make the artifact something other than what was measured.
How it was made
- Model
- GPT-6 Astra + Codex CLI
- gpt-6-astra
- How
- agent loop
- Codex CLI 0.153.4
- Reasoning effort
- high
- Turns
- 1
- Tool calls
- 28
- Output tokens
- 32.9k
- Wall time
- 17m 53s
- Artifact
- 377 lines, one file
- Error feedback
- none
The third prompt: procedurally generate a city at night in the rain. Harder than either the black hole or the shape morph, because “does this look like a city” cannot be written as an assertion — the hooks can verify particle counts, error counts and hashes, and nothing else. Whether the composition works has to be seen.
Five rounds of visual iteration and ten render checks: no GLSL errors, no console errors, matching hashes for the fixed-time screenshot, and three palettes, interactions and resize all passing. 3,707 buildings plus 1,048,576 rain particles, at roughly 4 FPS under SwiftShader software rendering — a real GPU is far smoother.
What makes it work is the street-level scale: the camera flies through canyons between towers rather than over the skyline, so lit windows, neon signage, road reflections and streaked rain all land in the same frame. The Fable 5.1 run scores higher on the technical numbers — 5,422 buildings, a more complete reflection implementation — but frames it from above and darker, and reads less like a city. That contrast is the point of publishing both.
One honest note: the upstream stream disconnected once during this run and the harness reconnected automatically (1/5) before finishing. The artifact was unaffected, but the wall time includes that retry.
Controls: mouse movement for parallax, drag for a free camera, scroll to zoom, space to
pause, 1/2/3 for palettes, ?t= to freeze the clock.
Same prompt, other runs
three.js r170 is served from this site, so running a demo makes no third-party request. Published by the author as an individual; testing was self-funded and nothing here represents an employer's position.