AstroBurst v0.5: Rust + Tauri + WebGPU astrophotography, with a big correctness pass
A while back I shared AstroBurst here: an open-source desktop app for processing astronomical images (JWST, Hubble and Roman, in FITS and ASDF) fully offline. Compose RGB from narrowband channels, stack, stretch, export. Rust for the heavy lifting, React for the UI, WebGPU for the live preview.
Then it went quiet for a bit. I got pulled into other projects, but I finally circled back, and v0.5 is out. It's mostly the unglamorous but important stuff: getting the math right and not panicking on bad files.
Correctness (the part I actually lost sleep over):
- Phase-correlation alignment was just wrong. The cross-power conjugation order was inverted and I wasn't removing the DC pedestal before windowing, so it returned garbage shifts on anything with a real sky background. It registers properly now.
- Drizzle now accumulates a proper flux-conserving weighted average, so pixfrac and kernel actually do something.
- Sub-pixel peak interpolation had a sign flip. Also fixed.
New features:
- Drizzle in the compose pipeline (per-channel scale, pixfrac, kernel).
- Quality-weighted stacking: a subframe selector scores each frame (stars, FWHM, SNR) and weights the good ones.
- FITS export that's actually valid now. It preserves WCS and metadata and writes PROGRAM/HISTORY provenance cards for every step applied.
- Shared-luminance star mask for the masked stretch, so no more chromatic halos.
Robustness:
- Hardened the FITS and ASDF readers against malformed input, with checked arithmetic on all the untrusted size math, so no more overflow or panics.
- 305 backend tests passing.
The bits I'm quietly proud of, Rust-wise: it has (as far as I know) the first non-Python ASDF reader (zlib/bzip2/lz4, Roman gWCS), memory-mapped I/O, and the STF stretch comes out bit-for-bit identical across the GPU shader, a CPU worker, and the Rust backend.
Repo: https://github.com/samuelkriegerbonini-dev/AstroBurst
Honest feedback welcome, especially from anyone who's fought with FITS/WCS or FFT registration before. I clearly needed a second pair of eyes on that alignment code.
NOTE: I've always been transparent about my use of AI, but things have changed a bit. I still use it for drafting text, docs, and frontend work. However, since its coding quality seems to be degrading lately and it was stressing me out trying to fix the bugs it generated , so i've decided to stop using it for the Rust code.
Because I built the early versions with its help, a good chunk of this specific release was spent fixing some silly mistakes it left behind. The goal from here on out is to rely on it less and less.