OrbitalCommons / projects / zodiacal

Solve · Rust crate

zodiacal

Blind astrometry in Rust. Recover a field’s pointing, rotation, and plate scale from the pattern of stars, without an initial pointing estimate.

RustApache-2.0Blind plate solving
Solve a synthetic star field
CASSIOPEIA / PATTERN-MATCHING ILLUSTRATION

Find your place among the stars.

A sky image has an address, even when you do not know where the camera was pointing. zodiacal matches four-star patterns against a prebuilt catalog index, fits a sky projection, and verifies the proposed alignment.

01

No pointing prior

Start from an astronomical image or a list of detected source positions.

02

Multi-scale search

Match geometric patterns across indexes covering different angular scales.

03

A verified solution

Fit a TAN-WCS projection and evaluate the alignment against catalog positions.

A field of dots. A place in the sky.

Choose a synthetic camera field, rotate it, and ask zodiacal to find its pointing. The solver receives only pixel positions and brightness; the known coordinates stay outside the solver for comparison afterward.

For a field anywhere on the sky, open the sky explorer →

Rotate the pattern. Keep the match.

Rotate or resize this four-star pattern. The distances change together, so their ratios stay the same. Geometric invariants make a pattern recognizable before its orientation or scale is known.

The geometry of recognitionInteractive illustration
A four-star pattern and a transformed copy Four labeled stars form the same shape in two panels. Rotation and scale controls transform the right-hand copy while preserving the ratio of distances AC and AB. REFERENCE PATTERN CAMERA FRAME A B C D A B C D

AC / AB = 0.4941 in both frames.

An illustration of geometric invariance, not a plate solve. Zodiacal uses normalized four-star hash codes, catalog indexes, projection fitting, and verification. A distance ratio alone is not enough to identify a field.

Add a plate solver to your stack

Library
cargo add zodiacal

To use the published command-line solver, install with the CLI feature:

Terminal
cargo install zodiacal --features cli --locked

For browser WebAssembly, use the same published solver with native data services disabled. Load the index in memory and run the solver in a worker, as this page does:

Cargo.toml · browser
zodiacal = { version = "0.5", default-features = false }

Solve an image against a catalog

A solve needs an image and a matching-scale index. Index files contain catalog star positions and geometric hashes; the package does not bundle an all-sky index.

Terminal · after building an index
zodiacal solve image.png \
  -i my_index_00.zdcl \
  -i my_index_01.zdcl \
  --timeout 60
  1. Extract sources

    Find candidate point sources in the image.

  2. Match patterns

    Form quads and search a kd-tree of catalog patterns.

  3. Fit the sky

    Use matched correspondences to compute a TAN-WCS projection.

  4. Verify

    Check the proposed alignment against known catalog positions.

From source detection to a sky solution

Index choice matters: its angular scales must cover the field you want to solve. Build index files from a starfield binary catalog, and keep field size, limiting magnitude, memory, and search timeout in mind.

Input / output Description
Image or source list An astronomical image, or detected source positions.
Catalog index Prebuilt .zdcl files covering the relevant angular scales.
WCS solution Pointing, orientation, and plate scale in a tangent-plane projection.
Verification A catalog-based log-odds check of the proposed match.

Build your first index → · Read the benchmark conditions and results →

Examples and feature notes reviewed against zodiacal 0.5.1. Source & contributions →

Keep exploringstarfield

Build on catalogs, coordinates, and time.