In 1923 one variable star in the Andromeda Galaxy showed that the universe is far bigger than our own galaxy. I set out to catch that same star, V1, brightening and fading with a 50 mm smart telescope at a remote dark-sky observatory. I wrote the whole test down before the first frame, stayed blind to V1 until seven nights added up to a precise enough answer, and then read it once. V1 brightens and fades on the schedule the professional survey data predict.
Passed Read on 21 October 2026, after 7 qualifying nights from 8 to 20 October. The test, its pass conditions and the code were fixed on 6 October.
On the night of 5 to 6 October 1923, Edwin Hubble took a long photograph of the Andromeda Galaxy, M 31, with the 100-inch telescope on Mount Wilson. He marked a few faint spots he took for novae. Checking older plates, he found that one of them brightened and faded again and again on a steady schedule. He crossed out his first label and wrote "VAR!" beside it. That star is now called V1.
V1 is a Cepheid: a giant star that swells and shrinks, and whose cycle length tells you how bright it really is. Henrietta Leavitt had found that rule a decade earlier. Compare that true brightness with how faint V1 looks and you get its distance. Hubble's answer put Andromeda close to a million light-years away (today's figure is about 2.5 million), far outside the Milky Way.
A century later, the Zwicky Transient Facility, a survey camera at Palomar, has timed V1 precisely: one full cycle every 31.39 days, brightest near the start of the cycle and faintest about four fifths of the way through. At its brightest V1 is around 19th magnitude, over a hundred thousand times fainter than the faintest star you can see by eye.
My telescope is a Seestar S50: a 50 mm lens on a small automatic mount, the kind of smart telescope people set up on a patio. Mine sits at Starfront Observatories in Texas, which hosts remote telescopes under dark skies, and it shot V1 in 20-second exposures on clear nights. Each pixel covers 2.4 arcseconds of sky. At that scale V1 isn't alone: it sits in Andromeda's crowded disk, and its light blends with faint neighbors the telescope can't separate. How much neighbor light lands on V1 depends on the night's seeing, the blur the atmosphere adds to every star.
I wrote and approved the test on 6 October 2026, before the telescope had taken a single frame of it. Every night went through the same frozen measuring code, one night at a time. Then one fit asked one question: does V1 brighten and fade on the Zwicky schedule, and by as much as the Zwicky data say? The fit's answer is a single number, the amplitude A. A = 1 means V1 swings exactly as much as the Zwicky data predict; A = 0 means no swing at all.
Andromeda's disk is a lumpy glow of unresolved stars, and its noise doesn't follow a textbook. So I measured 2,400 spots in the same disk where no known variable sits, exactly the way I measured V1, and fit the same curve to each. They show what "no pulse" looks like here, lumps included. To pass, V1 had to beat all but at most one of them.
The test read only once the blank spots said the amplitude would be known to ±0.20 or better, with at least 4 nights. If that never happened, it would have stopped at 30 nights or on 31 December, whichever came first.
The fit has a second knob besides A: a seeing slope, which lets the blended neighbor light rise and fall with each night's blur. Exposures blurrier than 10″ were dropped, and so were those with V1 within 150 pixels of the frame edge, the Sun less than 18° below the horizon, or V1 under 30° high. A night counted only with at least 1 hour of good exposures and a quiet enough sky.
If I had peeked at V1 every night, I could have stopped on a lucky night, and luck would pass for a result. So the stopping rule never looked at V1. It used the blank spots, the calendar and the seeing only.
Anything else. The write-up would have said so, with the amplitude and its error, and no cut, weighting or night list swapped in after the fact.
My prediction, written before the first night: V1 pulses as the Zwicky data say, and the test passes with A near 1.
Each dot is one night: V1's brightness that night, placed by where V1 was in its 31.39-day cycle. "Phase" 0 is V1 at its brightest; near 0.8 it is faintest. The dashed curve is the Zwicky prediction at full size (A = 1); the solid curve is the fit to my nights (A = 1.35). Brightness is in the test's flux units, where 1 is a star of 19th magnitude.
| Night of | Exposures | Hours | Phase | Side | Seeing | V1 | Error | Zwicky swing |
|---|
Exposures are the 20-second subs kept after the cuts. V1 is the night's brightness in the test's flux units, before the seeing term; Error is that night's blank-spot scatter; Zwicky swing is where the Zwicky curve puts V1 that night, above or below its average. Two nights tried in this window didn't count (12 and 17 October: too short, and V1 too near the frame edge).
Both pass conditions held. No blank spot of 2,374 swings as much as V1, so the chance that empty sky produced this by luck is under 1 in 2,000. V1's swing is 8.3 times its own error.
The last night is the one that closed it, and it closed it in the way the test needed. Until then, both of my bright-side nights had sharp seeing, so "V1 looks brighter" lined up with "the seeing was sharp", and the fit could partly trade the pulse for the seeing knob. The night of 20 October was on the bright side in the worst seeing of the run, 7.5″. Only one knob can explain a night like that, so it pinned both, and the predicted error fell from 0.219 to 0.182.
The model is flux = μ + A · δ(phase) + b · (seeing − mean seeing), fit by weighted least squares, each night weighted by its blank-spot scatter. δ is the Zwicky template's swing about its cycle mean, per night, through each exposure's plane weights (R 0.21, G 0.69, B 0.10). The same projection applied to every blank spot gives the null: A's error 0.163 is the robust scatter of those 2,374 values, and p = (1 + number at or above A) / (1 + 2,374) = 0.00042. The tolerance is 2 √(0.163² + 0.10²) = 0.38.
The fit is good: χ² = 3.78 for 5 degrees of freedom. The seeing slope is small, b = +0.10 ± 0.18 per arcsecond, and dropping it gives A = 1.350, the same answer. Four of the seven nights beat their own 1 % blank-spot threshold on their own: the three bright-side nights and 10 October.
The swing came out bigger than the Zwicky curve says, by 35 %. That is inside what the test allowed, but only because the 0.10 color allowance was written in, and I want to be plain about it. Taken alone, V1's swing is 2.2 errors above 1.
I don't know the reason yet. Three things could do it, and this test can't tell them apart:
Later nights don't join this test; they would be a separate replication, with its own plan written first. That is the way to find out which of the three it is.
Nothing changed in the test during the run. The first night needed small plumbing fixes, which the rules allowed for, and a camera setting change between the first and second nights was checked blind and moves the result by less than a thousandth of a night's noise.
Our own Seestar S50 at Starfront Observatories, 20-second exposures through its UV/IR-cut filter, nights of 8 to 20 October 2026 (the set reserved for this test; nobody had used these nights before). V1's period, phase and curve shape: the Zwicky Transient Facility. Star brightness scale: ESA Gaia DR3 (ESA/Gaia/DPAC). The blank spots and the measuring code come from earlier tests on other people's frames, frozen before this one began. An earlier Experiment, Finding Hubble's Cepheid V1 in Andromeda, located V1 in those frames but couldn't confirm its pulse.