📄 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
- Target: M 16
- Generated: 2026-07-25 17:16
- Script version: 1.4.0
- Preset: Custom
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 / folder | What it is |
|---|---|
M_16_HOO.fit | Your finished colour image β linear & calibrated. Start here. |
masters/β¦_<FILTER>.fit | Per-channel master, aligned to a common grid β use these to combine channels. |
masters/β¦_<FILTER>_fullframe.fit | The same channel at full, uncropped size. |
_work/ | All intermediate files. Safe to delete any time. |
output.md | This report β what the script did, step by step. |
todo.md | Step-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=mincrops 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
| Filter | Found | Stacked | Integration | Rejection used |
|---|---|---|---|---|
| BLUE | 6 | not stacked | β | the HOO palette does not read this filter |
| GREEN | 6 | not stacked | β | the HOO palette does not read this filter |
| HA | 6 | 6 | 30m 00s | winsorized 3/3 |
| LUMINOS | 10 | not stacked | β | the HOO palette does not read this filter |
| OIII | 6 | 3 | 15m 00s | percentile 0.2/0.1 |
| RED | 6 | not 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:
- 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.
- Staging & linking β the frames were linked into a Siril sequence (
link). Compressed.fits.fzfiles are read directly, and nothing is ever debayered (this is a mono workflow). Blank / black frames were checked for; none were found. - 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.
- Framing
minβ only the area covered by every frame is kept, so the master has no ragged, low-signal edges. - 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.
- 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
- Normalized the channels to the Ha reference (
linear_match) first, so the strong Ha doesn't dominate and turn the result green.- β οΈ SPCC also calibrated this image. The two overlap: normalisation flattens the line ratio on purpose, and SPCC's narrowband mode calibrates that very ratio against catalogue spectra. Switch Normalize narrowband channels off to let SPCC work on the physical ratio.
- Combined the channels with
rgbcomp.
Auto-finish (each step is resilient β a failure is logged and skipped, never fatal):
- Astrometry (WCS) was inherited from the plate-solved masters via rgbcomp β no new solve was needed.
- Extracted the background gradient (subsky, polynomial, degree 1).
- Colour calibration: SPCC (narrowband mode).
- Removed the green cast (SCNR).
- 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
- No calibration frames (darks / flats / bias) were used. Without flats you may see some vignetting and dust shadows β shoot flats for each filter and re-run for the cleanest result.
- Keep the linear masters in
masters/; you can redo the processing from any step without re-stacking.
Generated by Svenesis ImageMono Train v1.4.0.
© 2026 Sven Ramuschkat – Svenesis.org