📄 Original output of the script. The unedited output.md that Svenesis ImageMono Train wrote after processing the M 16 data – a record of what the script actually did.

Back to the article: Seven Filters, One Button  ·  deutsche Fassung

🌌 Svenesis ImageMono Train β€” Processing Report

This folder was produced automatically from your N.I.N.A. light frames. The script stacked each filter, aligned the channels, and combined them into a colour image. Every image here is still linear (not stretched) β€” the final, creative processing is up to you and is described in todo.md.


1 Β· What's in this folder

File / folderWhat it is
M_16_HOO.fitYour finished colour image β€” linear & calibrated. Start here.
masters/…_<FILTER>.fitPer-channel master, aligned to a common grid β€” use these to combine channels.
masters/…_<FILTER>_fullframe.fitThe same channel at full, uncropped size.
_work/All intermediate files. Safe to delete any time.
output.mdThis report β€” what the script did, step by step.
todo.mdStep-by-step guide for the final image processing.
qa/Rejection maps β€” which pixels the integration threw away.
⚠️ masters/ also holds aligned BLUE, GREEN, LUMINOS, RED from earlier runs. Each carries the grid of the run that wrote it, which need not be this one’s or each other’s β€” -framing=min crops to the intersection of whatever was aligned together, and every run aligns the set its palette asked for. Combining them with the channels above would mismatch. Re-run with Stack only the filters this palette uses switched off to put every channel back on one grid.

2 Β· The frames that went in

FilterFoundStackedIntegrationRejection used
BLUE6not stackedβ€”the HOO palette does not read this filter
GREEN6not stackedβ€”the HOO palette does not read this filter
HA6630m 00swinsorized 3/3
LUMINOS10not stackedβ€”the HOO palette does not read this filter
OIII6315m 00spercentile 0.2/0.1
RED6not stackedβ€”the HOO palette does not read this filter

Total: 40 light frames found across 6 filters β€” 45m 00s integrated.

The Stacked column is lower than Found where blank frames were dropped, registration could not align a sub (too few detectable stars β€” clouds or haze), or the quality filters removed frames. The rejection algorithm was chosen for that smaller number. Rows reading not stacked were skipped on purpose β€” see the note under 3.1.

3 Β· Exactly what the script did

3.1 Β· Building each channel master

For the 2 filters that were stacked (HA, OIII), the raw lights were turned into one master light:

  1. Filter selection β€” Stack only the filters this palette uses was on, so BLUE, GREEN, LUMINOS, RED were left unstacked. Besides the time saved, this keeps the cross-filter alignment reference among the channels that end up in the picture: Siril's two-pass registration picks that reference itself, from whatever masters are in the sequence, and a broadband one normally wins β€” which leaves the narrowband channels matching a spectrally unrelated frame. Re-run with the box off to build the missing masters for another palette.
  2. Staging & linking β€” the frames were linked into a Siril sequence (link). Compressed .fits.fz files are read directly, and nothing is ever debayered (this is a mono workflow). Blank / black frames were checked for; none were found.
  3. Registration β€” 2-pass global star alignment (register -2pass β†’ seqapplyreg). Siril picks the sharpest frame as the reference and aligns every other frame to it with sub-pixel accuracy.
    • Frame quality filters configured: weighted FWHM 90%, roundness 84%. They did not apply this run β€” no filter reached 20 frames, and on shorter sets losing a sub costs more signal-to-noise than the worst frame costs sharpness.
  4. Framing min β€” only the area covered by every frame is kept, so the master has no ragged, low-signal edges.
  5. Integration (stack):
    • Rejection is chosen automatically from each filter's frame count (see the table above) β€” percentile clipping for few frames, Winsorized sigma for more, linear-fit beyond that, and GESDT from 50 frames, where the test has enough data to outperform the rest. Sigma-based methods need a population to work, so few-frame channels use gentler percentile clipping.
    • Normalization: additive + scaling β€” matches the background level and brightness of every sub before averaging.
    • Weighting: Weighted FWHM (-weight=wfwhm) β€” sharpness scaled by the star count, so sharper subs contribute more.
    • Bit depth: 32-bit float, output-normalized.
  6. Background extraction (subsky, polynomial, degree 1) β€” the sky gradient was removed from each finished master while still linear (gradients differ per filter, so this works better per channel than once on the colour image).

β†’ saved as masters/<TARGET>_<FILTER>_fullframe.fit.

3.2 Β· Aligning the channels to each other

Each filter is stacked against its own reference, so the masters can sit on slightly different pixel grids β€” the colour channels wouldn't line up. To fix that, the 2 stacked masters were pooled and re-registered onto one common grid (seqapplyreg -framing=min), producing pixel-identical channels:

β†’ masters/<TARGET>_<FILTER>.fit (these feed the colour image).

The 2 masters this run produced were also plate-solved (a WCS / sky coordinate solution was written into each).

3.3 Β· Building the colour image (HOO)

Channel mapping: R = HA Β· G = OIII Β· B = OIII

Auto-finish (each step is resilient β€” a failure is logged and skipped, never fatal):

  1. Astrometry (WCS) was inherited from the plate-solved masters via rgbcomp β€” no new solve was needed.
  2. Extracted the background gradient (subsky, polynomial, degree 1).
  3. Colour calibration: SPCC (narrowband mode).
  4. Removed the green cast (SCNR).
  5. Saved the calibrated, still-LINEAR composite.

β†’ saved linear as M_16_HOO.fit.


4 Β· Important β€” this image is still linear

A linear image looks almost black: the faint galaxy / nebula signal sits just above the background. Colour calibration (SPCC) must run on linear data, which is why the script stops here. The next step β€” stretching β€” is creative and best done by eye.

πŸ‘‰ Open todo.md for a step-by-step guide.

5 Β· Good to know


Generated by Svenesis ImageMono Train v1.4.0.

© 2026 Sven Ramuschkat – Svenesis.org