Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

lizTheDeveloper/flyover-scrub

Security & Privacy

Removes inaudible aircraft Doppler traces from audio and video to protect recording locations, with a reference scorer for measuring the defence.

298
26
Python
MIT
4 days old

Overview

Flyover audio can leak a recording's location: an inaudible propeller Doppler curve, matched against public ADS-B flight tracks, narrows down where the recording was made. flyover-scrub rewrites an audio or video file so those curves carry no usable information, and ships with an independent implementation of the attack scorer so the defence can be measured rather than assumed.

The pipeline works on STFT bins in a protected band (default 20–2000 Hz). Background bins within 12 dB of the local floor are re-synthesised with fresh random-phase noise at the same local power; long slowly gliding narrowband ridges are replaced with floor-level noise; other foreground such as speech, music and transients is passed through. Because the level correction uses a single whole-file number per frequency, it cannot reintroduce time-varying structure. Both modes also report grid hum (ENF), and scrubbing removes it by default.

It is aimed at people who publish their own recordings and want to reduce geolocation risk. The package includes flyover_scrub.attack (a reference scorer) and flyover_scrub.trace (the trace-and-fit variant), so results can be checked against the same attack the tool defends against.

Quick start

Install the tool with uv:

uv tool install .

Scrub a file and write a sanitised copy (audio scrubbed, video copied, metadata stripped):

flyover-scrub input.mov -o output.mov

To inspect a file without writing anything, run check mode, which reports long tonal ridges and grid hum:

flyover-scrub --check input.mp4

To audit your own recording against real flights, capture live ADS-B data while you record, then run the audit:

flyover-capture --at 42.36,-83.13 --minutes 15 -o flights.jsonl
flyover-audit recording.mov --flights flights.jsonl --scrub

The audit prints the closest aircraft and, for both the original and the scrubbed file, the top location guess, the rank of your true spot and a signal-versus-chance score. A visible line in the spectrogram can be fitted directly with --trace 10,75,65,95 (t_lo, t_hi, f_lo, f_hi).

Example output from the README:

  N123AB (C172, cat A1) closest 1.1 km
    original  top guess    158 m from you, your spot ranked 3/1357, signal 34.4x chance  -> EXPOSED
    scrubbed  top guess   1553 m from you, your spot ranked 506/1352, signal  1.1x chance  -> not located

Constraints

  • The audit requires your true location. It reads start time and position from the file's tags (iPhone .MOV files carry both) or accepts --start and --at. If the file has passed through exports, edits or messaging apps, pass --start explicitly.
  • The live API records only the present, so start flyover-capture before you record. The package has no bulk or historical flight download; the research scripts include a reader for adsb.lol's public daily archive.
  • The scorer was tuned on propeller tones; jets and helicopters are tested too, but calibration rests on a handful of synthetic cases. Borderline results, especially 2–4× with the true spot in the top 10, should be treated as possibly exposed rather than settled.
  • Aircraft energy that overlaps loud foreground (speech harmonics crossing the line) is kept along with the foreground; louder flyovers under continuous speech are the most likely leak.
  • Only the copy you publish is protected. The original file, live streams, calls and CCTV are out of scope. Cutting the audio into short stretches remains a cheap complementary defence, and metadata is a much easier leak, so the CLI strips it by default.
  • Stereo channels are scrubbed independently, so background noise becomes decorrelated and room tone sounds slightly wider.
  • Licensed under MIT.

Results and evidence

In the evaluation, a physically modelled propeller flyover was mixed into two real iPhone recordings, and the attacker got an ADS-B-like track, a clock offset and a 10 × 10 km search box. Raw inaudible flyovers were located to within 0–461 m with the true location ranked first in four of six runs. After scrubbing, location error was 1.1–5.1 km with the true spot ranked 351–2087, no better than chance. Quality checks show content above 2 kHz untouched, tonal balance within about 1 dB from 120 Hz to 2 kHz, and a 4–9 dB reduction below 100 Hz because steady hum and machine tones are removed. The full write-up, data and reproducible proof of concept are in the research documentation.

HotRepo's take

HotRepo's only recorded snapshot for this repository is 10 November 2026, when it appeared on the new-project list with 15 stars gained over a one-hour window, reaching 122 stars in the 13:45–14:15 UTC sampling. No GitHub daily ranking was recorded. That is a thin history, so it supports only the fact that the project drew a small burst of early attention, not a claim about lasting traction. What stands out technically is the pairing of a working attack scorer with the defence and an explicit calibration table, which makes the project's claims checkable against the same pipeline; the line between "possibly exposed" at 2–4× and the 4× verdict still rests on a limited set of synthetic cases.

Written by AI from the project's README, updated . The project's own docs are the source of truth.

You might also like

  1. 1337isnot1337/DOPPLERGEISTEstimates where an aircraft recording was made by matching Doppler signatures with historical ADS-B tracks.Python371
  2. mjshiggins/dopplertrackLocate a recording's position by matching aircraft propeller Doppler curves against historical ADS-B flight tracks.Python102