Type where you are and the year you were born. The frame starts a hundred metres wide over your block, in a real aerial photograph, and pulls back by powers of ten: through your city at night, the curve of the Earth lit as it is right now, the Moon where it is tonight, the planets where they are today, the nearest stars at their measured distances, the galaxy, and Hubble's deepest field. Then it comes home fast, finds your hand in your camera, and keeps going the other way: skin, a hair, blood, a cell, DNA atom by atom, a carbon atom, its nucleus, and the three quarks inside one proton. It ends where it began, with the star: every atom of carbon in your hand was made inside one. On the way it looks at your block and says what it sees, and you can stop anywhere and ask it about the frame.
The question
Charles and Ray Eames made Powers of Ten in 1977 with the tools of 1977: paintings, photographs, a picnic in Chicago. What would the same idea be if every frame were real data, computed for you, right now? Could a deep-link to a star feel like a gift?
What we made
A continuous pull-back across 25 powers of ten, then a dive back in through 14 more, with the data source changing underneath while the motion never stops. Outward:
| Scale | What you see | Where it comes from |
|---|---|---|
| 10² to 10³ m | Your block and your neighbourhood | USDA NAIP aerial photography, about 0.6 m per pixel, via the USGS image service (public domain) |
| 10³ to 10⁵ m | Your town, with yesterday's clouds | USGS National Map imagery, then NASA GIBS MODIS Terra true colour for the previous day |
| 10⁶ m | Your city, and every city near it, at night | NASA Black Marble (VIIRS), via GIBS |
| 10⁷ to 10⁹ m | The curve of the Earth, lit by the Sun as it is at this moment; the Moon at tonight's distance and phase; behind them, the real sky below your feet | NASA Blue Marble and Black Marble textures, the LRO colour map of the Moon, the Sun's and Moon's positions from astronomy-engine; 8,404 stars from the Yale Bright Star Catalogue and the Milky Way from ESA's Gaia map |
| 10¹⁰ to 10¹³ m | The planets where they are today, with their orbits, seen from your side of the solar system | astronomy-engine (VSOP87-based) |
| 10¹⁴ to 10¹⁵ m | The heliopause, a faint dashed circle at 120 AU, where Voyager 1 crossed into interstellar space in 2012 | Published crossing distances (Voyager 1, 121.6 AU, 2012; Voyager 2, 119 AU, 2018) |
| 10¹⁶ to 10¹⁸ m | The Sun as a point, then 18,899 stars within 150 light-years, each placed by its measured parallax, in front of the dimmed sky from home; one is ringed | ESA Gaia DR3; proper names from SIMBAD |
| 10²¹ m | The galaxy, mapped from inside | ESA/Gaia/DPAC all-sky map (CC BY-SA 3.0 IGO) |
| 10²⁶ m | Thousands of galaxies in a patch of sky the size of a grain of sand | Hubble Ultra Deep Field (NASA, ESA, S. Beckwith and the HUDF Team, CC BY 4.0) |
| 10⁻¹ m | Your hand | Your camera, live. Nothing is recorded. Without a camera, a photograph of a hand (Jiajitan, CC0) |
Inward, from the hand at the same eased pace:
| Scale | What you see | Where it comes from | Real or model |
|---|---|---|---|
| 10⁻¹ m | Your hand | Your camera, zoomed digitally; or a photograph of an open hand by Jiajitan via Wikimedia Commons (CC0 1.0) | Real |
| 10⁻² m | A fingertip and the ridges of a fingerprint, about half a millimetre apart | Photograph by Frettie via Wikimedia Commons (CC BY 3.0); scale estimated from the ridge spacing | Real |
| 10⁻³ m | Skin under a scanning electron microscope: flat, dead cells you shed all day | Bruce Wetzel, National Cancer Institute (public domain); scale from its 100 µm bar | Real |
| 10⁻⁴ m | A single hair, its overlapping scales like shingles | Nicola Angeli / MUSE Science Museum of Trento (CC BY-SA 3.0); scale from its 10 µm bar | Real |
| 10⁻⁵ m | Blood: red cells about seven micrometres across, and two white cells | Bruce Wetzel and Harry Schaefer, National Cancer Institute (public domain); scale estimated from the red cells | Real |
| 10⁻⁶ m | A cell from a mammalian lung, then two of its mitochondria | Louisa Howard, Dartmouth Electron Microscope Facility (public domain), by transmission electron microscope; scales from their 500 nm and 50 nm bars | Real |
| 10⁻⁷ m | DNA wound nearly twice around each spool of protein | Nucleosome core particle, PDB 1KX5 (Davey et al., J Mol Biol 2002); linker DNA, PDB 1BNA; PDB data are free of copyright (CC0 1.0) | Each spool is its measured structure; the string of them is a model |
| 10⁻⁸ to 10⁻⁹ m | The double helix atom by atom, then one G-C base pair and a water molecule | PDB 1BNA, the Dickerson dodecamer (Drew et al., PNAS 1981), every heavy atom where X-ray crystallography put it | Measured coordinates; the water's hydrogens are placed at water's measured geometry |
| 10⁻¹⁰ to 10⁻¹¹ m | One carbon atom, then its two innermost electrons | Hydrogen-like 1s, 2s and 2p densities with Slater's effective charges, sampled in your browser | A model, drawn from the equations |
| 10⁻¹³ to 10⁻¹⁴ m | The nucleus, a thirty-thousandth of the atom's width; then six protons and six neutrons | Drawn to scale from the measured charge radii (carbon-12, 2.47 fm; the proton, 0.84 fm) | A model |
| 10⁻¹⁵ m | Inside one proton: two up quarks and a down quark, bound by gluons | Quarks drawn as points (no measured size); gluons as the curly lines of a Feynman diagram | A model |
Down to a micrometre every frame is a photograph at its measured scale. The pictures are different samples, nested the way the Eames film nests them: each one is placed where the next scale begins in the one before. Each nested picture is feathered into a soft squircle (12% of its width at the sides), and as it grows in front of its parent the parent blurs and darkens behind it, so the handoff reads as one continuous zoom instead of a picture pasted on a picture. Below a micrometre the frames are drawn from atomic coordinates and from the equations, and the caption and the credit line say which.
Your star is the Gaia star whose distance in light-years is closest to your age, preferring stars with a name or a Hipparcos number, so the light arriving tonight left it within a year of your birth. It is picked among stars within 60 degrees of straight down, so it lies ahead of the camera and its ring is always in the frame; when it is below your horizon at that moment, the card says its light comes from behind the Earth (and says "tonight" only if the Sun is down). The card shows the star's name or catalogue id, its distance, where it is in the sky, and the year its light set out. The URL carries your place and year, so the journey, and the star, can be sent to someone. The end card comes back to it: every atom of carbon in your hand was made inside a star, and tonight the light from yours is still arriving. For the 58 named stars the closing line is spoken with the star's name; otherwise it says "your star".
One camera move, one sky
The camera starts over your roof looking straight down, and it never turns. It pulls back along that one line from 10² m to 10¹⁹ m, so the sky behind the Earth is the sky below your feet at the moment you pressed Begin: right ascension your local sidereal time plus twelve hours, declination minus your latitude. That sky is its own layer, rendered once in the same perspective and field of view as the globe and the solar system, so the stars sit at infinity and stay fixed while the Earth shrinks in front of them. Every star in the Yale Bright Star Catalogue down to magnitude 6.5 is there (8,404), sized by brightness and tinted by B-V colour; the Milky Way is ESA's Gaia DR2 all-sky map, reprojected from its Hammer projection in galactic coordinates onto the sky and dimmed so it reads as a band rather than a photograph.
Keeping the line of sight has consequences we kept rather than hid. The solar system is seen from your side of it, so its orbits are tilted ellipses whose tilt depends on where and when you are; between 1010.6 and 1012.4 m the camera slides sideways from the Earth to the Sun so the system ends up centred, without turning. By ten light-years out the nearest stars have visibly shifted from where they sit in your sky, so the Gaia stars, placed in 3D, take over the foreground and the background sky dims to a reference: it stays the sky as seen from home. The Gaia stars fill a ball 300 light-years across, and from about 1018.6 m its edge would read as a ball of dots, which it is only because that is where the catalogue stops. So they fade out between 1018.3 and 1018.64 m, while the frame is still inside the ball; the bright-star sky comes back to full strength under them, and Gaia's map of the galaxy rises over it from 1018.3 m.
The motion is eased everywhere: the camera decelerates into each narrated scale over the last 0.6 decades, keeps drifting at 6% of its cruising speed through the pause, and accelerates out over 0.4 decades. It never stops dead and the scale never jumps, except when you drag the slider. The inward half uses the same profile, mirrored: after "Your hand" lands, the camera eases off the hand and decelerates into each smaller scale the same way. Layer crossfades are functions of scale rather than of time, so a handoff looks the same whether you pass it slowly, on the dive home, or by scrubbing.
Music
The score is original and synthesized in your browser with the Web Audio API while you watch: no samples, no recordings, no audio files, nothing borrowed. It takes its cue from the slow synthesizer pulse of Elmer Bernstein's music for the Eames film and from the long, luminous textures of Brian Eno and Jóhann Jóhannsson, but every note is computed from where you are on the ladder.
It is a function of scale. The harmony is one seventh chord per power of ten. On the way out the mode is D Lydian and the chord root steps down one scale degree per decade, so the bass falls as the frame grows, and it lands on the tonic at a hundred light-years, at your star. The dive home holds an open D, A and E, neither major nor minor, under a sub-bass swell, a falling rush of noise and a ladder of bells that climbs one note per decade crossed. Inward the mode turns darker, D Dorian and then Aeolian from the carbon atom down, and the root climbs a degree per decade: smaller is higher. The end card returns to the outward key on a bare D Lydian chord, the star's key.
Time dilates on the way out. Four loops of soft FM bells each repeat one chord tone at its own period, in ratios that never line up, so the pattern never repeats audibly; the period lengthens from 1.5 seconds at your doorstep to about six at your star and twelve at the edge of the deep field. Inward it shortens: the bells turn woody, an escapement of ticks joins them at half the period, and the piece becomes clockwork. Inside the atom it dissolves into a cloud of grains at random places and random chord tones, the way the electron cloud is drawn from a probability; at the nucleus the low end throbs. High partials twinkle from a light-year to past your star. The pad under it all is four detuned sine and triangle voices, voice-led so a chord change moves by steps, through a lowpass that opens while the camera moves and closes on the holds. Randomness is seeded per visit, so no two journeys sound the same.
It stays under the voice: about 9 dB down over 150 ms whenever a narration clip is playing, back up over a second after it ends, with a glue compressor and a soft ceiling at −3.3 dBFS so nothing clips. The Music button in the controls turns it off (the choice is remembered), and Pause fades it out. The hero film has no microphone to record it, so the same code renders it offline: the recording logs the scale every tenth of a second, the page renders the score from that path on an OfflineAudioContext, and the mixer ducks it under the narration exactly as the page does.
It looks at your doorstep and listens
Three things in the journey depend on you, and each one is grounded in what is already on screen.
It sees your doorstep. When the first aerial photograph of your block is up, the page takes that frame from the canvas, scales it to 768 pixels on its long side and sends it as a JPEG (well under 300 KB) to /api/see. A vision model, gpt-4.1-mini, is asked for one plain sentence of at most 18 words, concrete nouns only: never a place name, an address, a business or anything about people. The server checks the reply again and throws it away if it holds a digit, a capitalised word after the first (a proper noun) or a word from a short banned list (people, ownership, wealth, streets, hedges like "probably"). What survives is spoken as one line, "Look closer." and then the sentence, right after "A hundred metres", in the narrator's voice, with the caption shown like every other line.
It never holds the journey up. The request starts as the photograph comes up, while the first line is playing. If the spoken line is ready when that line ends, the hold stretches to play it; if not, it waits for the end of the next line, at a kilometre; after that it is dropped without a word. A missing caption, a refusal, a timeout or no network at all leave the fixed narration exactly as it was.
It answers questions. An Ask button (or the ? key) pauses the journey wherever you are and opens a small panel over the caption: a text field, a microphone where the browser offers speech recognition (one utterance, through the Web Speech API), and three example questions that fit the scale. The question goes to /api/ask with a context built only from what the page has already computed and shows: the scale, the caption, the place name (the geocoder's town, never the street), the time, the planets that are on screen or above your horizon with their direction and distance, the Moon's phase, your star's name, distance and the year its light left, which data layer is showing and whose it is, and whether you are going out or in. The server keeps only those fields, rounds the coordinates to about a kilometre, and asks for at most two short sentences from those facts and general physics. Anything else, including questions about you or other people, gets "I only know what is on screen right now." The answer stays on screen as text and is spoken; Close (or Escape) resumes the journey.
Limits and fallbacks. Five questions a visit, counted in the page. The server allows four looks, six questions and ten spoken lines a minute from one address, with a global hourly and daily budget behind them and a cache, so a repeat costs nothing. A busy minute shows "Give me a moment"; a model error or a spent budget shows "I can't reach the narrator right now", and the journey carries on. If the API cannot be reached when the page loads (a one-second check, tried once more for a cold start), the Ask button never appears and the doorstep line never comes. Nothing else changes.
Privacy. Only pixels go to /api/see: the public aerial photograph the page is already showing, with no address, coordinates or place name. /api/ask receives the town name and coordinates rounded to two decimals. Nothing is stored: caches and rate counters live in a running function's memory and vanish with it, and logs record only a short error reason, never an image, a question or an answer. OpenAI processes the requests under its API terms, which exclude training by default.
One voice. The fixed narration was re-rendered with OpenAI's gpt-4o-mini-tts in the "coral" voice, with the same style instructions /api/speak uses, so a line written a moment ago sounds like the person who has been talking all along. Those takes run 20 to 35 percent longer than the Kokoro ones and came out 4 to 5 dB quieter, so they were loudness-matched offline to the Kokoro opening line (all 87 within 0.63 dB), and every live line is measured and matched to the same level in the browser before it plays. Every hold now lasts at least as long as its line plus 0.4 s, read from the clip itself, so no line is cut off whichever set plays. The Kokoro set is still there; going back to it is one constant.
What's true, and what's labeled
Every outward scale shows real data for your place and today's date, attributed on screen as it changes. Inward, the caption and the credit line say whether each frame is a photograph, a measured structure or a model. The approximations are stated in the credits:
- Tiles above zoom 16 are missing in many places (the piece starts at a hundred metres rather than ten for exactly that reason).
- Mercator tiles are reprojected near the poles.
- The galaxy and the deep field are photographs shown at their true scales rather than 3D data.
- Parallax distances carry uncertainty.
- Inward, the micrographs come from other people's samples, not your hand; three of their scales (the hand, the fingertip and the blood) are estimated from the subject rather than read off a scale bar.
- How the nucleosomes are strung together is a model, and everything below a tenth of a nanometre is drawn from physics rather than seen.
What happened in testing
- The first version started at ten metres and showed a grey blur: the public tile service stops at zoom 16 in Mesa. Rather than fake the doorstep, the piece now starts at a hundred metres on NAIP photography and says what it's showing.
- Night lights were blown out by additive blending; normal blending and a later beat (a thousand kilometres, where the 500 m data has enough pixels to work) fixed it.
- At a million kilometres the Earth and Moon vanished: we were looking at their night sides against black. An atmosphere rim and small halos keep them legible as points.
- The globe had never been centred on you. three.js's sphere puts longitude L at (cos L, 0, −sin L) and the code assumed an extra quarter turn, so the frame over Mesa showed the mid-Atlantic and, at 10:30 in the morning in Arizona, Africa lit and the Americas dark. The lighting and the new sky were consistent with each other, only the texture was rotated, so the fix was one mapping. A sweep test that screenshots every quarter decade, and checks the line of sight against the local sidereal time numerically, found it.
- The planets' "ecliptic longitudes" in the 10¹² m caption were really equatorial angles (astronomy-engine's heliocentric vectors are J2000 equatorial), and the Gaia stars had been rotated into ecliptic coordinates while the planets had not. Everything beyond the Moon now shares one J2000 frame, and the longitudes come from astronomy-engine's own ecliptic conversion.
- Planet labels were rebuilt as DOM nodes on every frame and could pile up on each other; they are now persistent, fade in and out, and are placed greedily by priority so they never overlap. Orbits are anti-aliased 1.15 px lines sampled in 1,024 chords, so even the Earth's orbit seen from a hundred thousand kilometres is a curve, not a polygon.
- Tiles used to pop in and to decode synchronously on first use; they now decode off the main thread and fade in over 250 ms on top of their coarser parent, with edges snapped to device pixels so partly transparent layers show no seams.
- The nested micrographs first appeared as hard-edged rectangles inside the previous picture: a grey electron micrograph of skin sitting on an orange fingertip as a box. A feathered squircle mask, and a parent that blurs and darkens as the child grows, turned each handoff into a dissolve. The lung cell's nesting point had been inside its own feathered margin, so the mitochondria grew out of the blur around it; it moved inward.
- Between 1018.8 and 1019.2 m the 150 light-year Gaia catalogue showed as a hard-edged ball of dots. It now fades out before its edge enters the frame, with the bright-star sky and the galaxy map overlapping to cover the gap.
- In a software-GL test browser the first globe frame stalled the journey for 65 s while shaders compiled and textures uploaded; the layers are now warmed during loading. Real GPUs never showed it, but the fix costs nothing.
- With the longer OpenAI takes, fixed holds would have cut lines mid-sentence: "About a light-year" runs 6.5 s against a 1.5 s hold, and the dive line ran on into "Your hand". Holds now wait for the clip's own end plus a breath, and "Your hand" waits for the dive line. The play-through test fails if any line ends early, and it runs once with every API call failing to prove the journey still completes without them.
- Sent an 8 by 8 pixel square of flat grey, the vision model described "rows of houses, a parking lot, a school building, trees, and a road with parked cars". Where there is no aerial coverage the frame is just as blank, so the page now measures the luminance spread in the middle of the frame and sends nothing without detail.
What's next
Stars with proper motion so the field drifts correctly for your birth year; the Moon's libration; a southern-hemisphere check of the Sun direction at the limb; carrying the sky patch into the Gaia map at 10¹⁹ m (zooming out from the same patch of sky, at the same orientation) instead of crossfading to the whole-sky map.
Tools
three.js (globe, solar system, star field, sky, and the DNA, atom and nucleus scenes), a hand-written continuous-zoom tile renderer on Canvas 2D, astronomy-engine, Gaia TAP and SIMBAD TAP (queried once, server-side, into a 1.2 MB catalogue), Nominatim for geocoding, OpenAI gpt-4o-mini-tts for the narrator (the first Kokoro voice is kept as a second set), gpt-4.1-mini for the doorstep line and the answers, the Web Audio API for the score, Playwright for scale-by-scale screenshot tests (including a 1080p sweep every quarter decade), a real-time play-through test from the doorstep out to the star and in to the proton, a frame-pacing measurement, a 390 px phone pass, and API stand-ins (Playwright route interception) so the doorstep line and Ask are tested without spending a model call, plus one live smoke test against the real functions. For the inward half, a Python script turns the PDB entries' heavy atoms and the micrographs into compact files with their measured widths, and the Kokoro narration was generated on a DGX Spark.