Skycruncher logo Skycruncher experiment, October 2026

How precisely can a 30 mm smart telescope place a star?

I measured where hundreds of stars sit in my Seestar S30 Pro frames of the galaxies M 33 and M 31 and checked every position against the Gaia space telescope's catalog. Averaged over a night, a moderately bright star lands within about 50 to 70 thousandths of an arcsecond (milliarcseconds, mas) of where Gaia puts it: under a fiftieth of a pixel. Then I locked the method and ran it once, unchanged, on frames from three other owners' telescopes that I had set aside unopened. It met 19 of 22 of the predictions I had written down, which confirms the method's precision on telescopes it was not tuned on. Frame by frame it did as well on all three as on my own nights; on one of them, night averages kept an error that doesn't average away.

48 / 66 masnight-average error of a G 11-12 star on my M 31 and M 33 nights (171 and 133 stars)
1/77 pxthe M 31 figure as a fraction of one 3.67 arcsecond pixel
72-86 masthe same measure on another owner's S30 Pro, with the method locked before I saw the frames (706 and 607 stars)
1.1-1.6×single-frame error as a multiple of the random-noise limit (1 would be pure noise), on all three other telescopes, as on my own nights

Under a seventieth of a pixel, averaged over a night.

48 mas

On my M 31 night a G 11-12 star's night-average position is off from Gaia by 48 milliarcseconds (typical, 171 stars). A single 10-second frame is about 8 times worse, 0.11 pixel.

Precision by brightness

Confirmed on other people's telescopes.

72-86 mas

Locked before I looked at their frames, the same method gave 72 and 86 mas on two nights from another owner's S30 Pro and single-frame errors 1.1 to 1.6 times the noise limit on all three, meeting 19 of 22 written predictions.

The fresh-telescope test

Focus and dithering matter more than software.

166 mas

On a soft-focus night with the field drifting along one axis, the best the software could do was 166 mas at the same brightness. Sharp focus and stars that move around the sensor are the cheap wins.

What conditions matter

What a milliarcsecond is

Astronomers measure positions on the sky as angles. A degree splits into 60 arcminutes, an arcminute into 60 arcseconds, and an arcsecond into 1,000 milliarcseconds (mas). The full Moon is about 1,860 arcseconds across. Each pixel of the S30 Pro's sensor covers 3.67 arcseconds, or 3,674 mas, so the star positions on this page are small fractions of a pixel.

Some comparisons. A US quarter (24 mm across) seen from 100 km away spans about 50 mas, roughly my night-average error. Seen from 12 km it spans about 400 mas, the error of one 10-second frame. One whole pixel is that quarter at about 1.4 km. A star image on this sensor is 2 to 4 pixels wide, so finding its center to a seventieth of a pixel means locating the middle of a blur several pixels across to about 1 % of its width.

One pixel of the sensor drawn large (3.67 arcseconds on a side). The circle shows the typical position error of a G 11-12 star against Gaia on my M 31 night: one frame, or the average of a night's frames. Hover for the numbers.

Precision by brightness

Gaia's G magnitude measures how bright a star looks; each step of 1 is a factor of 2.5. The stars on this page run from G 9, roughly ten times fainter than the faintest stars the eye can see from a dark site, down to G 15.5. Brighter stars collect more light, so their centers are found more precisely, up to the point where something other than random noise takes over.

Precision against brightness

Position error against Gaia, by star brightness

measured error, with 95 % range random scatter of the star's own frames photon-noise limit
Night average: the typical distance of each star's night-mean position from Gaia, with nothing subtracted for noise. Single frame: the typical scatter of one star in one 10-second frame. Stars brighter than G 11 (shaded) weren't used to build the method. This chart keeps every star, so its G 11-12 values (53 and 70 mas) sit a little above the headline 48 and 66, which count only stars seen in at least 20 frames and not pulled by a close neighbor.

Three regimes show up. Faint stars (G 13 and fainter) sit within 1.0 to 1.6 times the photon-noise limit: their error is set by how few photons they deliver against the sky, and averaging more frames is the only cure. Around G 11 to 12 the measured scatter is 1.2 to 1.7 times the photon limit per frame; the extra is seeing and tracking jitter, which differs from frame to frame and still averages down. Brighter than G 11 nothing saturates (the brightest star reached 40,000 of the camera's 65,535 counts), but a brightness-dependent offset of 15 to 65 mas appears that the method does not remove, so G 9-10 stars end up no better than G 11-12 stars for a user.

How I did it

  1. Frames. One night each on M 33 and M 31 (18 September 2026), my own S30 Pro, IRCUT filter, 10-second frames, alt-azimuth mount. The scores use the frames held out from building the method: 73 frames on M 33 and 88 on M 31.
  2. Plate solve. Each frame is matched to thousands of Gaia DR3 stars to find where it points, how it is rotated and how its scale varies.
  3. Gaia moved to the night. Gaia's positions are for the year 2016.0. Over the 10.7 years since, stars drift by their proper motion, often tens of milliarcseconds, so every star is moved to the moment of each frame.
  4. Centroids. A small two-dimensional Gaussian is fitted to each star in the two green pixel planes of the color sensor. A coma correction (below) then nudges each center by an amount that depends on where the star sits, how bright it is and the focus.
  5. Field correction. Each frame gets a simple linear fit (shift, rotation, scale and shear). On top of that, one smooth optical-distortion map per night, and a shift that depends on the star's color, are fitted jointly on training stars. The stars that are scored are never in the fit: they are split into five groups, and each group is scored with a fit made on the other four.
  6. Night average. Each star's positions are averaged over the night and compared with Gaia. The headline counts only stars seen in at least 20 frames whose position is not pulled more than 15 mas by a neighbor.

Fixed in advance: Gaia DR3 as the truth, the pixel scale, the held-out frames and star groups, the brightness range of the reference set (G 11 to 15.5), the scoring formula and the rules for which stars count. Measured: every error on this page, the distortion maps, the color shift and the coma table. The method was then locked, with a fingerprint of its settings recorded so they couldn't quietly change, before the test on other telescopes below.

What each step buys

To see which steps matter, I added them one at a time and watched what is left once random noise is subtracted: the part of the error that more frames would not fix. That leftover swings with my estimate of each star's noise (a 10 % change moves the M 33 value anywhere from 6 to 34 mas), so read the bars as a ranking of the steps. The night-average errors above are the numbers a user gets.

Leftover systematic error (G 11-13 stars, noise subtracted, typical value with its 95 % range) as each step is added in order. The two largest steps are moving Gaia's stars to the date of the night and fitting a distortion map for each night.

Two steps carry most of the gain. Moving Gaia to the date of the night is worth about 60 mas on both fields; a placebo test that gave each star another star's motion made things worse, so the gain is real star-by-star information. The per-night distortion map is worth 32 to 54 mas: the lens's distortion changes slightly from night to night, so a map fitted once and reused does not hold. Things that added nothing: atmospheric color refraction, a Moffat star profile instead of the Gaussian, and simply using more frames from the same night.

Coma, and the brightest stars

Away from the middle of the field the star images are slightly lopsided, their light pulled outward like a faint comet tail. That is coma from the optics: 0.12 to 0.17 pixel per half-diagonal on my unit, plus a constant shift of about 0.1 pixel along one axis. A symmetric Gaussian fitted to a lopsided star lands slightly off its true center, and the offset depends on the star's brightness. I built a correction table across the field, the focus state and brightness, from simulated stars passed through a model of the optics, and applied it to stars of G 11 and fainter (it is clamped at G 11).

without the coma table with it
Night-average error of the brighter stars with and without the coma table, measured around the bin's own average offset (so it shows star-to-star scatter). The tooltip and table also give the average offset along the axis where coma pushes hardest.

On M 31 the table halves the error of G 10-11 stars (83 to 41 mas) and removes most of their shared offset. On M 33 it helps less: at G 9-10 it overshoots in the coma axis (the offset flips from −32 to +41 mas), and it leaves an offset of 50 to 65 mas in the other axis that it was never meant to model; I traced that to one of the two green pixel planes in the first 1.5 hours of the M 33 run, not to the optics. Its benefit isn't stable either: whether it helps significantly flips between M 33 and M 31 depending on how the frames are split, and on another owner's telescope, swapping my M 33 table for my M 31 table alone made the result 4.5 mas worse. Coma differs between units (theirs was 1.5 times mine), so a coma table belongs to one telescope at one focus, not to the model. That is why the fresh-telescope test below ran without one.

The fresh-telescope test

Everything above was built and tuned on my own nights, and I looked at the held-out frames many times while choosing the steps, which tends to make a method look better than it is. So before looking at any of their frames, I locked the whole method, wrote down a predicted range for every number, and ran it once on frames from three S30 Pro units owned by other people (frames shared with the Seestar community), set aside unopened (“sealed”) until that run. A few of those frames had been used before; they are listed under What is confirmed. Telescope B used an IRCUT filter and 10-second frames on an equatorial mount, C a light-pollution filter with 60-second frames on an equatorial mount, D a light-pollution filter with 20-second frames on an alt-azimuth mount. The locked method has no coma table, because coma tables don't transfer between units.

Every night, one ruler

G 11-12 stars on every night I have scored

my nights (the method was built on these) fresh telescopes, locked method my transit night, locked method, not seen before noise-only limit
Each bar is one night, scored with the same locked ruler: G 11-12 stars, night averages over stars seen in 20 or more frames. The tick is what random noise alone would give on that night (the same formula run on simulated noise-only positions). Faded bars are more than 3 times their noise limit, a warning line I set before the test: beyond it, something other than noise (a bug or a real effect) is at work. "Times the noise limit" divides each bar by its tick. My M 31 and M 33 bars include the coma table built on those nights; every other bar uses the method without it.

The headline held. Per frame, every new telescope landed at 1.1 to 1.6 times its noise limit, the same band as mine (1.16 to 1.60). Night averages on telescope B came in at 72 and 86 mas, inside the ranges I had predicted (71-126 and 65-116 mas), on 706 and 607 stars. Across positions and brightness, 19 of 22 predictions hit. Two of the three misses were positions: telescope B's single frames on its first night were worse than predicted (0.192 pixel against at most 0.163), and telescope D's second night averaged 265 mas against at most 250.

Telescope D's night averages (146 and 265 mas, 3.7 and 4.9 times their noise limit) are where the method falls short. A follow-up look at those frames (exploratory, since I had already seen them) found what the error is, though not what sets it: a fixed position error for each star, pointing roughly outward from the sensor center and growing toward the edges. On an alt-azimuth night of a field that barely rotates, a star sits on the same spot of the sensor all night, so that error repeats in every frame and never averages away. My own soft-focus NGC 7000 night shows the same thing (3.2 times its limit). Nothing I tried in software removed it.

What conditions matter

The fairest comparison is my own transit night of 2 October 2026, which I spent on the planet HD 189733 b. Nobody had tuned an astrometry method on it, so I ran the locked method on it once, unchanged. G 11-12 stars came out at 194 mas per night and 0.89 pixel per frame: about 4 times worse than the M 31 night per night and 8 times per frame, and worse than I had predicted, badly per frame (at most 0.25 pixel) and just per night (at most 180 mas). The method itself was not the problem; it sat at 1.7 times the noise limit per frame and 2.0 times per night, like the other light-pollution-filter nights. The conditions were:

Improving the software on that night (fitting each frame's real star shape, fitting faint neighbors, then a star shape that changes across the field) took G 11-12 stars from 194 to 166 mas and G 9-10 stars from 116 to 90 mas (exploratory, since by then I had already looked at that night). A further step to 162 mas did no better than a placebo version of itself, so I don't count it. None of it got below the 97 mas noise limit. The lessons are capture lessons: focus sharply (autofocus) for position work, dither the pointing in both directions so each star crosses many parts of the sensor, and prefer the IRCUT filter when positions are the goal, since it collects several times more light from each star. Field rotation on an alt-azimuth mount smears corner stars into short arcs (up to 46 arcseconds in a 10-second frame on my M 33 night); the method models the arc, and it costs single-frame precision there, but on my galaxy nights it was not what limited the night averages.

What went wrong along the way

My first headline was the wrong number.

For a while I quoted 30 mas on M 33 and 56 mas on M 31, later 23 and 37 mas. Those were the leftover systematic part after subtracting noise, and they swing with the noise estimate (M 33 moves between 6 and 34 mas for a 10 % change). The number that needs no such guess is the plain night-average error, 48 and 66 mas, so that is the one I quote.

My noise model was off by up to 13 times for bright stars.

The weights I used to combine stars assumed every star had the noise of a faint one. For bright stars they overstated the scatter 4 to 13 times, which is why the noise-weighting step bought nothing. The photon-noise prediction from each star's own brightness is the one that works.

A few stars set the averages.

On M 33 four stars near the edge, seen in only 9 to 14 frames, carried most of the root-mean-square error. That is why the headline now needs 20 frames per star and uses a typical value rather than an average of squares.

The first fresh-telescope run had a bug.

In an earlier one-shot test on telescope B and a fourth unit, I computed field rotation for an alt-azimuth mount on a telescope that was in equatorial mode; it affected only the weights. Later, while rehearsing the three-telescope test on frames that were not set aside, a bug made the noise limit about 4 times too low; it was fixed before the set-aside frames were opened.

What is confirmed and what is not

Confirmed. Locked before the test and run once, unchanged, on other owners' telescopes, the method met 19 of 22 predictions I wrote down in advance. Single-frame positions landed within 1.1 to 1.6 times the noise limit on all three units, and night averages of 72 to 86 mas on an IRCUT telescope in equatorial mode fell inside the predicted ranges. The frames were listed from file names only and sealed until that run. They were not all untouched: 108 of telescope B's 617 sealed frames had gone into an earlier one-shot test, frames from the middle of the same two nights were used to rehearse the method, and a few dozen of the other units' frames had been copied or run through other software. All of that was recorded in the seal before it was opened, and those frames stayed in.

Not confirmed: the nights it was tuned on. My own 48 and 66 mas, the value of each step and the coma table come from the nights the method was built on. The equatorial-mount telescope that confirmed the night averages differs from mine in three ways at once (unit, mount mode and sharper focus), so I can't yet say which of them matters most.

Not working yet: night averages on alt-azimuth nights where stars stay put on the sensor. The next test is a night with dithered pointing and sharp focus, with its prediction written down first.