Star removal usually means a neural network deciding which pixels look like stars. I tried the opposite: put every Gaia star at its known position, draw it with the star shape measured from the same night, fit only how bright it is, and subtract it. The sky glow and the brightest stars' halos get their own models. What is left should be the gas, and that can be checked: against a 2.5 m survey telescope's Hα image, and against a second night.
Exploratory Both nights were used while developing the method. It has not yet been run unchanged on a night it has never seen.
Instead of erasing stars, the method models each part of the picture on its own and subtracts the parts that aren't nebula. Choose a layer to see it by itself, on the full frame.
The first version of this page used every sub, added up as they came. But the night was clear and steady for only the first 1.8 hours. Then cloud moved in and the stars dimmed by up to 0.91 mag, and the cloud wasn't gray: green lost about 20 % more than red and blue. Because the field turns on an alt-az mount, different parts of the frame were built from different mixes of clear and cloudy subs, so the nebula's brightness and color carried that mix.
So I measured each sub's transparency, color by color, from about 80 Gaia stars per sub with known spectra, scaled every sub to the clearest stretch of the night, and kept only the subs that lost less than 0.5 mag to cloud and had sharp stars. The rules were written down before the transparency was measured.
Star brightness scatter: each star's measured flux against what its Gaia XP spectrum predicts through this filter, before and after the correction. The new stack's numbers are in its own units, set by the clearest part of the night, so on the nebula they run about 1.26 times the first stack's. For display, every image on this page is scaled back to the first version's brightness, so the pictures are comparable; no number on the page is scaled.
A bright star's light doesn't stop at its core. Through this lens a broad halo, with a core radius of about 90 pixels, holds 7 to 18 % of it depending on color, and green and blue add a scattered-light wing. The first star model stopped at 60 pixels, so the brightest stars left a ring and a teal glow, and a G 3.1 star just outside the frame lit up the left edge.
The new model is physical: the lens's own diffraction core, the scattered-light wing and the broad halo, fitted jointly over the 53 brightest stars, with the saturated ones' brightness set from Gaia. Around 57 Cygni the green and blue excess at 40 to 120 pixels fell from +2.1 and +2.7 ADU to +0.3; the off-frame star's glow is gone; and the light red oval around 57 Cygni stays, because IPHAS shows it too. The saturated cores are filled: red from IPHAS, scaled to ours, where IPHAS covers them, and green and blue following red.
Because each star is subtracted rather than painted over, the filaments running behind it are kept. In a test where I planted fake stars on top of real nebula and took them out again, 98 to 99 % of the nebula's light under them came back. The right-hand sides here are also noise-reduced; the original sides are untouched.
After the stars and the sky glow, a noise-reduction pass takes out the grain. It is a wavelet method: the image is split into detail scales from 1 to 32 pixels, and each detail is kept in proportion to how far it stands above the noise at that spot. Nothing is set by eye. The noise level comes from a null stack: the night split into two halves and subtracted, which cancels the sky and the nebula and leaves only noise. It is scaled pixel by pixel by how many subs covered that pixel, so the thin edges get a higher bar. The pass is deterministic: a second run gives a bit-identical result.
Rank correlation of the removed grain with IPHAS, on 16-pixel blocks (0.024 on 4-pixel blocks). At no scale does its variance exceed the null stack's, and it shows none of the nebula's structure.
Rank correlation with IPHAS on fine 4-pixel blocks, before and after. On 16-pixel blocks it barely moves: 0.9507 to 0.9521.
Flux kept for nine planted faint filaments (1 to 3 sigma, 1.2 to 3 px wide). Their peaks drop to 35 to 75 %: thin, faint filaments come out fainter and a little softer.
These checks were measured on the first version's stack; the same denoiser runs unchanged on the new one. There, the corners, where fewer subs overlap, ended up nearly as clean as the middle: run through the same pass, the null stack's red noise dropped to 0.21 to 0.26 ADU in the four corners and 0.20 ADU in the center.
The usual worry with faint nebula is whether a wisp is gas or a processing artifact. IPHAS mapped the northern Milky Way in Hα with the 2.5 m Isaac Newton Telescope. I projected its image into the Seestar's own pixel grid, so the two can be compared pixel for pixel. Drag to compare the Seestar's nebula layer, red channel only (1.5 hours through a 30 mm lens), with IPHAS.
Spearman rank correlation of the red channel with IPHAS on 16-pixel blocks, leaving out only pixels IPHAS doesn't cover. The first version scored 0.95 on the same basis.
Where 500 or more subs overlap and away from filled star cores, with IPHAS's own filled-in star holes and dark artifact blocks left out.
The crowded top of the frame (12-pixel blocks), with the stars in and with them out, measured on the first version's stack. Taking the stars out uncovered structure that IPHAS also sees.
A second survey, Pan-STARRS1 r, can referee only fine detail (up to 1 to 2 arcminutes; its sky subtraction flattens larger structure). At those scales IPHAS and Pan-STARRS agree with each other better than either agrees with this image, so the remaining fine-scale disagreement is mine, mostly noise. Two more caveats. The sky-glow model was fitted together with a scaled copy of IPHAS, to keep it from mistaking faint nebula for sky; what gets subtracted is only a smooth quadratic surface, so it can shift the large-scale gradient toward IPHAS but cannot put IPHAS's small-scale structure into the Seestar image. And a red channel is not Hα: it also holds [N II] emission and starlight.
Night 1 (18 September, 195 × 10 s, about 32 minutes) went through the same steps as the first version and was mapped onto night 2's pixels through both nights' plate solutions. The two overlap on 59 % of night 2's frame. This check was made on the first version's stacks and has not been redone on the cloud-corrected one.




Spearman rank correlations on the overlap, 12-pixel blocks, first-version stacks. The three Seestar panels share one stretch and are shown binned 3 × 3.
Only about 95 subs overlap along the top and bottom edges, against up to 531 in the middle. A faint bright fringe, about 1 to 2 ADU, survives there. It is not light fixed to the sensor and not the background fitting (both were tested), and part of it is light from the edges of the subs.
The filled cores of the brightest stars, 5.4 % of the frame's pixels in all, carry the right level and the pixel noise but not the texture around them. In crowded dark fields they read as slightly smooth disks. They are cosmetic, not measurements.
Stars fainter than G 17 are not modeled, and once the grain around them is gone they stand out as speckle, mostly in the star-crowded top band and the dark lanes; that is real starlight. Stars of G 10 to 12 still get their cores slightly over-subtracted, as I expected before rendering.
Star brightnesses improved a lot, but star colors didn't: their scatter against Gaia went from 9.8 % to 11.0 % in red against green. The cloud's color term looks over-corrected, or partly a measurement effect in the green pixels. A gentler color model didn't fix it either.
When a thin filament runs right through a star, the star's brightness fit absorbs part of it. Broad nebula under a star comes back almost whole (the 98 to 99 % above); thin structure that lines up with a star does not. Noise reduction also lowers the peaks of thin, faint filaments, while keeping their light.
Both NGC 7000 nights, and the M 33 night below, were used while the method was being developed, and the halo model's shape was fitted on this image. The agreement with IPHAS is real, but it isn't a test on fresh data. That is why this page is exploratory.
Tools like StarNet and StarXTerminator are one click, and today they handle bright stars, and anything that isn't in a star catalog, better than this does. What the catalog approach adds is different: it is deterministic, every star it removes is a catalog star at a known position, the light it takes out is accounted for star by star, and the result can be checked against an independent survey, as above. The two could also work together.
Post-processed for looks An example of what you could do with this data in your own software (Siril, PixInsight, Photoshop). Not a measurement.
Everything above is shown plainly, with one stretch, so it can be checked. Here is the same data processed the way an imager would for a picture: the noise-reduced starless nebula in an HOO palette with a careful stretch, and the real stars put back, smaller.
Cosmetic repair, for this picture only: small star-removal pits were filled up to the local median, never above it. The bright-star halos needed no cosmetic repair this time, because the halo model above already handled them. Apart from switching off the tool's own halo repair, the render settings are the same as in the first version; the layers were first scaled to the first version's brightness. No step paints, clones or uses a trained model, and the same input always gives the same output.
People often push this target much further: Foraxx dynamic palettes, synthetic SHO, CLAHE or HDR-style local contrast. I kept to a palette whose colors map to real emission lines (red is Hα, teal is [O III]) and to large-scale contrast only. Heavy local contrast on 1.5 hours of 30 mm data turns faint nebula into a cotton-ball texture that isn't in the sky.


The two heavier looks come from a separate editing pass on the first version's stack, with a slightly different framing. Neither is used anywhere else on this page.
On an alt-az mount like the Seestar's, the sky slowly rotates on the sensor through the night. Over one night of 291 subs on M 33 it turned 140°. Light that turns with the sky is real; light that stays put on the sensor, or changes from sub to sub, is not. One joint fit sorts the night into those layers.
The same subtract-what's-known idea is behind two other workbench results that will get their own write-ups. Legacy Survey images of the Leo Triplet, pushed through a model of the Seestar's optics, registered to the Seestar frames to 0.12 px and matched M 66's spiral-arm phase to 1.7°. And a frame-by-frame model of community M 31 frames shows Hubble's Cepheid V1 at 3.2 sigma at its catalog position; whether it can be seen pulsing is not confirmed.
The post-processed look is neither fixed nor measured: its palette, stretch, contrast and star settings are taste, chosen to look good on this frame, and none of its numbers should be read as a result.
No fresh data was looked at for this page. A confirmation needs a night, and ideally a camera, that the method has never seen, chosen and named before the check is run.
My data: a Seestar S30 Pro with its dual-band light-pollution filter on its alt-az mount. NGC 7000 on 18 and 19 September 2026 (195 and 752 subs of 10 s; 532 of the 752 in the final stack) and one night on M 33 (291 subs). Orientation: north up, tilted 33.4°; 3.66″ per pixel. Every comparison uses one stretch for both sides unless a caption says otherwise. Correlations are Spearman rank correlations on 12- or 16-pixel blocks.
Star positions, magnitudes and spectra: ESA Gaia DR3. Hα reference: IPHAS DR2, the INT Photometric Hα Survey of the Northern Galactic Plane, taken with the 2.5 m Isaac Newton Telescope on La Palma; I built the continuum-subtracted image and projected it into the Seestar frame. Second reference: Pan-STARRS1 r.