← Handbook

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 1

Recognize it

Intended output

A still-linear image with measurably lower noise and faint structure -- dust lanes, faint arms, extended nebulosity -- still visible.

Required input state

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

after denoise before and afterbefore denoise before and after
beforeafter
denoise before and after

Cross-tool matrix

Tool EquivalenceExpected resultEvidence
novaExact replayMeasurably lower noise with faint structure and star cores intact.nova-denoise-source, nova-m66-run-1.24.7
pixinsightExact replayLower noise with faint structure and star cores preserved.nova-denoise-source
sirilSame engine, adapted hostMatches the PixInsight/NOVA NXT result closely when the RC Astro wrapper is used; the native path is a different algorithm.m66-manual-verification
sasproAlgorithmically equivalentSmoother 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

  1. Run on linear data after deconvolution.
  2. Confirm which variant the active workflow selects (Cosmic Clarity default, or the 'nxt' PixInsight NoiseXTerminator variant M66's seestar_galaxy workflow used).
  3. 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

  1. Run NoiseXTerminator directly on the linear image.
  2. Start from the pipeline's own recorded default rather than the tool's own dialog default.
  3. 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

  1. Open Scripts > Python Scripts > RC-Astro > NoiseXTerminator.py on the linear image.
  2. 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.
  3. 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

  1. Run Cosmic Clarity Denoise in full mode on the linear image.
  2. Confirm an output was actually produced -- the demonstrated run required a GPU-device-loss retry before completing.
  3. 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

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.