← All Siril Scripts

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.

Svenesis ImageMono Train screenshot

📖 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

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:

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

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.

View on GitHub Full Instructions