Removing moving straight trails before stacking
This compares neighbouring photographs before stacking, verifies each proposed line on the full-resolution original, repairs it from observed neighbouring sky, and then builds the stack once. A straight line alone cannot honestly identify an aircraft, satellite or meteor, so the receipt reports the measured track rather than inventing a class.
On this page

Chapters that open at each step, and the night’s facts: video guides.
What it looks like on a real frame
These three panels are one exposure from a public observatory sequence, put through this tool's own engine. Nothing is illustrated or redrawn: the outline is where the detector said the track was, and the third panel is the difference between the frame as recorded and the frame after repair.


Drag, or use the arrow keys. The two frames differ by 667 samples out of 129,600 in this crop, so the wipe is a fair test of how little a single frame changes — and the panels below are where that half per cent is visible.


Frames from the Yebes Observatory All Sky Gallery, 13 May 2021 — image property of Yebes Observatory, used with credit. The original sequence is public, so every number below can be reproduced against it.
Why the honest picture is undramatic
A before/after of a single frame barely moves, and it would be easy to pick a more flattering example or to brighten the difference until it looked impressive. Here is the real figure instead: on this endpoint the repair changed 667 of 3,273 masked samples. One frame carries one dash of a dashed trail; the rest of that aeroplane is in the frames either side.
The number worth having is a different one. Of the 3,273 samples the mask covered, 3,273 — every single one — matched an observed donor exactly: not an interpolation, not a blur, but the sky as another frame of the same night actually recorded it. Zero samples came out above the donor and zero below it.
What that costs, and what the usual method costs instead
The ordinary approach is sigma rejection: compare each pixel across the sequence and discard the outliers. It works, and it removes every transient in the night with the same stroke — the meteor you waited four hours for, the Iridium flare, the satellite pass you wanted. There is no setting that keeps one and not the other, because to the arithmetic they are the same event.
Finding the track before the stack means the decision is about this measured line: whether it is present in the target exposure and absent from the neighbouring view of the same sky, and whether the original pixels confirm its width and continuity. That evidence can remove aircraft, satellites and meteors alike; it does not pretend a straight track reveals which object made it.
Additional model temporarily unavailable
The model artifact failed validation on 6 September 2026. Its weights match an untrained export, so the earlier model comparison figures do not establish the quality of the file delivered by this site. We have withdrawn those claims and disabled the optional model.
The ordinary sequence-based line detector remains available. Review its proposed changes and check the finished picture for residual tracks; an absence of proposals does not prove an absence of aircraft or satellites.
How the detector actually works, and what it refuses to do
A threshold cannot see a faint trail. Summing along a line can.
The first version of this thresholded the residual at 4σ and labelled connected components. That fails twice over, and both were measured on real frames rather than argued. A connected component breaks at a gap: an aircraft's strobe flashes 40–100 times a minute, so in a 30-second exposure the light is a row of dashes, and labelling turns one aeroplane into forty specks that each fail the length test. And a threshold-then-label detector cannot see anything below its threshold — so a faint trail is invisible however long it is.
Summing along a line recovers √L. A 1.4σ-per-pixel streak over 80 px is a 12σ event once you add it up, and a 4σ threshold never sees a pixel of it. So the search is a matched filter along straight segments — a windowed Radon transform — and the interesting work is in the verifier, because everything a matched filter finds that is bright is also a star.
It will not remove what it cannot repair
A mask is only applied where a neighbouring frame can supply the sky underneath. If no donor exists the candidate is reported and left alone, with the reason given, rather than being cut out and filled with a guess. And if the detector believes a large part of the frame is aircraft, it concludes that the detector is wrong about that frame and removes nothing.
What it has never been able to tell you
Whether a track was an aeroplane or a satellite. Two attempts failed on the same obstacle: the labels available were morphology — somebody looked at a track and decided what it was — and rate, uniformity and gap did not separate them. Aircraft navigation lights are the first signal that ever pointed the right way, and two of two is a direction, not a rate.
The route out is not a better feature but better truth: for a frame whose time and place are known, which satellites were above the horizon and how fast each was crossing is computable from published orbital elements. That work is under way, and this page will carry the number when there is one worth carrying.
Which cameras and file types any of this has actually been measured on is a separate question, and it has its own page: what it can read, and what has been through it.
Try it on your own night
Open Star trails in the stacker Nothing is uploaded and nothing is installed; the frames are read in your browser.
findStreaks mask and repair-eligibility footprint, bound to its mask hash. It is not a repaired photograph, camera output or benchmark.