· Claude Fable 5.1 + Claude Code · Same prompt: a million-particle three.js black hole

Five rounds to bring mean luminance from 0.43 down to 0.10

The same black hole prompt to Fable 5.1 inside Claude Code: 42 turns, 41 tool calls, $4.24. Every round it rendered the frame itself, read the pixel statistics and decided what was blown out. Five rounds later the centre is black again, with spiral bands and a Doppler-brightened side — the one-shot attempt rendered nothing at all.

A black hole with a pure black centre, an accretion disk in spiral bands and two polar jets, one side brighter from Doppler beaming
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
Claude Fable 5.1 + Claude Code
us.anthropic.claude-fable-5-1
How
agent loop
Claude Code 2.1.266
Reasoning effort
high
Turns
42
Tool calls
41
Output tokens
50.5k
Wall time
15m 2s
Cost
$4.24
Artifact
696 lines, one file
Error feedback
none

Same model. Its one-shot attempt rendered nothing — a TDZ error — and after one round of repair came back nearly all white. Inside Claude Code, the same prompt produced this, and the five rounds of visual iteration are itemised:

RoundMean luminanceWhat it fixed
10.43additive dust over bloom blew out the whole frame
20.23disk still a white blob, no structure
30.15photon ring saturating to white
40.11bloom haze inside the event horizon
50.10final: black centre, visible spiral stripes, Doppler-brightened side, jets, nebula

That table is the most interesting data in the whole comparison: overexposure is a defect a person spots instantly, and so can a model — as long as it can get the pixel statistics for its own screenshot. Both runs without a render loop failed on it. Both runs with one fixed it themselves.

The scene holds 300,000 particles in three GPU-driven populations (Keplerian dust with sine turbulence, a twinkling star shell, two helical polar jets), a RingGeometry accretion disk shaded in polar coordinates with differential rotation, seamless fbm streaks and Doppler beaming, a black sphere with a Fresnel rim plus a back-face halo sphere forming the photon ring, and a procedural fbm nebula skybox. Ten renders across five rounds, matching hashes at ?t=7.5; in locked mode auto-rotate, mouse parallax and the FPS readout are all disabled so no DOM text can drift between frames.

Controls: drag to orbit, scroll to zoom, space to pause, 1/2/3 for palettes (Ember, Verdant-Gold), ?t=7.5 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.