Everything below was computed for this site: the photographs by a ray tracer in numpy, the diagrams from the equations they illustrate. All of it is CC BY 4.0. Use it anywhere, with the line “Nan · hongdam.net · CC BY 4.0” and a link to this page. That is the whole ask.
Ray-traced
The classic view: a thin disk at 80°, Doppler-shifted, with the sky lensed behind it · JPG · computed here · Nan · hongdam.net · CC BY 4.0
From 12° off the axis · JPG · computed here · Nan · hongdam.net · CC BY 4.0
From 55° · JPG · computed here · Nan · hongdam.net · CC BY 4.0
From 84° · JPG · computed here · Nan · hongdam.net · CC BY 4.0
Light going straight: no lensing, half the disk hidden · JPG · computed here · Nan · hongdam.net · CC BY 4.0
Light bent: the far side over the top, the ring · JPG · computed here · Nan · hongdam.net · CC BY 4.0
Without the Doppler shift: both sides alike · JPG · computed here · Nan · hongdam.net · CC BY 4.0
The photon ring, close · JPG · computed here · Nan · hongdam.net · CC BY 4.0
A star field, lensed · JPG · computed here · Nan · hongdam.net · CC BY 4.0
The same star field, not lensed · JPG · computed here · Nan · hongdam.net · CC BY 4.0
A recomputation of Luminet's 1979 picture, drawn as ink dots · PNG · computed here · Nan · hongdam.net · CC BY 4.0
Wide, from 70° · JPG · computed here · Nan · hongdam.net · CC BY 4.0
Nearly edge-on · JPG · computed here · Nan · hongdam.net · CC BY 4.0
Lensed stars · JPG · computed here · Nan · hongdam.net · CC BY 4.0
Diagrams
Light past a black hole, by impact parameter · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Deflection angle against impact parameter · SVG · computed here · Nan · hongdam.net · CC BY 4.0
One dot, one ray · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Flamm's paraboloid · SVG · computed here · Nan · hongdam.net · CC BY 4.0
The effective potential · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Three orbits · SVG · computed here · Nan · hongdam.net · CC BY 4.0
A Kerr black hole in cross-section · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Shadow outlines by spin · SVG · computed here · Nan · hongdam.net · CC BY 4.0
The photon ring's subrings · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Penrose diagrams · SVG · computed here · Nan · hongdam.net · CC BY 4.0
The ladder of masses · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Hawking temperature and lifetime · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Tidal stretch at the horizon · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Two black holes against the Solar System · SVG · computed here · Nan · hongdam.net · CC BY 4.0
A gravitational-wave chirp · SVG · computed here · Nan · hongdam.net · CC BY 4.0
The eras of the universe · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Rahu and Ketu, the lunar nodes · SVG · computed here · Nan · hongdam.net · CC BY 4.0
Share cards
One per page, 1200 × 630, the credit line drawn on and in the file. These are what a link to a page unfurls into.
The ray tracer is 250 lines of Python with numpy, in tools/render.py on GitHub: a Schwarzschild metric, a thin Novikov–Thorne disk, RK4 steps in φ, Luminet's redshift formula, a procedural star sky, and a tone curve. The diagrams are tools/figures.py: every curve integrated or evaluated, then written as SVG. The live generators are the same equations in JavaScript and GLSL, in js/. Rerun the scripts and you get these files back. The credit is inside each file as well as beside it: EXIF on the JPEGs, text chunks on the PNG, a licence block in every SVG's metadata.