Tectonic Globe

1 billion years of continental drift in 100 seconds

Scroll

What is this?

An animated visualization of Earth's tectonic history, from the assembly of Rodinia 1 billion years ago, through Pangaea, to the present day. The continents genuinely slide at 1-million-year resolution — 1,001 frames of plate reconstruction data rendered onto a 3D globe in Blender.

Built collaboratively by Xian and Claude (Anthropic's AI) over a series of working sessions. Xian brought the vision and caught the visual bugs; Claude wrote the code across Python geoscience libraries, Blender's 3D API, video encoding, and subtitle rendering.

generate_frames.py gplately/Merdith2021 → 1001 equirectangular PNGs compute_camera_path.py adaptive centroid tracking → camera_path.json render_globe.py Blender Cycles + dual-texture crossfade → MP4 render_flat.py PIL crossfade + ffmpeg → MP4

How it evolved

v1 — First pixels

Got a rotating globe with continental plates on screen. Camera targeting was broken and it was only 15 seconds long, but the pipeline existed: gplately data in, Blender render out.

v2 — Pacing & subtitles

Added variable pacing and subtitle overlays, but introduced a rotation bug that shifted everything 90° east. The kind of bug that's easy to write and hard to spot — it almost looks right.

v3 — Fixing rotations

Fixed the longitude bug but introduced a latitude one: rotating around the X axis instead of Y. On a globe, that's the difference between "tilt toward the camera" and "tilt sideways." Xian caught it by watching the output.

v4 — Smart camera tracking

The first version that actually worked well. Rewrote the camera path with Union-Find clustering to track the largest landmass through time, adaptive thresholds for polar supercontinents, Cartesian centroid averaging, and Gaussian smoothing. Duration went from 15 to 64 seconds with variable pacing.

v5 — Crossfade blending

Added a dual-texture shader in Blender that dissolves between geological frames instead of cutting. Figuring out Blender 5.0's ShaderNodeMix API (input indices: Factor=0, A=6, B=7, Result=2) was the tricky part.

v6 — 1 Ma resolution

The breakthrough. Instead of crossfading between frames 5 million years apart, we regenerated at 1 Ma resolution — 1,001 frames instead of 201. The continents genuinely slide. This is when it crossed from "sort of cool" to "wow."