Premium apps Part of Lumina

Astro Image Stacker (align & stack)

Calibrate, align and stack astro frames with sigma clipping; download a 32-bit FITS.

Files inside darks/, flats/ or bias/ folders (or FITS IMAGETYP DARK, FLAT, BIAS) are used for calibration; everything else is a light frame.

More options

Try an example: Five synthetic light frames with a satellite trail · Same frames, median stack with a linear gradient fit

More about this tool

How it works

Upload a ZIP of 2–16 light frames (FITS, PNG, TIFF or JPEG, up to 1 megapixel each), optionally with darks/, flats/ and bias/ folders. The stacker builds calibration masters, detects stars, aligns frames by triangle matching, combines them with mean, median, kappa-sigma or winsorized rejection and returns a linear 32-bit FITS, a stretched 16-bit PNG and a registration report. Lumina Astro Lab runs the same pipeline on your device for larger sessions.

  • Calibration: bias, dark and flat frames are combined per pixel with a median. The master flat minus the master bias is divided by its median; each light becomes (light − master dark) ÷ normalised flat, or light − master bias without darks. Darks are not scaled, so they must match the light exposure. Raw one-plane frames with a Bayer pattern are debayered (bilinear) after calibration.
  • Registration: stars are detected as in the star detector. Triangles of the 20 brightest stars are compared by their side ratios; a seeded RANSAC search fits a similarity transform to each matching triangle and keeps the one most stars agree with (within 2.5 pixels); least squares on mutual nearest neighbours refines it. The reference is the frame with the most stars. Frames are resampled bicubically or bilinearly; pixels outside a frame are left empty and do not count.
  • Stacking: frames get an additive background normalisation to the reference. Kappa-sigma rejects samples farther than κ standard deviations from the per-pixel median; winsorized clipping first winsorizes at 1.5 σ to estimate σ robustly. The noise reduction compares the background noise of the registered frames with the stack; √N is the ideal for N frames with independent noise.
  • Outputs: a linear 32-bit floating-point FITS (unstretched, for further processing) and a 16-bit PNG with the selected display stretch. Limits: 16 frames, 1 megapixel per frame, 12 million light samples.

Sources

Part of Lumina

  • Lumina Photo editor & image toolkit

    Bring out what you saw. A free photo studio, right in your browser.

    Open Lumina

Related tools

How to use the Astro Image Stacker

Calibrate, align and stack astrophotography frames with sigma clipping, read the registration report and download a linear 32-bit FITS.

What it is for

A single deep-sky exposure is noisy. Stacking many exposures of the same field averages the random noise away: with N frames the noise drops by about √N. Before averaging, the frames must be calibrated (dark, flat and bias correction), aligned on their stars, and cleaned of things that appear in only one frame — satellite trails, aircraft and hot pixels.

Upload a ZIP with 2–16 light frames (FITS, PNG, TIFF or JPEG, up to 1 megapixel each). Put calibration frames in darks/, flats/ or bias/ folders, or use FITS files whose IMAGETYP says DARK, FLAT or BIAS. The stacker builds median masters, calibrates, debayers raw colour frames, detects stars, aligns every frame to the reference by matching star triangles, and combines them. You get a linear 32-bit FITS, a stretched 16-bit PNG and a registration report. For larger sessions use Lumina Astro Lab, which runs the same engine on your device.

Worked example

The first example is a ZIP of five synthetic light frames (generated, not real sky) with small shifts and rotations; frame 3 crosses a bright satellite trail. With the defaults (winsorized clipping, κ = 3, bicubic resampling):

  • Stacked 5 of 5 light frames, noise reduced 2.006× (ideal √5 = 2.236×)
  • 2.92 % of samples rejected; 18 stars in the stack, median FWHM 3.65 px
  • Registration: light-2 matched 21 of 21 stars with RMS 0.134 px, shifted −2.828 / 2.225 px and rotated −0.312°
  • light-3, the trail frame, had the most rejected samples: 6.74 %

The trail is gone from the result because only one frame showed it. Switching the method to Mean gave 0 % rejections and a slightly better 2.074× noise reduction, but the trail stays in the image. Median reached only 1.775×, the price of its robustness. Turning off alignment smeared the stars: median FWHM rose from 3.65 to 5.81 px.

How to read the result

  • Noise reduction compares the background noise of the registered frames with the stack. It falls short of √N when calibration frames add their own noise or frames differ in quality.
  • Rejected samples is the share of pixel values removed as outliers.
  • The registration table shows each frame's transform to the reference: matched stars, RMS residual, Δx, Δy, rotation and scale. A frame that could not be aligned is listed as not used, with the reason.
  • The FITS is linear and unstretched — the file to continue processing. The PNG has the chosen display stretch applied.

Tips and common mistakes

  • Use winsorized clipping or the median for fewer than about eight frames; kappa-sigma needs more frames to reject reliably, and the tool warns you.
  • Darks must match the lights' exposure time and temperature; they are not scaled.
  • Add bias frames when you add flats, otherwise the flat still contains the camera offset.
  • Turn on gradient removal (degree 1–2) for light-polluted skies; higher degrees can eat faint nebulosity.
  • All frames must share one size and orientation. Mirrored frames are not matched.

FAQ

Is this a replacement for DeepSkyStacker or Siril?

It covers the same core steps — calibration, alignment and rejection stacking — for small sessions. There is no drizzle, comet alignment, dark scaling or photometric colour calibration.

Why does my frame show "not used"?

It did not share enough stars with the reference — clouds, a different field or heavy trailing.

Can I stack JPEG files from a phone?

Yes, but JPEG is gamma-encoded and compressed, so calibration is only approximate. Prefer FITS, TIFF or RAW converted to 16-bit TIFF.

Are my frames kept?

They are processed for this request; download links expire after about two hours.

Guide last updated:

For scripts and AI agents

  • JSON API: POST https://luminaimagestacker.usefulweb.site/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://luminaimagestacker.usefulweb.site/mcp · tool name lumina_image_stacker
Example request
curl -s -X POST https://luminaimagestacker.usefulweb.site/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{…see OpenAPI examples…}'
Feedback · ideas & bug reports welcome