Background Extraction
Model and remove unwanted large-scale background variation while preserving faint astronomical signal that occupies the same image.
schema 1 · revision 4Recognize it
- Representative empty-sky regions differ systematically across the linear image.
- Light pollution or moonlight produces an additive slope, dome, or color-dependent wash.
- Residual vignetting produces a multiplicative center-to-edge brightness pattern after calibration.
Intended output
A still-linear image with a more spatially uniform sky and a saved or inspected background model that contains the unwanted gradient but not the target.
Required input state
- Linear, unstretched data with registration borders and low-coverage edges cropped away.
- Representative sky regions identified away from stars, target structure, and stacking artifacts.
- Before-operation corner/region statistics and the intended correction mode recorded.
What NOVA does
NOVA's ontology exposes seven selectable background-extraction variants; M66's recorded run used GraXpert AI subtraction (smoothing 0.50). The other six are real, code-confirmed alternatives NOVA can select but did not use for M66: GraXpert division (vignetting), PixInsight's native GradientCorrection, and three SASpro ADBE presets (default, cubic, polynomial-only). A 'none' baseline is also selectable. Do not present the M66-selected path as the only one NOVA runs.
GraXpert walkthrough
Load
Load the linear stacked image. It will look nearly black; the stretch dropdown changes only the display, not the pixels. On uncalibrated SeeStar M81 data, Channels linked made the preview green (one pixel read green about four times red). Unticking it changes the display only.
Sources: graxpert-ep15-script, graxpert-ep15-captureModel
Set Interpolation to AI. A trained model estimates the smooth background from the whole frame without hand-placed samples. GraXpert downloads the model on first use.
Sources: graxpert-ep15-script, graxpert-ep15-captureCorrection
Choose Subtraction for additive light such as light pollution or moonlight; this is NOVA's default. Use Division only for multiplicative effects such as vignetting, which flats should fix first. Smoothing runs from 0.0 (aggressive; can follow real structure) to 1.0 (gentle; can leave a gradient). NOVA starts at 0.5, a starting value rather than a proven best.
Sources: graxpert-ep15-script, graxpert-ep15-capture, nova-background-sourceInspect
Switch the view to Background. The model should be smooth and contain no target shape. For M45's reflection dust, look for a cluster or dust shape in the model before accepting the correction.
Sources: graxpert-ep15-script, graxpert-ep15-captureMeasure
Measure before and after. Skip background extraction entirely when a frame-filling nebula or dust field leaves no clean sky. In NGC 7000 run 20260906_175646_seestar_nebula, GraXpert was tried and measured but not kept. On the 0–10 gradient scale, M1 Crab improved from 9.3 to 9.75 and M27 from 7.0 to 9.37 in their recorded runs.
Sources: graxpert-ep15-script, ngc7000-background-run-20260906, m1-background-run-20260722, m27-background-run-20260911-044756
Recorded session: GraXpert 3.0.2 “Umbriel”; background AI model 1.0.1. Sources: graxpert-ep15-script, graxpert-ep15-capture
Use when
- Empty-sky measurements show a coherent large-scale spatial trend.
- The modeled background can be separated from the target without absorbing real extended signal.
Skip when
- The apparent gradient is actually uncropped stacking overlap, calibration failure, or target structure filling the field.
- No representative sky region or defensible model can be established.
- A prior extraction already produced uniform sky and a clean background model.
Limits
- Background extraction cannot replace correct flat-field calibration; Siril specifically recommends a master flat for vignetting.
- A flatter background metric does not prove that faint galaxy halo or nebulosity survived.
- Subtraction is appropriate for additive gradients; division is reserved for genuinely multiplicative effects.
- Background neutralization is a later channel-balance decision, not another name for spatial gradient removal.
- Smoothing scales are not comparable across engines: GraXpert's smoothing runs 0.0 (aggressive) to 1.0 (gentle); PixInsight's native DynamicBackgroundExtraction smoothing is a different, larger-range control (NOVA's own DBE call uses 5.0). Copying a GraXpert number into DBE's field is not a translation.
- NOVA's background-extraction call to GraXpert does not pass an AI model-version flag, unlike NOVA's separate GraXpert denoise call, which does. The installed GraXpert CLI is confirmed 3.0.2, but the exact AI model identity used for background extraction is not independently pinned by that fact alone.
- The SASpro ADBE wrapper discards the background model that `abe_run` can return and clips its output to [0, 1]. "The evidence artifact is the model as well as the corrected image" therefore does not hold for the ADBE path today: there is no saved model to inspect for that route.
Scientific and aesthetic notes
- The evidence artifact is the model as well as the corrected image: a plausible-looking result can still be overfit.
- Large nebulae and galaxy halos are the adversarial case because real signal can resemble a smooth background trend.
- M66 validates one GraXpert subtraction configuration, not a universal smoothing value or model choice.
- The project's own history is a warning here: an earlier version of this guidance pointed at PixInsight DynamicBackgroundExtraction/GradientCorrection as the reference path before Jeff's hands-on M66 verification established GraXpert as what NOVA actually runs. DBE and GradientCorrection are real, code-confirmed NOVA alternatives, not fabricated -- they were simply never M66's selected path, and an earlier draft implied they were without checking.
- DBE has no Experiment Mode candidate id in the current ontology -- unlike GradientCorrection (`pi_gc`), it is executable only through a direct call, not through NOVA's automated candidate dispatch. Do not describe DBE as "selectable" the way the ontology's seven registered candidates are.
- There is no established universal best extractor. An Experiment comparison across engines (GraXpert, PixInsight native, SASpro ADBE, no correction) is a method comparison; varying smoothing, degree, or sample count within one engine is a parameter comparison. Treat these as different questions and do not average their evidence together.
Evidence and measurements
Cross-tool matrix
| Tool | Equivalence | Expected result | Evidence |
|---|---|---|---|
| nova | Exact replay | The large-scale sky trend decreases while target structure is absent from the background model. | nova-background-source, nova-m66-run-1.24.7 |
| pixinsight | Same engine, adapted host | The M66-style additive gradient is reduced without the target appearing in the model. | m66-manual-verification |
| pixinsight | Exact replay | A multiplicative vignetting pattern flattens without a smooth subtraction-style residual. | nova-background-source |
| pixinsight | Functional alternative | A modeled background comparable in intent to GraXpert's, produced by PixInsight's own classical algorithm rather than GraXpert's AI model. | nova-background-source |
| pixinsight | Functional alternative | A modeled/corrected background using PixInsight's modern classical gradient-removal process. | nova-background-source |
| siril | Same engine, adapted host | Matches the PixInsight/NOVA GraXpert result closely; same engine, different host. | m66-manual-verification |
| siril | Functional alternative | Representative sky regions converge and the background model contains no target imprint. | siril-background-1.4.4 |
| saspro | Functional alternative | The spatial gradient decreases without subtracting extended target signal. Fastest of the three ADBE presets. No background model is saved for inspection -- the wrapper discards it -- so acceptance relies on the corrected image and difference inspection alone. | saspro-source-1.18.0, saspro-synthetic-2026-08-14 |
| saspro | Functional alternative | A more flexible background model that still excludes target structure; more prone to overfitting than the default preset. | saspro-source-1.18.0 |
| saspro | Functional alternative | A gentler, faster correction than the RBF-enabled presets; less able to follow irregular gradients. | saspro-source-1.18.0 |
NOVA Python pipeline 1.24.7
- Crop invalid borders before evaluating the gradient.
- Select subtraction for an additive gradient and division only with evidence of a multiplicative residual.
- Save or inspect the modeled background and compare representative sky statistics before accepting.
Controls and starting ranges
- M66 recorded path
- graxpert_sub -- GraXpert AI subtraction, smoothing 0.50, model 1.0.1
- other selectable variants
- graxpert_div, pi_gc (PixInsight GradientCorrection), adbe_default, adbe_cubic, adbe_poly_only, none
Mask behavior: Model protection is engine-specific; acceptance still requires model inspection and target-region comparison.
Failure modes
- The model reproduces the galaxy halo, nebula, or dense stellar structure.
- Uncropped borders bias the fit.
- A division correction is used to hide missing or incorrect flats.
- Presenting the M66-recorded variant as NOVA's only background-extraction behavior.
Recovery
- Revert to the unchanged linear input, correct the crop or calibration, and rerun with a simpler or better-protected model.
GraXpert AI (Subtraction) via PixInsight M66 validation environment; exact version not recorded
- Use the verified GraXpert route on the cropped linear image.
- Choose Subtraction for an additive gradient (light pollution, moonlight) and inspect the generated model before accepting.
- Record the installed GraXpert process/model version, smoothing, correction mode, and before/after statistics.
Controls and starting ranges
- M66 correction
- Subtraction
- M66 smoothing
- 0.50 (GraXpert's own 0.0-1.0 scale)
- generic range
- none established beyond M66; tune from the image and model
Mask behavior: Use host/process structure protection where available; exact mask behavior was not established by the M66 recording.
Failure modes
- Treating the M66 smoothing value as universal.
- Accepting a clean-looking image without inspecting the extracted background.
Recovery
- Undo, simplify or protect the model, and repeat from the original linear image.
GraXpert AI (Division) via PixInsight not independently confirmed in this repo
- Use only when a residual center-to-edge brightness pattern is genuinely multiplicative (vignetting), not an additive light-pollution slope.
- Same route as the Subtraction variant, with Division selected instead.
- Prefer fixing the flat-field calibration first; Division here is a correction, not a substitute for a missing or wrong master flat.
Controls and starting ranges
- correction
- Division; smoothing 0.5 is NOVA's code default, not M66-recorded
Mask behavior: Same as the Subtraction variant; not independently characterized.
Failure modes
- Using Division to mask a missing or incorrect master flat instead of fixing calibration.
Recovery
- Revert and re-derive/apply a correct master flat before repeating.
Native DynamicBackgroundExtraction (DBE) not independently confirmed in this repo
- A real, code-confirmed NOVA alternative to GraXpert, not the M66-recorded path and not an Experiment Mode candidate -- run it directly in PixInsight on the linear image if you specifically want this route.
- Set the correction mode (Subtraction or Division) to match the gradient type.
- Compare against a GraXpert result on the same image before treating DBE as equivalent.
Controls and starting ranges
- smoothing
- 5.0 (NOVA's code default) -- DBE's own scale, not comparable to GraXpert's 0.0-1.0
- useRollingPenaltyTerm
- enabled
- correction
- subtraction or division, matching the gradient type
Mask behavior: DBE supports manual sample-point placement in PixInsight's UI; not exercised through NOVA's automated call.
Failure modes
- Assuming DBE and GraXpert produce the same model because both are called 'background extraction'.
Recovery
- Undo and fall back to the M66-verified GraXpert route.
Native GradientCorrection not independently confirmed in this repo
- A real, selectable NOVA alternative to GraXpert, not the M66-recorded path.
- Run PixInsight's GradientCorrection process on the linear image with its own default settings -- NOVA's call exposes no tunable parameters for this process.
- Compare against a GraXpert result on the same image before treating GradientCorrection as equivalent.
Controls and starting ranges
- parameters
- none exposed by NOVA; PixInsight's own process defaults apply
Mask behavior: Not exposed through NOVA's automated call.
Failure modes
- Assuming this and GraXpert are interchangeable because both target the same symptom.
Recovery
- Undo and fall back to the M66-verified GraXpert route.
GraXpert AI via Siril's Python integration Siril interface v2.1.0, GraXpert model 1.0.1, verified in Siril 1.4.4
- Open Scripts > Python Scripts > Processing > GraXpert AI on the cropped linear image.
- Use Subtraction for the demonstrated additive gradient; leave Keep Background off.
- Record the GraXpert interface/model version shown, since it is not bundled with stock Siril.
Controls and starting ranges
- M66 verified
- Background Extraction operation, model 1.0.1, smoothing 0.50, Subtraction, Keep Background off, batch size 4, GPU acceleration enabled when available
Mask behavior: Model-driven, same as the PixInsight GraXpert route; not independently characterized beyond that.
Failure modes
- Treating this as a stock Siril feature -- it is a separate Python integration.
Recovery
- Undo and re-run with adjusted smoothing, or fall back to native Background Extraction.
Native Background Extraction (RBF/polynomial) 1.4.4
- Open Image Processing > Background Extraction on the linear image.
- Set samples per line to about 20 and raise Tolerance so samples land off nebulosity and stars.
- Use RBF for busy, irregular gradients; use a low-degree polynomial (degree 4 is a ceiling, not a starting point) only for a simple, smooth trend.
- Choose Subtraction for additive gradients; inspect the generated model before accepting.
Controls and starting ranges
- RBF smoothing
- 0.50 vendor starting point; adjust from the model
- polynomial degree
- low degree for a simple trend; 4 is a documented maximum, not a default
- correction
- Subtraction for light pollution; Division reserved for genuine vignetting
Mask behavior: Manual sample placement can exclude target regions.
Failure modes
- Samples land on nebulosity or the galaxy halo.
- A high polynomial degree overcorrects the image.
- Division is used for vignetting that should have been corrected by a master flat.
Recovery
- Restore the original image, revise samples/model complexity, or repair calibration before retrying.
ADBE default (polynomial degree 2 + RBF) 1.18.0 source-inspected; ADBE execution tested on a synthetic linear array; historical/version-bound evidence. As of this writing the official SASpro site labels its release 1.20.x, while package distribution has already moved past that label -- this evidence should not be read as describing the current public release.
- Run ADBE on the cropped linear image with the default preset.
- Inspect the background model and compare representative sky regions and target structure.
- Record which preset was used because this is a functional alternative, not a replay of GraXpert AI.
Controls and starting ranges
- degree
- 2 (quadratic) -- typical for ordinary SeeStar gradients
- num_samples
- 100 auto-placed background sample points
- use_rbf
- true -- RBF refinement after the polynomial stage
- rbf_smooth
- 0.1 (0.01 very tight to 1.0 very smooth)
Mask behavior: Tool-specific protection was not independently characterized; rely on model and difference inspection.
Failure modes
- Assuming ADBE and GraXpert produce equivalent models because both flatten backgrounds.
Recovery
- Revert to the original linear input and try adbe_poly_only for a gentler pass, or use the verified GraXpert path.
ADBE cubic (polynomial degree 3 + RBF) 1.18.0 source-inspected; historical/version-bound evidence. As of this writing the official SASpro site labels its release 1.20.x, while package distribution has already moved past that label -- this evidence should not be read as describing the current public release.
- Use in place of the default preset only when the gradient is visibly more complex than a simple quadratic trend -- a busier or multi-directional gradient.
- Inspect the background model for overfitting; a higher-degree polynomial can start absorbing real structure.
- Compare against the default preset's model on the same image before preferring this one.
Controls and starting ranges
- degree
- 3 (cubic) -- more flexible for complex gradients
- num_samples
- 120
- use_rbf
- true
- rbf_smooth
- 0.15
Mask behavior: Not independently characterized.
Failure modes
- The higher-degree polynomial fits real extended structure as if it were background.
Recovery
- Revert to the linear input and use the default or poly-only preset instead.
ADBE polynomial-only (degree 2, no RBF) 1.18.0 source-inspected; historical/version-bound evidence. As of this writing the official SASpro site labels its release 1.20.x, while package distribution has already moved past that label -- this evidence should not be read as describing the current public release.
- Use for a faster, gentler pass when the gradient is simple and RBF refinement risks pulling in faint extended signal.
- Inspect the background model the same way as the other presets.
Controls and starting ranges
- degree
- 2
- num_samples
- 100
- use_rbf
- false -- no RBF refinement stage
- rbf_smooth
- 0.1 (unused with RBF disabled)
Mask behavior: Not independently characterized.
Failure modes
- Using this preset on a genuinely irregular gradient that needs RBF's local flexibility.
Recovery
- Revert and switch to the default or cubic preset for a more flexible model.
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 background-extraction implementations (GraXpert, ADBE, native PixInsight DBE/GradientCorrection) and ontology
nas_server/seti_astro.py:934 (GraXpert background_extract), nas_server/seti_astro.py:457 (ADBE); nas_server/pixinsight.py:188-190 (dbe/dbe_correction/gradient_correction params); nas_server/pi_postprocess.js:361-395 (DynamicBackgroundExtraction and GradientCorrection PJSR calls); nas_server/processing_ontology.json:354 (experiment_variants: graxpert_sub, graxpert_div, pi_gc, adbe_default, adbe_cubic, adbe_poly_only, none)— NOVA source-confirmed - M66 workflow 1.24.7 execution record
critiques/20260802_045251_seestar_galaxy.json— NOVA execution record - Siril 1.4.4 background extraction documentation — Vendor-documented
- Siril 1.4.4 GraXpert interface documentation — Vendor-documented
- 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 - SASpro 1.18.0 synthetic-array operation checks
2026-08-14 local validation: pedestal, cosmetic correction, and ADBE— Tool-tested - EP15 GraXpert Handbook recorded-session script
docs/episodes/handbook_graxpert_episode.json @ 4af8ed0c47990e7aa585bed962826254757571f4— Artifact-confirmed - EP15 GraXpert screen capture log, recordings A and E
docs/episodes/handbook_graxpert_capture_log.md @ claude/graxpert-capture-e— Artifact-confirmed - M1 Crab background extraction run and claim ledger
docs/episodes/m1_crab_evidence.md; run 20260722_063635_seestar_broadband, step_records/background_extraction— NOVA execution record - M27 background extraction run (7.0 to 9.37)
run 20260911_044756_seestar_nebula, step_records/background_extraction— NOVA execution record - NGC 7000 background extraction run (skipped: no improvement)
run 20260906_175646_seestar_nebula, step_records/background_extraction— NOVA execution record
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.

