Earth is the Oldest Stereoscope is a computationally aligned stereo pair of the Moon, captured simultaneously from Boston and Santiago during the lunar eclipse on March 2nd, 2026. Two people, on two rooftops, with two telescopes of the same model, shooting one Moon. The baseline between the cameras is about 4,800 miles (7,800 km), more than half an Earth diameter.
The two images show the same face of the Moon at the same instant, from positions about 4,800 miles (7,800 km) apart. Your left eye sees what a telescope in Boston saw. Your right eye sees what a telescope in Santiago saw. The Moon is about 236,000 miles (380,000 km) away, so the parallax is small, but it is real, and it is enough. What you are looking at is a version of the Moon that no single observer on Earth can see.

Lineage
Charles Wheatstone showed in 1838 that horizontal disparity between two images is the only cue the brain needs for stereoscopic depth. His first stereograms were pencil drawings of cubes and octahedra, viewed through a pair of angled mirrors. Photography was one year old. Telescopes already existed but nobody had bolted the two together.

Twenty years later, Warren De la Rue made the first stereoscopic photograph of the Moon from his observatory in Cranford, around 1858. He did not have two telescopes on opposite sides of Earth, and he could not have used them if he had. At the Moon's distance, Earth's diameter is a small baseline and his wet-plate process was slow. So he waited. The Moon wobbles slightly as it orbits, an effect called libration, which makes it show a little more of one side or the other at different times of the month. De la Rue photographed the Moon on separate nights, sometimes months apart, and when the libration angle was right, the two photographs combined into a stereo pair. His baseline was time. When John Herschel saw the result, he described the effect as the Moon viewed by "a giant whose eyes were at that distance asunder."

The title of this piece is a reframe of Nam June Paik's Moon is the Oldest TV (1965). Paik fixed magnets to twelve CRTs and deflected their electron beams into moon-phase-like shapes. He called the Moon the oldest TV because for most of human history it was the brightest moving image in the sky. The move is a homology: a natural object used as a technical medium. Earth, by the same kind of substitution, is the oldest stereoscope. Not because the planet has lenses, but because of what people have always done with it. When two people are far apart and miss each other, they look up at the Moon. In that moment they become a pair of eyes separated by a continent, or an ocean, or half a planet, and the Moon is what their two gazes agree on. Two viewpoints, one subject, and that is a stereoscope.

What this project does is take that operation literally. Carlos and I were separated by a season. His rooftop was summer. Mine was still snowed in. We pointed the same Seestar S50 at the same Moon at the same second, and brought the two images back together.


What is new here is only the baseline: De la Rue could not take two pictures of the same Moon at the same instant, because his second camera did not exist. In our approach, everything is synchronized.

The Night
Eclipse
The eclipse on March 2 to 3, 2026 was total over the Americas. Boston caught it low in the west at moonset, in a selenelion where a totally eclipsed Moon sat opposite a rising Sun. Santiago saw it climb into partial phase. The two cities shared the Moon for a short window during the umbral phase. The piece is not about totality. It is about the minutes in which two hemispheres agreed that the Moon was there.

Hardware
Both sides ran the same hardware, a Seestar S50 smart telescope that outputs a timelapse video at a nominal 1 fps. Both cameras stayed on the Moon for more than fifteen minutes of overlapping UTC. That was enough.

The Seestar S50 costs about 500 dollars, fits in a backpack, and resolves the Moon at roughly 2.4 arcseconds per pixel, near the diffraction limit of its 50 mm aperture. Two of them in two hemispheres, pointed at the same Moon at the same second, yield identically sampled UTC-timestamped frames.
Video Processing Pipeline
The two raw videos are not a stereo pair. Each telescope is on an alt-azimuth mount, so the Moon's image rotates through the frame as the sky rotates overhead. The two mounts see different fields of rotation because they are in different hemispheres. To make the pair fuse stereoscopically, every frame on both sides has to be stabilized, derotated, and aligned to a single shared baseline. The pipeline is in Python, open on GitHub.
Tracking and stabilization
Phase correlation between consecutive frames recovers the Moon's pixel offset, with a drift-compensation pass every hundred frames. The stabilized Moon is cropped to a 1080×1080 square centered on the disc.
Calibration
The Seestar writes timestamps to the video file, but the effective frame rate drifts because of autofocus pauses. I measure the Moon's rotation curve in the stabilized footage with ECC image registration, then fit it against an analytical field-rotation model derived from the observer's latitude, longitude, and the Moon's position in J2000. The fit produces a per-frame UTC anchor table, about 85 anchors per video, with a residual of less than one degree.
Stereo Rotation
With real UTC on every frame, I compute the roll angle that aligns each camera's view to the stereo baseline between Boston and Santiago. The baseline itself rotates slowly as Earth turns and as the Moon moves in the sky, so the roll angle is recomputed frame by frame from observer geodetics and the Moon's J2000 position. Each frame is warped by its own roll angle.
Compositing
Each side runs through the same three stages before joining. The two rotated videos are then joined on their shared UTC timestamps and encoded side by side. Frames outside the overlap are dropped. Every instant on the left now matches the same instant on the right.
The Viewer
The composite video at the top is one of several outputs. The repository also ships a browser viewer that recomputes the stereo math live and re-targets it to whatever display happens to be plugged in, from a regular monitor to an active-shutter DLP-Link projector.

Transforming each frame
Each frame is rolled by the angle that brings the Boston-to-Santiago baseline horizontal in that camera's image plane at that UTC instant. Both cameras roll relative to the same baseline vector, Santiago position minus Boston position in J2000 equatorial coordinates, even though one telescope is in the northern hemisphere and the other south. Sharing the baseline is what makes the residual disparity purely horizontal in the rotated outputs, which is the only condition under which two eyes can fuse the pair.
The math is short. The camera's image-plane basis is built from the gaze vector, telescope to moon, and the observer's zenith projected perpendicular to that gaze. The baseline is projected onto the same plane. The roll is the arctangent of the projected baseline's up component over its right component, and the frame is warped by its negative.
The roll is not constant. Earth rotates, the Moon climbs and descends, and the baseline vector itself rotates in J2000 across the recording. So the angle is recomputed for every frame from the observer's geodetics and the Moon's J2000 position. The pre-rendered output has the angles baked in. The browser viewer pulls the same stereo_angles.json, around 600 KB of per-frame angles per side, and applies the rotation in a fragment shader, which means an alternate alignment can be evaluated without re-encoding anything.

Simulation in Browser
The Python that produced the angles has a TypeScript twin. frontend/src/astronomy.ts reimplements observerJ2000, moonJ2000, and stereoCorrection against the TypeScript build of astronomy-engine, and is held to within ±0.01° of the Python by a self-test that compares both implementations against a hand-computed keyframe at 22:41:00 UTC. The viewer can therefore recompute the roll for any UTC instant in the overlap window, not just the frames that happened to be captured.
Alongside the moon footage, a Three.js scene renders the geometry the piece is grounded in: Earth at the origin, the Moon at its J2000 position, the Sun at 1 AU, two markers for the camera sites, a line for each telescope's gaze, a brighter line for the baseline, and two cones for the umbra and the penumbra. A logarithmic depth buffer keeps the hundred-Earth-radius Sun and the fractional-Earth-radius site markers on the same z range without z-fighting. The scene updates from the same computeFrame call that drives the moon shader, so the diagram is always literally the configuration the footage was captured in.
The simulation itself is also stereoscopic. Two off-axis cameras are offset from the OrbitControls camera by half an IPD along the camera's right vector, both convergent on the look-at target, and each renders the scene to its own render target. Those render targets are then handed to the same stereo compositor that handles the moon footage. The simulation and the footage end up in the same eyes through the same pipe.
Output for Stereo Projectors
The output stage is a single WebGL2 fragment shader with two switches. The first is a layout: side-by-side half-width, side-by-side full, top-bottom half-height, or top-bottom full. The second is an encoding: none (which defers to the layout), red-cyan anaglyph, red-cyan with Dubois matrices for less channel bleed, green-magenta, amber-blue, or frame-sequential.
Frame-sequential is the projector path. On every render the shader samples only one eye full-frame, alternating left and right each refresh. A DLP-Link projector reads that alternating sequence, inserts a brief synchronization flash between frames, and drives a pair of active-shutter glasses to open the matching eye in time with the matching image. The same compositor that draws an anaglyph on a laptop produces a true 3D image on the projector by flipping a single uniform.
The other layouts cover the rest: side-by-side half for VR headsets and most 3D-TV inputs, side-by-side full for paired projectors that take a stretched dual feed, top-bottom for systems that prefer that, and the four anaglyph variants for screen-shareable output that needs no special hardware. The roll, a small horizontal parallax shift, and the cross-fade between consecutive frames are computed once per frame regardless of which output is currently active.

References
- Charles Wheatstone, "Contributions to the Physiology of Vision. Part the First. On some remarkable, and hitherto unobserved, Phenomena of Binocular Vision," Philosophical Transactions of the Royal Society of London 128 (1838): 371–394.
- Warren De la Rue, "Report on the Present State of Celestial Photography in England," Report of the 29th Meeting of the BAAS (Aberdeen 1859; London: J. Murray, 1860).
- NASA Scientific Visualization Studio, SVS 5606, March 2026 Total Lunar Eclipse.
- NASA Scientific Visualization Studio, SVS 5320, Moon Essentials: Parallax.

