SkyCruncher

Note ยท Reading your frames

Plate solving: how a frame finds where it points, and why some fail

Before a frame can tell you anything about a star, something has to work out which stars it caught. Here is how that works, how I check it, why it fails, and how often it has worked on my frames.

Updated

A thin line beside a passage says how far its claim is proven: measured, implemented, illustrative, inferred. Colored numbers carry the same mark. A passage with no line is stated. How claims are marked.

What plate solving is

Plate solving works out where on the sky a frame points by matching the stars in it to a star catalog. The answer is the sky position of the frame's center, how far the frame is turned, and its scale: how many arcseconds of sky each pixel covers.

The name comes from the glass photographic plates astronomers measured by hand. A sub is one of the single short exposures a Seestar takes and stacks; each sub can be solved on its own.

Everything after it depends on the solve: knowing which star is which, measuring a star's brightness against its catalog neighbors, lining subs up for a stack, and measuring positions. A wrong solve doesn't just lose one number; it makes every later number about the wrong stars.

How four stars find the sky

A solver can't compare a whole frame against the whole sky, so it compares small shapes. It picks four stars that sit close together, a quad. The two stars farthest apart set a little coordinate frame of their own, and the positions of the other two inside that frame give four numbers. Those four numbers stay the same when the frame is shifted, turned or zoomed, so they can be looked up in an index of the same codes computed in advance from the catalog.

A quad in one frame A patch of a frame with many faint stars and four brighter ones, A, B, C and D, joined into a quad. A and B are the two farthest apart. A B C D a patch of one frame The same quad as a code The same four stars redrawn so that A sits at the bottom left and B at the top right of a unit square. C then sits at 0.18 across and 0.65 up, and D at 0.70 across and 0.22 up; those four fractions are the code. A (0, 0) B (1, 1) C D C (0.18, 0.65) D (0.70, 0.22)
(illustrative) A made-up patch of sky, not one of my frames. The first panel is the quad as it sits in the frame; the second is the same four stars redrawn as a code. Turn, shift or zoom the frame and the code doesn't change, which is what makes it something you can look up.

One match proposes a pose: where the frame points, how it is turned and its scale. The open-source solver astrometry.net made this four-star approach widely used.

The 1.3 old engine matched against an index of 20.9 million quad patterns covering the whole sky, built from 6.49 million stars in the Gaia DR3 catalog brighter than magnitude 15 (in Gaia's G band), in 15 scale bands for fields from a quarter of a degree to 45 degrees across. Those are counts as of 2026-07-22, from the July 2026 Corpus snapshot. (implemented)

A blind solve starts with no idea where the frame points and searches the whole index. An assisted solve is given a hint of roughly where to look, which narrows the search a long way. A Seestar saves its subs as FITS files, the standard astronomy image format, and a FITS file's header (the text block at the top of the file) records where the telescope was pointing, so a Seestar sub usually comes with its own hint.

A match is a proposal, not a solve

With tens of millions of patterns in an index, a chance match between a frame's quad and the wrong patch of sky is always possible, so counting matched stars isn't proof.

The old engine checked every proposed pose before reporting it. It measured the light at the positions where catalog stars should fall in the frame if the pose were right (forced photometry: measuring at a given position, whether or not a star was detected there), and a statistical test with a controlled false-discovery rate decided whether the solution was confirmed. That check, not the match count, accepted or rejected a solve. If a solve failed, the output said it failed and why; there was no best-guess mode. (implemented)

I think this is the part that matters most to anyone measuring with a Seestar. A solver that reports a wrong answer confidently is worse than one that says "not solved", because the wrong answer quietly poisons everything built on it.

Why solves fail

Trails hurt less than I expected. On my remote S50's first two nights, the stacker rejected at least 489 subs as trailed (up to 37% of some targets' subs on the first night), yet only 3 of the 4,202 subs failed to solve, so at least 486 trailed subs still solved. That is my arithmetic on the Experiment's counts, not a separate test. (inferred)

My numbers

Two very different sets of frames, solved by different software. Read them side by side, not as a before and after.

FramesSolvedConditions
Two nights from my own Seestar S50, 8 and 9 October 2026 4,199 / 4,202 One telescope, subs of 2 to 30 s, seven targets, a remote dark-sky observatory, equatorial mode. Workbench results, not a shipped feature. Exploratory: not yet confirmed on a fresh night. (measured)
July 2026 baseline, 96 frames 44.8% blind A mixed corpus: 51 FITS frames and 45 Canon CR2 camera raw files. The 1.3 old engine. Blind solves only, of all 96 frames (53.1% of the 81 attempted). (measured)

Two nights from a remote Seestar S50

I put my own Seestar S50 at a remote dark-sky observatory. On its first two nights, 8 and 9 October 2026, it took 4,202 subs of seven targets, and 4,199 of them plate-solved. The telescope runs on its built-in mount in equatorial mode, and the subs are 2 to 30 s long. (measured)

The qualifier that travels with it: the Experiment is marked Exploratory: "Every check here was made within these two nights. Nothing has yet been confirmed on a fresh night." One telescope at one dark site is not a fleet. Source: First nights from a remote Seestar S50 at a dark-sky observatory (8 October 2026, Exploratory).

The July 2026 baseline

On 12 and 13 July 2026 the old engine (the 1.3 software, before the solver was rebuilt) ran over a fixed set of 96 frames of mixed formats, Canon camera raw files included. (measured)

Source: Corpus snapshot, 12 July 2026: the old engine's baseline. That page is frozen; later software would give different numbers.

If your frames won't solve

Look at a failed sub before you blame the solver: are there stars, are they round, are there enough of them, and is the scale you gave the solver right for your telescope? Most failures are one of those four. Keep your FITS subs, because each one carries the pointing hint a solver can use.

Read more

Star data: ESA Gaia DR3 / DPAC.