· GPT-6 Astra + Codex CLI · Same prompt: a million-particle shape morph

A million particles exploding and reassembling between four shapes

A different prompt: one cloud of a million particles has to morph between a DNA double helix, a spiral galaxy, a torus knot and extruded 3D text, and every transition has to scatter outward before it converges. GPT-6 Astra iterated four times inside Codex CLI, with every shape position computed in the vertex shader from simTime.

A million particles caught mid-transition between shapes, scattering outward and converging toward a target form, in cool tones
Run the demo WebGL · uses your GPU
drag to orbit · scroll to zoom · space to pause · 1/2/3 for palettes Open full screen ↗

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
23
Output tokens
31.0k
Wall time
10m 9s
Artifact
674 lines, one file
Error feedback
none

The black hole prompt tested how complete a single static scene could be. This one tests the timeline: one cloud of a million particles cycling between four target shapes, where transitions cannot be straight interpolation — the particles have to scatter outward first and then converge — and the whole timeline still has to be driven only by simTime, so a screenshot at a given ?t= reproduces byte for byte.

Four rounds of self-iteration, 23 tool calls. Testing covered all four shapes, the scatter transitions, three palettes, pause and resume, zoom and resize; a million particles and the r170 hooks behave, there are no browser errors and no GLSL errors, and the deterministic screenshot hashes match.

Worth noting is that this class of requirement is a step harder architecturally than the black hole was: the four sets of target positions have to be computed once on the CPU and stored in several BufferAttributes, with the blending, easing, scatter and noise perturbation all moved into the vertex shader. Send a million positions across per frame instead and the frame rate collapses immediately.

Controls: drag to orbit, scroll to zoom, space to pause, 1/2/3 for palettes. Parameters like ?t=5 or ?t=11 stop the clock mid-transition, where the scatter is visible.

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.