New library: seiza (星座 — “constellation”), a Rust astronomical plate solver. Give it an image of the night sky and it figures out exactly where the telescope was pointing — star detection, TAN WCS fitting, and both hinted and blind solving — built to power the astrometric features in tenrankai and, eventually, PSF Guard.

The speed story

Plate solving has a reputation for being slow. It doesn’t have to be. Measured on a 16-core desktop, no GPU, everything from a cold start:

  • A 24 MP wide field blind-solves in under 2 seconds against a 2.5M-star Tycho-2 catalog — including building the entire 2M-pattern whole-sky index from scratch (1.2s) before searching it (0.4s).
  • A 61-megapixel raw FITS frame goes from file-open to hinted solution in 0.7 seconds — load, autostretch, star detection, solve.
  • Hinted solving itself runs in tens of milliseconds, with typical RMS of 0.2–0.5″ on real frames.

Those numbers came from a day of optimization passes that took the blind index build alone from 13.5s to 1.6s. The tricks: star unit vectors so every radius test is a dot product (no per-pair trigonometry), boundary-aware descriptor hashing (1–4 probes per quad instead of 3⁵), a frozen sorted-array index with branchless binary search, uniform-grid matching, rayon across all cores, and SIMD kernels with runtime AVX2 dispatch so released binaries stay portable.

More than stars

Getting started is one command: seiza download-data prebuilt pulls SHA-256-verified star and object catalogs from the CDN — Tycho-2 (2.5M stars, 25 MB), Gaia DR3 (36.7M stars), a 314k-entry object store, and a transient catalog refreshed nightly. Building your own deeper sets from primary sources stays supported, but nobody should have to spend hours against the ESA archive just to solve their first image.

The object catalogs pack NGC/IC/Messier, Sharpless, Barnard, LDN, vdB, UGC, PGC galaxies, Green’s supernova remnants, Wolf-Rayet stars, named stars — plus live transient lists and comet/asteroid orbital elements propagated to each image’s capture time, so an active supernova or a passing comet is an object like any other. Solve an image, and it tells you everything in the footprint with full ellipse geometry. There’s also seiza-fits, a dependency-free FITS reader with exact single-pass statistics, MTF autostretch, and OSC debayering (a 26 MP sub loads in ~75ms).

It’s on crates.io, with deb and RPM packages on GitHub releases.

The tenrankai integration

This is why seiza exists. With seiza wired in, tenrankai plate-solves astro images and draws object overlays: an “Objects” toggle on the image detail page reveals labeled markers for everything in frame — with collision-nudged labels, a frame-encompassing badge for the big stuff, zoomable views with touch-safe controls, and solutions persisted into the same markdown metadata sidecars everything else lives in. Solve once, flat files forever.

Here it is running against my shot of SN 2026sqf — a real screenshot, solved from the Tycho-2 catalog in well under a second:

Tenrankai image detail page with the Objects overlay on: NGC 3310 and UGC 5786 circled, HD 92095 labeled, and SN 2026sqf marked as a type II transient discovered 2026/07/08

My favorite part is that magenta label: transient overlays. The object store carries a live, reloading supernova catalog scoped to each image’s capture date — the solver knew that SN 2026sqf, type II, discovered 2026/07/08, was active in this frame on that night, automatically. When the catalog updates, persisted overlays regenerate.

Flat files in, annotated sky out.