Stacking Quality: Direct vs. Stack-of-Stacks
CrowdSky stacks your raw frames into 15-minute chunks. But what if you want to combine hours of data — does pre-stacking into chunks lose quality compared to stacking everything at once? We ran the numbers. The short answer: no.
The Bottom Line
You can safely delete your raw files after CrowdSky has stacked them into 15-minute chunks. If you later want to combine multiple chunks into a deeper image, the result is statistically indistinguishable from stacking all the original raw frames at once.
In our test with 520 frames of M16 (Eagle Nebula), the stack-of-stacks actually measured lower background noise than the direct stack, detected more stars, and agreed to within 0.4 ADU per pixel.
Visual Comparison
520 raw frames (10 s exposure, LP filter) stacked two ways: all at once (left) and via eight 15-minute chunks then combined (right). Can you tell the difference?
Measured Results
After aligning both results to the same reference frame, we compared background noise, star detection, and resolution. The two methods are nearly identical on every metric.
| Metric | Direct Stack | Stack-of-Stacks | Difference |
|---|---|---|---|
| Background noise (R) | 1.73 ADU | 1.54 ADU | −10.7% |
| Background noise (G) | 1.55 ADU | 1.34 ADU | −13.4% |
| Background noise (B) | 1.51 ADU | 1.40 ADU | −7.0% |
| Background mean level | 1631.1 ADU | 1631.7 ADU | +0.6 ADU |
| Stars detected | 1981 | 2021 | +40 |
| Median star FWHM | 2.774 px | 2.825 px | +1.9% |
| Median star SNR | 72.1 | 73.5 | +2.0% |
| Median pixel difference | — | 0.4 ADU | |
Green values favour the stack-of-stacks. The only metric where the direct stack edges ahead is star FWHM (+1.9%), caused by one extra round of image interpolation during alignment — a sub-pixel effect invisible in practice.
Difference Image
Subtracting one result from the other (after alignment) shows the per-pixel residual. The image is almost perfectly flat — the only visible structure is at the very brightest stars, where different sigma-clipping decisions affect a handful of pixels.
Colour scale spans roughly ±3 ADU. The median absolute difference across all pixels is just 0.4 ADU — entirely explained by the integer rounding when saving intermediate FITS files.
Star Quality Distributions
Star sharpness (FWHM) distributions overlap almost perfectly. The +1.9% broadening in the stack-of-stacks comes from one extra interpolation pass during the second-tier alignment.
Signal-to-noise distributions are essentially identical, confirming that pre-stacking preserves the full depth of the data.
Why Pre-Stacking Doesn't Lose Quality
For a pure mean combination (no outlier rejection), stacking in two tiers is mathematically identical to stacking in one pass:
mean(mean(chunk1), …, mean(chunkK)) = mean(all M frames)
The noise reduction factor is √M regardless of whether you compute it in one step or two. You don't add noise between stages — you divide it at each stage, and the total reduction is the same.
The small differences that do arise come from three sources:
- Sigma clipping granularity. The second-tier combination has only K = 8 data points per pixel (one per chunk), giving slightly different outlier rejection than the K = 520 points available in a direct stack. In practice this made the stack-of-stacks cleaner, not noisier.
- Double interpolation. Two rounds of alignment each resample the image, adding a tiny amount of PSF broadening (+1.9% FWHM). Invisible in real images.
- Integer quantisation. Intermediate stacks are saved as 16-bit integers, rounding fractional ADU values. This adds ~0.3 ADU of noise per intermediate, which shrinks to ~0.1 ADU after combining eight chunks — negligible compared to the ~1.5 ADU background noise.
Test Details
| Target | M16 (Eagle Nebula) |
|---|---|
| Frames | 520 × 10 s, LP filter, Seestar S50 |
| Session | 2025-08-01, 01:00–03:00 UTC (~2 hours) |
| Blocks | 8 × 15-minute chunks (45–69 frames each) |
| Stacking method | Sigma-clipped mean (σ = 3.0), astroalign registration |
| Direct stack | Two-pass streaming (Welford’s algorithm), single reference frame |
| Stack-of-stacks | FrameCollection per block → astroalign Tier-2 combine |
| Alignment offset | 34.1 px shift, 0.071° rotation between the two results |