Svenesis ImageMono Train
Version 1.4.0 – GPL-3.0-or-later
🚧 Current version 1.4.0. Not yet in the official Siril Script Repository – download directly from GitHub.
ImageMono Train processes an entire night of mono camera and filter wheel data in a single run: it reads every FITS header, groups the lights by filter, calibrates and stacks each channel separately, aligns the finished masters pixel for pixel, and composes them into a colour-calibrated image – without a single Siril command typed by hand.
📖 The story behind it, and what I learned about mono processing along the way: Seven Filters, One Button →
Who is this for?
For mono rigs with a filter wheel – cameras without a Bayer matrix, where colour comes from separately captured filter channels. Frames are never debayered; the entire pipeline is monochrome. It is therefore deliberately not suited to one-shot-colour cameras.
Supported palettes
- LRGB – natural colour with separate luminance
- RGB – red, green, blue without luminance
- SHO – Hubble palette (SII → R, Ha → G, OIII → B)
- HOO – narrowband with just two filters (Ha → R, OIII → G/B)
- HaRGB – standard RGB with Ha blended into the red
The Auto setting proposes a palette whose three channels are actually present.
Rejection based on usable frames
The rejection algorithm is chosen per filter – based on the frames that are actually integrated, not the ones that were captured. A channel that lost half its frames to clouds is treated accordingly:
- ≤ 4 frames – percentile clipping 0.2/0.1 (sigma methods need a population)
- 5–20 frames – Winsorized sigma 3/3, the workhorse for a normal night
- 21–49 frames – linear fit 3/3, copes with gradients across the stack
- ≥ 50 frames – GESDT 0.3/0.05 for large stacks
Calibration
All of it optional and additive: session flats per filter, darks and bias from a reusable library folder. Masters are matched via the FITS headers – exposure time, gain, binning and dimensions exactly, temperature within ±2 °C. A master that doesn't match is named and skipped rather than force-applied. Cosmetic correction removes hot and cold pixels on request.
Cross-filter alignment
Hours pass between the Ha stack and the OIII stack, and in that time the field has drifted and rotated slightly. That's why all masters are registered together once more and projected onto their common overlap using -framing=min – only then do they share a pixel grid and the composite stays free of colour fringes.
Spectrophotometric colour calibration
Instead of generic PCC, the script uses SPCC with your sensor's quantum efficiency and the actual filter passbands. For narrowband it computes from the emission lines – Ha 656.3 nm, OIII 500.7 nm, SII 671.6 nm – along with the bandwidth you entered. The sensor name is verified before the run: a common pitfall is that the IMX533, for instance, appears in Siril's tables only as the OSC variant, while the mono chip is listed under Sony IMX411/455/461/533/571.
Reports that gloss over nothing
Every run writes two Markdown files into the output folder. output.md records what actually happened – which channel got which algorithm, which calibration applied, what was skipped and why. todo.md describes the hand-work that follows, with the specific menu paths in Siril. Both describe the real run rather than the normal case: skipped filters, fallbacks and discarded frames are named explicitly.
View sample report View sample guide
Reusing masters
The aligned masters stay in the masters/ folder. That lets you recompose a different palette in seconds without stacking again. If the masters sit on different grids – after a run that only built the filters of one palette, for example – the script refuses to mix them rather than producing a broken image.
Further features
- Multiple nights are pooled automatically when they sit under one target folder
- Supports
.fit,.fits,.ftsand Rice-compressed.fzvariants - Quality filters by FWHM, roundness, star count and background – deliberately active only from 20 frames upwards
- Weighting by sharpness, noise or star count
- Optional rejection maps for quality control
- Output stays linear – with a stretched preview on request
Requirements
Siril 1.4+ with Python support, sirilpy, PyQt6, astropy, numpy – dependencies are installed automatically on first launch. Colour calibration needs an internet connection or a local Gaia catalogue; without either, the composite is still produced, just uncalibrated.
⚠️ Don't work inside cloud folders. Siril links the frames via symlinks. Dropbox, OneDrive, iCloud Drive and Google Drive rewrite those mid-run, which can make files vanish between two commands. Either work on a local disk, or at least exclude output/_work/ from syncing.