Star detection, WCS fitting, plate solving — hinted and blind — and calibrated batch/live image stacking for astrophotography, in Rust. Stacking includes linear FITS output and RGB, LRGB, and narrowband composition from mono stacks. Built to power object overlays and astrometric features in tenrankai and PSF Guard.
It is fast. A typical hinted solve of a real telescope frame finishes in 0.2–0.4 seconds, and a blind solve — no position hint at all — takes about half a second with the prebuilt index. In side-by-side benchmarks seiza matched or beat ASTAP on every workload we tested, up to 19x faster on blind solves. The numbers and caveats are in Performance.
Try it without installing anything: go to seiza.fyi,
upload an image, and get a solution and object overlay in your browser. The
site runs seiza-server; the CLI
can submit to the same server with seiza worker --server.
Contents: Native apps · Install · Ways to use it · Feature matrix · Quick start · Image stacking · Performance · Catalogs and data · Status · N.I.N.A. · Siril · Layout
Built on seiza: Seiza for Mac · Seiza for Windows · seiza-server / seiza.fyi · PSF Guard · tenrankai
The same Rust engine drives two real desktop apps through
seiza-cabi:
- 🍎 Seiza for Mac — a fast, native FITS viewer and plate solver. Browse whole folders with thumbnails, stretch live with a reorderable stack editor, subtract gradients, deconvolve, blind solve on your machine with no uploads, install and verify catalogs, and export images with overlays. Quick Look previews included. macOS 15+, Apple silicon and Intel.
- 🪟 Seiza for Windows — a first-class native WinUI 3 viewer and solver. GPU-accelerated pan and zoom, per-channel color rendering, gradient subtraction, deconvolution, background plate solving with star, deep-sky, and motion overlays, and built-in catalog install, verify, and repair. Windows 11.
- 🍎 macOS app —
brew install --cask theatrus/seiza/seiza-mac, or download the DMG from the Seiza for Mac releases. - Homebrew (macOS / Linux) —
brew install theatrus/seiza/seizabuilds the CLI from source via the theatrus/homebrew-seiza tap. - Windows — download the MSI installer from the
releases. It puts
seizaon yourPATHand offers to download catalogs for you when it finishes. - Fedora / Ubuntu — install the RPM or deb from the same releases page.
- Python —
pip install seizafor the library with binary wheels. - Anywhere with Rust —
cargo install seiza-cli(requires Rust 1.89 or newer; see MSRV).
Building from source requires Rust 1.89 or newer. Repository checkouts pin
Rust 1.97.1 through rust-toolchain.toml so local builds and CI use the same
compiler, formatter, and linter.
- 🍎🪟 On your desktop — the native Mac and Windows apps above: browse, stretch, solve, and export without touching a terminal.
- As N.I.N.A.'s plate solver — seiza answers ASTAP's command line, so
select ASTAP in N.I.N.A. and point it at
seiza.exe. No plugin needed. Steps below. - As Siril's plate solver — seiza also answers astrometry.net's
solve-fieldcommand line. Point Siril's astrometry.net path at a copy of seiza namedsolve-fieldand solve as usual, SIP distortion included. Steps below. - In Tenrankai — its gallery server uses seiza for astrometric solutions and object overlays.
- In PSF Guard — seiza provides solved WCS and catalog context for image-quality and spatial analysis, plus calibrated batch stacking of selected frames.
- In a browser — seiza.fyi lets you upload an image for a hosted solution and object overlay, with nothing to install.
- From your own application — run
seiza workerto keep the catalogs and blind index open between solves, and send it one JSON request per line. It can also forward solves to a seiza-server, local or hosted. Wire protocol. - From Python —
pip install seiza: detection, hinted and blind solving with optional SIP distortion, WCS transforms, FITS WCS keyword output, verified catalog downloads, and native batch/live image stacking with calibration-master construction, robust background extraction, parameterized display stretching, and NumPy support. Binary wheels for Linux x86_64 and aarch64, macOS, and Windows cover every CPython from 3.9 up, with type stubs included (seiza-py). - From native applications —
seiza-cabiexposes FITS/XISF/raster rendering, robust background fitting and correction, incremental image stacking, solving, overlays, and catalog setup through one generated C header for Swift, .NET, C, and C++ consumers. - From Rust — use the crates directly:
seiza(detection, WCS, solving, catalogs),seiza-fits(FITS reading and linearf32writing),seiza-xisf(XISF reading into the same astronomy image representation),seiza-background(robust gradient models),seiza-deconvolution(experimental, conservative linear-image restoration),seiza-stretch(parameterized display curves),seiza-imgproc(pure-Rust image processing primitives with OpenCV-compatible semantics),seiza-stacking(linear calibration, registration, and additive live stacking),seiza-download(catalog download and caching),seiza-satellites(single-exposure satellite track prediction), andseiza-sources(raw upstream data for custom catalog builds).
Every surface runs the same engine; pick the one that fits.
| Feature | CLI | Python | C ABI | 🍎 Mac app | 🪟 Windows app |
|---|---|---|---|---|---|
| Plate solving — hinted and blind | ✓ | ✓ | ✓ | ✓ | ✓ |
| Star, deep-sky, and motion overlays | ✓ | — | ✓ | ✓ | ✓ |
| Image browsing and native rendering | — | — | ✓ | ✓ | ✓ |
| Display stretching | ✓ | ✓ | ✓ | ✓ | ✓ |
| Batch and live stacking | ✓ | ✓ | ✓ | — | — |
| Calibration masters | ✓ | ✓ | — | — | — |
| Background extraction | ✓ | ✓ | ✓ | ✓ | ✓ |
| Deconvolution (experimental) | ✓ | ✓ | ✓ | ✓ | ✓ |
| RGB, LRGB, and narrowband color | ✓ | ✓ | — | — | — |
| Satellite track prediction | ✓ | ✓ | — | — | — |
| Catalog install and verify | ✓ | ✓ | ✓ | ✓ | ✓ |
| Export with overlays | ✓ | — | — | ✓ | ✓ |
The C ABI renders; its host app does the browsing. For stacking on the desktop, PSF Guard stacks the frames it selects with this engine.
These are CLI instructions for core use, scripting, and integration. If you just want to view, solve, and process images, install a native Mac or Windows app instead — nothing below is needed there.
Download the ready-made catalogs once, then solve:
cargo install seiza-cli
seiza download-data prebuilt --output data # SHA-256-verified from downloads.seiza.fyi
seiza solve-blind image.jpg --data data --min-scale 0.5 --max-scale 15
seiza solve image.fits --data data --scale 1.26 --objects data
seiza solve integration.xisf --data data --scale 1.26 --objects data
seiza solve image.fits --data data --scale 1.26 --satellites-celestrak --annotate tracks.png
seiza catalog object --data data "Andromeda Galaxy"
seiza catalog objects --data data --ra 10.6848 --dec 41.2691 --radius 3 --format json
seiza catalog star --data data "TYC 5949-2777-1" --format json
seiza master bias bias/*.fits --output master-bias.fits
seiza stack light-001.fits light-002.fits light-003.fits --output stack.fits \
--preview stack.png --report stack-report.json
seiza background stack.fits --output stack-bg.fits \
--model-output background.fits --diagnostics background.json
seiza deconvolve stack-bg.fits --output stack-light-dc.fits \
--psf-fwhm 3.1 --iterations 4 --amount 0.35
--data takes a file or a directory: a directory picks the right catalog
automatically (the deepest star catalog present, the blind pattern index
when one is there). After seiza setup, every --data and --index can
be omitted entirely — the standard catalog locations are searched.
Satellite overlays are opt-in and apply only to one shutter-open exposure,
not a stack. The solver reads DATE-BEG/DATE-END, DATE-AVG plus
EXPTIME, DATE-OBS plus EXPTIME, or a lone DATE-END plus EXPTIME, and
standard OBSGEO-* observer coordinates from FITS. Explicit --time,
--exposure-seconds, and --observer-lat/--observer-lon remain available.
The annotation is a predicted path, not a claim that a trail was detected.
For historical images, the seiza-satellites library resolves epoch-
appropriate TLEs from its durable cache, the Seiza rolling mirror, or the
public IAU SatChecker fallback. Current CelesTrak and historical responses
share a cache-only-replayable history with a configurable 5 GiB default cap.
See the satellite track design.
Mirror operators should follow the
satellite publication runbook.
Not sure which catalogs you need? Run the guided setup — the same one the Windows installer offers, available on every platform:
seiza setup
It walks you through use-case-based choices: lightweight hinted solving, denser Gaia solving, deep blind solving, or the complete bundle. Every choice includes object search, Solar System objects, active transients, and at least one plate-solving catalog. All downloads are versioned and SHA-256 verified.
Set SEIZA_CATALOG_DIR to choose the default setup and ASTAP-compatible
catalog directory. The all-users Windows installer sets it system-wide to the
shared %ProgramData%\Seiza\catalogs directory.
Solving many images from your own application? Start a worker so the catalogs and blind index stay open instead of being reloaded for every solve:
seiza worker --data data --index data
Send it one JSON request per line on stdin; it writes one response per line on stdout, takes FITS or normal image paths, and exits cleanly at EOF. The full request and response format is in the worker protocol.
The same worker can send solves to a
seiza-server instead of solving
locally — your own, or the hosted one at seiza.fyi. It
converts each FITS to a lossless 8-bit PNG before upload to keep transfers
small:
seiza worker --server http://solver-host:8080
If the server needs an API key, pass --server-token or set
SEIZA_SERVER_TOKEN. To upload the original FITS instead of the PNG (for
example, to preserve headers or full bit depth), pass --server-upload fits.
Remote solves give up after five minutes; change that with
--server-timeout SECONDS. Local and remote workers speak the same JSON
protocol, so your application code does not change.
seiza stack calibrates and registers linear FITS or XISF light frames, optionally
applies global or tiled local normalization, and integrates them with online
delta-sigma rejection. Differently sized or cropped frames are mapped onto the
first frame's fixed output grid. Frames acquired after a German-equatorial-mount
meridian flip are handled automatically: a transform near 180 degrees is
accepted under the normal rotation tolerance and the pixels are rotated back
onto the reference orientation before integration.
Color remains color. Three-plane FITS/XISF inputs are stacked as linear RGB; raw
one-shot-color frames carrying BAYERPAT are calibrated in their native CFA
sampling and then debayered. Registration detects stars from a luminance view,
but the resulting transform, per-channel normalization, rejection, and
accumulation retain all three channels. The result is an unstretched
three-plane float32 RGB FITS, and --preview produces an RGB display image.
seiza stack lights/*.fits --output stack.fits \
--bias master-bias.fits --dark master-dark.fits --flat master-flat.fits \
--normalization local --preview stack.png --report stack-report.json
Eight 300-second H-alpha frames stacked on the first frame's pixel grid. The
JPEG uses a display-only stretch; the stack itself remains linear f32 FITS.
The Rust crate, Python wheel, and C ABI expose the same incremental
LiveStacker engine. Live handles can be atomically checkpointed to a
versioned .seiza-stack context, reopened in a later process, and continue
accepting frames without resetting their registration or rejection history.
See the CLI stacking guide,
Python API, and
stacking design.
seiza deconvolve provides a deliberately restrained classical restoration
experiment for calibrated/stacked linear FITS/XISF images. Supply a stellar FWHM in
pixels; Seiza applies four damped Richardson-Lucy iterations by default and
blends 35% of the result back into the input while preserving per-channel flux.
The CLI keeps NaN registration borders masked instead of treating them as
image data.
seiza deconvolve stack-bg.fits --output stack-light-dc.fits \
--psf-fwhm 3.1 --iterations 4 --amount 0.35
The Python wheel exposes the same operation as
seiza.deconvolve(image, psf_fwhm=3.1). Native consumers can call
seiza_deconvolve_in_place from the generated C ABI header.
This is an explicit symmetric-Gaussian PSF model, not blind sharpening or a
learned reconstruction. Use it before display stretching and inspect for noise,
rings, and field-dependent failures. Raw Bayer mosaics are rejected. See the
seiza-deconvolution crate and
design note for the guardrails and limitations.
The AstroBin corpus trial
shows four input/conservative/strong/external-reference comparisons with
measured PSF and background changes, including a ringing failure hidden by
aggregate FWHM; the
model-based restoration plan explains
how synthetic degradations and registered expert pairs could train a later ML
operation without treating attractive edits as ground truth.
seiza background estimates a smooth gradient from robust sample windows in
a linear mono or RGB FITS/XISF image. The default quadratic model is fit per channel
at shared, deterministically selected positions; locally noisy samples and
samples inconsistent with the fitted surface are rejected. Output remains
linear float32 and retains a valid input WCS.
seiza background stack.fits --output corrected.fits \
--model-output background.fits --diagnostics background.json
# A conservative plane for a simple additive gradient
seiza background stack.fits --output corrected.fits --degree 1
# Multiplicative illumination correction
seiza background stack.fits --output corrected.fits --mode divide
Fitting itself retains only compact samples and coefficients. Correction can run in place; a full-resolution model is allocated only when requested. Rust and Python expose the same fit/apply split and accept an exclusion mask for extended structures. See the background-extraction design for the ADBE-inspired sampling strategy, correction math, memory behavior, and limits.
Mono stacks can be turned into RGB/LRGB or narrowband quick looks without changing the linear stack accumulator:
seiza color lrgb --luminance l.fits --red r.fits --green g.fits --blue b.fits \
--output lrgb.fits --preview lrgb.png
seiza color lrgb --luminance l.fits --red r.fits --green g.fits --blue b.fits \
--luminance-mode super --output super-lrgb.fits --preview super-lrgb.png
seiza color narrowband --ha ha.fits --oiii oiii.fits --sii sii.fits \
--palette sho --output sho.fits --preview sho.png
seiza color narrowband --ha ha.fits --oiii oiii.fits --sii sii.fits \
--palette foraxx-sho --preview foraxx.png
RGB, LRGB, additive super-LRGB (L + R + G + B), synthetic super-RGB
(R + G + B, no luminance stack), SHO/HOO, every direct three-filter
permutation, and custom Rust mixing matrices retain linear-light samples. Foraxx-SHO and Foraxx-HOO use the
published dynamic formula on internally stretched working channels and are
explicitly marked display-referred in FITS metadata. See the color-composition
design for normalization, equations, and
the distinction between linear CIE-luminance replacement and display palettes.
The CLI automatically registers filter stacks onto L, R, or H-alpha before
composition; pass --no-register only for masters already sharing one grid.
| Direct linear SHO | Foraxx-SHO quick look |
|---|---|
![]() |
![]() |
Sh2-132 from twelve 300-second Askar107PHQ frames per H-alpha, OIII, and SII
channel. Seiza calibrated and stacked all 36 frames, handled the meridian-flip
orientation automatically, registered the three filter masters, and rendered
both previews from the same data. These README images are cropped, downscaled
quick-look JPEGs; the composition outputs remain full-resolution f32 FITS.
Seiza is built to solve inside an imaging loop. On our Windows 11 test machine (Intel Core i7-12700H, release builds, no GPU), process startup, image loading, star detection, catalog access, solving, and result output are all included:
- A real hinted FITS solve usually finishes in 0.2-0.4 seconds.
- Blind solving with a prebuilt index took 0.53 seconds median across 13 real FITS frames ranging from 26 to 61 megapixels.
- Compact u8 detection cut peak detector memory from 1.08 GiB to 543 MiB on a 94 MP JPEG, and from 590 MiB to 179 MiB on a 61 MP FITS frame.
ASTAP is a mature, highly regarded plate solver and a serious reference point. There is no universal winner: different search strategies do better on different fields. In our repeated real-FITS comparison, using the catalog recommended for each solver:
| Workload | seiza | ASTAP | Result |
|---|---|---|---|
| Accurate hint, 26 MP narrow field | 0.25-0.27 s | 0.27-0.29 s | Roughly tied; seiza 9-11% faster |
| Accurate hint, 61 MP wide field | 0.42 s | 0.63 s | seiza 1.5x faster |
| Position blind, 26 MP narrow field | 1.61 s | 31.28 s | seiza 19x faster |
| Position blind, 61 MP wide field | 0.65 s | 1.09 s | seiza 1.7x faster |
The 61 MP position-blind row was rerun after the blind-pipeline improvements (three runs each: seiza 0.62-0.65 s, ASTAP 1.08-1.16 s).
On a separate set of 25 heavily processed JPEGs, seiza solved all 25 with a hint and all 25 position-blind. ASTAP solved 13 and 12 respectively. Among images both programs solved, seiza was 3.5x faster hinted and 6.5x faster position-blind by median wall-time ratio. Seiza also solved all 25 with no position or scale hint in 0.90 seconds median. This is deliberately unusual input for a plate solver, so it measures robustness on processed web images rather than ASTAP's normal FITS workflow.
These are measurements on one system, not universal promises. Runs used the normal OS file cache and included complete command-line wall time. See the FITS comparison and blind/detection follow-up for the images, catalogs, repetitions, correctness checks, and caveats.
Most users only need seiza download-data prebuilt or seiza setup from the
Quick start; this section is the detail behind them — what is in each hosted
bundle and how the compatibility paths work.
V4-capable clients use one complete, versioned
v4 catalog-bundle manifest.
New clients never combine files from different bundle versions:
stars-lite-tycho2.bin (2.5M stars, 25 MB), stars-gaia.bin (Gaia DR3
G≤15, 36.7M stars, 367 MB), stars-deep-gaia17.bin (Gaia DR3 G≤17,
154.1M stars, 1.54 GB), blind-gaia16.idx (the memory-mapped G≤16 blind
pattern index, 1.63 GB), stars-lite-tycho2.ids.bin (2.7M numeric identifiers
and 387k names, 100 MB), objects.bin (315k objects), minor-bodies.bin
(comets and asteroids), and transients.bin (active supernovae/novae,
refreshed nightly). download-data prebuilt combines the bundle into one
local data directory. Current manifests may offer zstd-compressed transports;
new clients stream-decompress them into the normal uncompressed mmap cache,
while older v4 clients continue to use the retained uncompressed artifacts.
The deep catalog and maintained index
enable blind solving of small, fine-scale fields whose brightest detections
are fainter than the G≤15 catalog's small-field pattern tiers without
rebuilding the whole-sky index for every process.
Applications can install only the catalogs they need without invoking the CLI:
// Enable seiza's non-default `downloads` feature first.
let manager = seiza::downloads::CatalogManager::builder().build()?;
let files = manager
.ensure(&seiza::downloads::CatalogSet::solver_lite()
.with(seiza::downloads::Dataset::Objects))
.await?;
let stars = seiza::catalog::TileCatalog::open(
files.path(seiza::downloads::Dataset::StarsLiteTycho2)?,
)?;seiza-download owns the async, verified runtime
bundle cache. seiza-sources separately owns raw
Gaia, VizieR, MPC, OpenNGC, and other catalog-building downloads, keeping those
large and rate-limited workflows out of application integrations.
Working today:
- Star detection — tile-based background/noise estimation (median + MAD), sigma thresholding, connected components, flux-weighted sub-pixel centroids.
- WCS — TAN (gnomonic) projection with a CD matrix: pixel ↔ world transforms, scale/footprint helpers.
- Hinted plate solving — triangle matching over FOV-sized windows, affine candidate voting, iterative least-squares refinement, seeded by an approximate center and pixel scale. Solves real telescope images in tens of milliseconds with sub-arcsecond RMS.
- Blind plate solving — no position hint, only a plausible pixel-scale
range: a disc-anchored whole-sky 4-star pattern index, hypothesis voting
with smoothing and non-max suppression, parallel verification through the
hinted solver. The hosted G≤16 index is versioned, SHA-256 verified, and
memory-mapped
(
seiza solve-blind image.jpg --data data --index data --min-scale 0.1 --max-scale 15). - Star catalogs — memory-mappable tile formats with cone search.
Use the prebuilt sets from
download-data prebuiltunless you need a custom depth or epoch: building from primary sources stays fully supported (Tycho-2; Gaia DR3 via ESA TAP with--max-magand--chunksfor deeper sets; ASTAP.1476databases) but the Gaia download alone can take many hours against the ESA archive. An optional memory-mapped identifier sidecar resolves TYC/HIP/HR/HD/SAO/FK5, IAU and Bayer/Flamsteed names, GCVS variables, and WDS double-star designations without a network request or plate solve. Its normalized name index also supports prefix completion for interactive search. Catalog readers keep normal opens non-exhaustive; runseiza catalog validate --data FILEwhen a deliberate full integrity scan is needed.
# custom build from primary sources (the prebuilt sets skip all this)
seiza download-data gaia --output raw/gaia --max-mag 17 --chunks 3072
seiza build-data gaia --input raw/gaia --output stars-deep.bin --max-mag 17
seiza build-blind-index --data stars-deep.bin --output blind-gaia16.idx --index-mag-limit 16
- Object catalogs — OpenNGC (NGC/IC/Messier), Sharpless, Barnard, UGC,
LDN, LBN, Cederblad, vdB, PGC, Green's Galactic supernova remnants,
Wolf-Rayet stars, IAU named and HD stars, and live transient
(supernova/nova) lists built into a memory-mapped object store. Its embedded
tile and normalized-name indices page in only relevant records for viewport,
exact-name/ID, and prefix queries. Query a known sky cone or ordered image
footprint without plate solving (
seiza catalog objects ...), resolve a name or alias withseiza catalog object ..., or query a solved image with projected pixel and ellipse geometry (seiza solve ... --objects objects.bin). The current extensible v4 container also preserves every contributing upstream record, typed relations, preferred facet selections, source-qualified geometry (including hand-drawn OpenNGC outlines), pinned build provenance, and externally curated corrections;seiza catalog object --all-sourcesaudits all of it. EarlierSEIZAOB1andSEIZAOB3files remain readable. - FITS — streaming reading with typed headers, exact
histogram statistics, planar RGB
(NAXIS3) support, OSC debayering (
BAYERPAT), and bounded-memory streaming into native pixel storage, plus atomic linearf32output, in theseiza-fitscrate. FITS files plate-solve directly, with RA/DEC hints read from headers. - XISF — monolithic grayscale, planar RGB, and Bayer image reading with
typed integer/float samples, attached image blocks, FITS-compatible metadata,
and zlib, LZ4/LZ4HC, or zstd compression with optional byte shuffling in
seiza-xisf. XISF uses the same linear image path as FITS for solving, rendering, background work, deconvolution, and stacking. AtomicFloat32XISF output mirrors the FITS writer; a.xisfoutput path selects it in every CLI save command. - Parameterized stretching — reusable identity, linear, asinh,
percentile-asinh, MTF, manual GHS, and existing median/MAD Auto-MTF models in
seiza-stretch. Analysis, curve resolution, and application are separate so interactive and full-resolution pipeline stages can share an exact plan. - Background extraction — deterministic low-noise sample selection,
robust rejection, weighted polynomial surfaces, additive subtraction, and
multiplicative correction in
seiza-background. Model fitting is compact; rendering a full model image is explicit. - Image stacking — master bias/dark/flat construction, CFA-aware OSC
calibration, registration onto the first frame's fixed grid with
meridian-flip handling, global or tiled local normalization, and online
delta-sigma rejection in
seiza-stacking. The same incrementalLiveStackerengine serves batch and live use, with atomic on-disk contexts for exact process-to-process resumption. - Deconvolution (experimental) — damped Richardson-Lucy restoration from
a measured Gaussian PSF FWHM with per-channel flux preservation in
seiza-deconvolution.NaNregistration borders stay masked instead of being treated as image data. - Color from mono stacks — RGB, LRGB with native or additive super-luminance modes, SHO/HOO and every direct three-filter permutation, Foraxx quick looks, and custom mixing matrices, all in linear light.
- Satellite track prediction — single-exposure tracks from current or
historical OMM/TLE element sets, with annotated overlays, in
seiza-satellites. - Packages & CI — crates.io releases, a guided Windows MSI installer, Fedora RPMs and Ubuntu debs on GitHub releases, and an integration suite that solves real hosted camera frames against known-good solutions on every PR.
Both solvers can fit SIP distortion polynomials (orders 2-5, forward and
inverse) on the accepted solution with --sip-order; the linear solution is
kept whenever the polynomial does not improve the residual beyond what its
extra coefficients buy for free. On real wide-field images this cuts the
astrometric residual by a third to a half
(measurements).
seiza speaks ASTAP's command-line contract, so N.I.N.A. can use it as its plate solver with no plugin:
-
Grab the Windows MSI from the releases (or use the portable ZIP or
cargo install seiza-cli). -
Install the catalogs you want. On Windows, let the installer launch catalog setup when it finishes or open Seiza Catalog Setup from the Start menu later. On every platform, the equivalent command is
seiza setup. It writes a complete usable selection into Seiza's standard catalog directory, which ASTAP-compatible mode discovers automatically.For a manual or portable layout, download the prebuilt bundle into one directory and configure that directory once:
seiza download-data prebuilt --output C:\seiza-data setx SEIZA_CATALOG_DIR C:\seiza-data -
In N.I.N.A.: Options → Plate Solving → Plate Solver: ASTAP, and point the ASTAP path at
seiza.exe. It works in the blind-solver slot too.
seiza auto-detects ASTAP-style invocations (-f image.fits -fov … -ra … -spd …), solves hinted or blind accordingly, and writes the .ini
result file N.I.N.A. reads — including the full CD matrix, so pixel
scale, rotation, and flip all come through. Catalog discovery selects the
right star catalog and blind index from the configured directory; advanced
single-file overrides remain available through SEIZA_STAR_DATA and
SEIZA_BLIND_INDEX. A copy of the binary renamed astap.exe behaves
identically. Details:
docs/design/astap-mode.md.
seiza speaks astrometry.net's solve-field command line — and on Windows
it also answers Siril's bin/bash launch wrapper itself, so no cygwin is
needed. Siril's existing astrometry.net integration drives it with no
plugin on every platform:
- Run
seiza install-solve-field --dir <dir>— it installs the complete layout (solve-field,bin/bash,tmp/) Siril expects. - Install catalogs with Seiza Catalog Setup on Windows or
seiza setupon any platform. For a manual or portable layout, populate one directory withseiza download-data prebuilt --output <directory>and pointSEIZA_CATALOG_DIRat it. Solve-field mode selects the star catalog and blind index from that directory automatically. - In Siril: Preferences → Astrometry → astrometry.net install dir, set it to that directory, and pick the astrometry.net solver when plate solving.
Siril hands seiza its own detected star list and reads the solution back
from the standard .wcs file — no pixels are exchanged, and the SIP
distortion order Siril requests is fitted by seiza's solver.
Siril reports fitted PSF amplitudes rather than photometric flux, which would defeat the matcher's brightness ranking on stretched images — so when the source image is present next to the star table (the normal Siril case), seiza automatically re-measures star flux from the pixels and solves in the table's exact frame. Contract details: docs/design/solve-field-mode.md.
seiza/— library crate:detect,wcs,catalog,objects,solveseiza-fits/— FITS reading and atomic linearf32writing; re-exports the statistics and MTF autostretch that now live inseiza-stretchseiza-xisf/— XISF metadata and attached-pixel reading intoFitsImage, plus atomic linearf32writingseiza-background/— format-independent robust background sampling, polynomial fitting, diagnostics, and linear correctionseiza-stretch/— parameterized, format-independent display analysis, transfer plans, and mono/RGB applicationseiza-stacking/— linear FITS/XISF calibration, local registration, normalization, additive integration, and rejectionseiza-cabi/— shared native C ABI for rendering, background extraction, live stacking, solving, overlays, and catalog setupseiza-cli/— theseizacommand-line tool: solving, ASTAP mode, the JSON-RPC worker, guidedseiza setup, and dataset buildingseiza-download/— async, verified runtime catalog-bundle cacheseiza-sources/— raw upstream catalog acquisition for custom buildsseiza-py/— Python bindings (pip install seiza), outside the cargo workspace so workspace builds never need libpythonpackaging/windows/— the WiX MSI installerdocs/— design notes and benchmark reports
seiza builds on Rust 1.89 or newer. This is a real floor set by the
dependency tree (currently nalgebra), not just the 2024 edition's own 1.85
requirement, and it is declared as rust-version in Cargo.toml and checked
in CI against a pinned 1.89 toolchain. A bump here is treated as a routine
change, not a breaking one.
Apache-2.0


