← Handbook

Linear 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. This is Linear Denoise specifically -- NOVA also runs a separate post-stretch noise_reduction pass later in the pipeline; that step changes the artifact and measurement problem (nonlinear data, different noise character) and is not yet its own published Handbook article. Do not treat guidance here as covering both.

schema 1 · revision 2

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. In Experiment Mode, production workflows can compare the declared alternatives, including the 'nxt' variant -- RC-Astro's NoiseXTerminator, dispatched to a RunPod GPU endpoint with a local-CLI fallback. The quick_default workflow remains pinned for speed, and public_free_core remains pinned to free/headless Cosmic Clarity. M66's recorded run used the PixInsight NXT path in effect at the time; NOVA no longer routes NXT through that path, and RC-Astro CLI/GPU is NOVA's current route. NXT's internal nxt_iterations setting and NOVA's separate nxt_two_pass flag (a full second dispatch of the tool, matching PixInsight's own 'run NXT twice' variant) are different factors and are not interchangeable ways of expressing the same strength. Output orientation is independently verified before acceptance; a result that cannot be confirmed is discarded and the step fails, since this path has no fallback engine to fall through to. 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.
  • Identical-looking numeric strength values are not commensurate across engines or even across Cosmic Clarity's own ontology/wrapper/candidate surfaces -- compare the effective executed settings, never candidate labels or matching numbers, before concluding two runs used 'the same' denoise amount.
  • NOVA's NXT path has no Cosmic Clarity fallback: if the RunPod GPU endpoint and the local RC-Astro CLI both fail, or output orientation cannot be verified as trustworthy, the step fails outright rather than silently substituting a different engine's result. A workflow that selected NXT is expected to fail honestly, not quietly become a Cosmic Clarity run.
  • nxt_detail is accepted by the ontology/parameter surface but has no direct RC-Astro CLI equivalent and is not mapped to anything -- requesting it does not make it an effective parameter.

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.
  • A fair comparison between denoise candidates requires the same linear parent image and state, the same region of interest and support, the actually-executed tool/model/settings recorded (not the requested ones), and an identical downstream stretch when judging results visually -- an unequal stretch can make a genuinely worse denoise look better.
  • A strong candidate should be checked against a no-op/unchanged-input baseline before being called an improvement, not only ranked against other denoise settings.
  • Background RMS and NOVA's own SNR-like proxy can both reward over-smoothing; entropy or high-frequency power can reward leftover noise. None of these alone is a denoise-quality oracle -- pair them with the faint-structure preservation check.

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
pixinsightSame engine, adapted hostLower 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 -- a manual cross-tool path, not NOVA's current execution route (NOVA dispatches NXT through RC-Astro CLI/GPU; it no longer routes NXT through the PixInsight run_postprocess(nxt=True) path it once used).
  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.