Denoise
Reduce photon and read noise on linear data before stretch amplifies it, without erasing the faint real structure that lives in the same tonal range as the noise.
schema 1 · revision 1Recognize it
- Visible luminance and chromatic grain, worse in shadow regions.
- Noise that will become much more visible once the image is stretched.
Intended output
A still-linear image with measurably lower noise and faint structure -- dust lanes, faint arms, extended nebulosity -- still visible.
Required input state
- Linear, unstretched data, after deconvolution.
What NOVA does
NOVA's ontology default is Cosmic Clarity denoise (CLI or in-process) on luma/color amounts. Individual workflows can select the 'nxt' variant instead -- RC-Astro's NoiseXTerminator, dispatched to a RunPod GPU endpoint with a local-CLI fallback as of 2026-08-18 (previously routed through PixInsight's run_postprocess(nxt=True)) -- and M66's seestar_galaxy workflow selected it, via the PixInsight path in effect at the time. The exact denoise_linear parameters were not serialized in M66's own run record; the ontology's code defaults are the traceable source.
Use when
- Linear noise is visibly present before stretch, and a representative faint-structure region can be checked for over-smoothing.
Skip when
- The signal is already integration-limited and denoise would erase faint structure rather than noise.
- A separate post-stretch denoise pass is already planned; running both risks double-smoothing.
Limits
- Denoise is not free: it can inflate star FWHM slightly, which is exactly why NOVA runs star correction immediately after it on dense fields.
- Aggressive denoise on faint, noise-limited signal erases real structure rather than noise; there is no setting that distinguishes them perfectly.
- A learned/AI denoiser (Cosmic Clarity, NoiseXTerminator) is not a classical wavelet or NL-Bayes denoiser; they fail differently and are not interchangeable by amount alone.
Scientific and aesthetic notes
- Which engine NOVA uses (Cosmic Clarity vs NoiseXTerminator) is a workflow choice, not a universal default -- do not present one as 'the' NOVA denoise without naming the workflow.
- Denoise-induced star FWHM inflation is the documented reason star correction exists as its own downstream family; judge denoise partly by what star correction has to fix afterward.
Evidence and measurements
Cross-tool matrix
| Tool | Equivalence | Expected result | Evidence |
|---|---|---|---|
| nova | Exact replay | Measurably lower noise with faint structure and star cores intact. | nova-denoise-source, nova-m66-run-1.24.7 |
| pixinsight | Exact replay | Lower noise with faint structure and star cores preserved. | nova-denoise-source |
| siril | Same engine, adapted host | Matches the PixInsight/NOVA NXT result closely when the RC Astro wrapper is used; the native path is a different algorithm. | m66-manual-verification |
| saspro | Algorithmically equivalent | Smoother chromatic and luminance noise without smeared dust lanes, erased faint arms, or waxy galaxy structure. | saspro-source-1.18.0, m66-manual-verification |
NOVA Python pipeline workflow 1.24.7
- Run on linear data after deconvolution.
- Confirm which variant the active workflow selects (Cosmic Clarity default, or the 'nxt' PixInsight NoiseXTerminator variant M66's seestar_galaxy workflow used).
- Check a representative faint-structure region before and after, not only the sky.
Controls and starting ranges
- Cosmic Clarity default
- denoise_luma 0.5, denoise_color 0.7 (ontology default)
- nxt variant (M66's workflow)
- nxt_denoise 0.7, nxt_iterations 2 -- code-recovered default, not serialized in this run
Mask behavior: No explicit mask; protection is amount-driven.
Failure modes
- Faint arms or dust lanes soften or disappear along with the noise.
- Star FWHM inflates more than star correction can cleanly reverse.
Recovery
- Revert to the pre-denoise linear image and reduce the amount or switch engine variant.
PixInsight NoiseXTerminator Core 1.9.3 Lockhart host; NoiseXTerminator version not independently confirmed in this repo
- Run NoiseXTerminator directly on the linear image.
- Start from the pipeline's own recorded default rather than the tool's own dialog default.
- Compare a representative faint-structure region before and after at native scale.
Controls and starting ranges
- NOVA's nxt default
- nxt_denoise 0.70, nxt_iterations 2
Mask behavior: Not applicable; full-image operation.
Failure modes
- Accepting the tool's own higher default dialog value without checking against NOVA's recorded default.
Recovery
- Undo and re-run at a lower denoise amount or fewer iterations.
Siril via RC-Astro > NoiseXTerminator.py (licensed external integration) RC Astro NoiseXTerminator wrapper model Latest v3, verified in Siril 1.4.4
- Open Scripts > Python Scripts > RC-Astro > NoiseXTerminator.py on the linear image.
- Do not accept the wrapper's initial dialog value without checking it against a representative faint-structure region -- the demonstrated M66 run changed it before applying.
- For a no-extra-cost native alternative, use Siril's own Denoise (Anscombe VST + NL-Bayes) instead; it is a functional alternative, not the same engine.
Controls and starting ranges
- M66 verified (applied, not the initial dialog value)
- Denoise 0.70; 2 iterations; Intensity/Color Separation off; Frequency Separation off; Tile Overlap 0.20
- native Siril Denoise
- Anscombe VST + NL-Bayes, modulation 1.0, cosmetic correction off
Mask behavior: Not demonstrated; full-image operation.
Failure modes
- Applying the wrapper's initial higher default instead of a checked value.
Recovery
- Revert to the pre-denoise image and re-run at a lower amount or with the native path.
Seti Astro Suite Pro Cosmic Clarity Denoise 1.18.0 source-inspected; Cosmic Clarity Denoise demonstrated at version 1.19.11
- Run Cosmic Clarity Denoise in full mode on the linear image.
- Confirm an output was actually produced -- the demonstrated run required a GPU-device-loss retry before completing.
- Compare a representative faint-structure region 1:1 before and after.
Controls and starting ranges
- M66 demonstrated
- luminance 0.50, color 0.50, mode full, model Standard, temporary linear-assist stretch 0.25, chunk size 256, overlap 64
Mask behavior: Not demonstrated; full-image operation.
Failure modes
- A silent GPU failure that produces no output -- confirm the file was written.
- Over-smoothing that gives a waxy, plastic look to galaxy structure.
Recovery
- Revert to the linear input and reduce luminance/color strength.
Validation status
Not yet Jeff-validated. Use this as sourced guidance, not a certification.
Sources
- M66 manual recipe verification feedback
M66_Manual_Recipe_Verification_Feedback.md— Jeff validated - NOVA Cosmic Clarity / NoiseXTerminator denoise implementations, variants, and ontology
nas_server/seti_astro.py:1559; nas_server/pixinsight.py:217-219; nas_server/experiments.py:239-243 (denoise_nxt variant dispatch -- reads nxt_denoise/nxt_iterations only, not the ontology's nxt_detail field); nas_server/processing_ontology.json:791— NOVA source-confirmed - M66 workflow 1.24.7 execution record
critiques/20260802_045251_seestar_galaxy.json— NOVA execution record - Installed Seti Astro Suite Pro 1.18.0 processing source
saspro/pedestal.py; saspro/numba_utils.py; saspro/stacking_suite.py; saspro/abe.py; saspro/sssc.py— Artifact-confirmed
Related evidence
The M66 recipe and Jeff-validation ledger will link here when their static exports are available. Until then, this article remains explicitly unvalidated.

