Drag to tilt the view. Scroll or pinch to move closer or farther, or hold W and S. C starts or stops the camera, T hides captions, R makes a new black hole, ↑ and ↓ change its spin, D toggles dithering, F toggles full screen, M toggles sound, + and − change pixel size.
starting the GPU…
Stop camera
New black hole
Play sound
Full screen
Credits
Credits
Ideas by Antti Hellgren. Implemented with Claude by Anthropic.
All code was written for this project. The page uses no third-party code libraries. The methods below are published science and standard techniques, credited here.
Physics
The spinning black hole is described by the Kerr metric (Roy Kerr, 1963), in Boyer–Lindquist coordinates.
Light rays are traced with a Hamiltonian formulation, the standard approach of scientific black hole ray tracers such as GYOTO, GRay and Odyssey. The equations here were derived independently.
Innermost stable orbit, the hovering (zero-angular-momentum) observer’s frame and orbital speeds: Bardeen, Press & Teukolsky (1972).
Disk redshift and Doppler beaming follow Cunningham (1975) and Luminet (1979).
The first prototype used a light-bending shortcut popularized by Riccardo Antonelli’s “Starless” ray tracer.
Graphics
Mulberry32 random numbers, public domain, by Tommy Ettinger.
Hash constants from the xxHash family, by Yann Collet.
Value noise and fractal noise, after Ken Perlin’s work.
Ordered dithering with the Bayer matrix (Bryce Bayer, 1973).
Smoothstep, HSL color conversion and the Lorentz boost are standard formulas.
Colors
Event Horizon Telescope images of M87* (2019) and Sagittarius A* (2022).
NASA Goddard black hole visualizations by Jeremy Schnittman.
NASA artist illustrations of black hole accretion disks.
Favorite looks chosen during this project: cream gold, crimson, magenta and orange-red ember.
Story and captions
Sound
Synthesized live in the browser with the Web Audio API.
Look-ahead note scheduling after Chris Wilson’s “A Tale of Two Clocks” (2013).
Scales: major and minor pentatonic, the Lydian, Dorian, Aeolian and Mixolydian modes, and the Japanese hirajoshi scale.
Reverb from a generated noise impulse response.
Background noise inspired by the noise source of the Minimoog Model D: pink noise made with Paul Kellet’s filter, through a resonant two-stage low-pass.
Typeface
Silkscreen by Jason Kottke, SIL Open Font License, served by Google Fonts.
Close credits