Mitch Ross 556a4ffcc2 tweaks
1. utils/weather_sat.py — Added delete_all_images() method that globs for *.png, *.jpg, *.jpeg in the output dir, unlinks each, clears _images list, and returns the
  count.
  2. routes/weather_sat.py — Added DELETE /weather-sat/images route that calls decoder.delete_all_images() and returns {'status': 'ok', 'deleted': count}.
  3. static/js/modes/weather-satellite.js:
    - Added currentModalFilename state variable
    - renderGallery() now sorts images by timestamp descending, groups by date using toLocaleDateString(), renders date headers spanning the grid, and adds a delete
  overlay button on each card
    - showImage() accepts a filename param, stores it in currentModalFilename, and creates a modal toolbar with a delete button
    - Added deleteImage(filename) — confirm dialog → DELETE /weather-sat/images/{filename} → filter from array → re-render + close modal
    - Added deleteAllImages() — confirm dialog → DELETE /weather-sat/images → clear array → re-render
    - Exposed deleteImage, deleteAllImages, and _getModalFilename in public API
  4. static/css/modes/weather-satellite.css:
    - Added position: relative to .wxsat-image-card
    - .wxsat-image-actions — absolute top-right overlay, hidden by default, appears on card hover
    - .wxsat-image-actions button — dark background, turns red on hover
    - .wxsat-date-header — full-grid-width date separator with dimmed uppercase text
    - .wxsat-modal-toolbar — absolute top-left in modal for the delete button
    - .wxsat-modal-btn.delete — turns red on hover
    - .wxsat-gallery-clear-btn — subtle icon button, pushed right via margin-left: auto, turns red on hover
    - Updated .wxsat-gallery-header from justify-content: space-between to gap: 8px for proper 3-child layout
  5. templates/index.html — Added clear-all trash button with SVG icon in the gallery header, wired to WeatherSat.deleteAllImages().
2026-02-07 15:52:52 -05:00
2026-02-04 20:08:08 +00:00
2026-02-07 15:52:52 -05:00
2026-02-07 15:52:52 -05:00
2026-02-07 15:52:52 -05:00
2026-02-07 15:52:52 -05:00
2026-02-05 17:07:39 -05:00
2026-01-08 06:46:52 +01:00

INTERCEPT

Python 3.9+ MIT License Platform

Support the developer of this open-source project

Buy Me A Coffee

Signal Intelligence Platform
A web-based interface for software-defined radio tools.

Screenshot


Features

  • Pager Decoding - POCSAG/FLEX via rtl_fm + multimon-ng
  • 433MHz Sensors - Weather stations, TPMS, IoT devices via rtl_433
  • Aircraft Tracking - ADS-B via dump1090 with real-time map and radar
  • Vessel Tracking - AIS ship tracking with VHF DSC distress monitoring
  • ACARS Messaging - Aircraft datalink messages via acarsdec
  • DMR Digital Voice - DMR/P25/NXDN/D-STAR decoding via dsd-fme with visual synthesizer
  • Listening Post - Frequency scanner with audio monitoring
  • Weather Satellites - NOAA APT and Meteor LRPT image decoding via SatDump
  • WebSDR - Remote HF/shortwave listening via WebSDR servers
  • ISS SSTV - Slow-scan TV image reception from the International Space Station
  • HF SSTV - Terrestrial SSTV on shortwave frequencies
  • Satellite Tracking - Pass prediction using TLE data
  • ADS-B History - Persistent aircraft history with reporting dashboard (Postgres optional)
  • WiFi Scanning - Monitor mode reconnaissance via aircrack-ng
  • Bluetooth Scanning - Device discovery and tracker detection (with Ubertooth support)
  • TSCM - Counter-surveillance with RF baseline comparison and threat detection
  • Meshtastic - LoRa mesh network integration
  • Spy Stations - Number stations and diplomatic HF network database
  • Remote Agents - Distributed SIGINT with remote sensor nodes
  • Offline Mode - Bundled assets for air-gapped/field deployments

Installation / Debian / Ubuntu / MacOS


**1. Clone and run:**
```bash
git clone https://github.com/smittix/intercept.git
cd intercept
./setup.sh
sudo -E venv/bin/python intercept.py

Docker

git clone https://github.com/smittix/intercept.git
cd intercept
docker compose --profile basic up -d --build

Note: Docker requires privileged mode for USB SDR access. SDR devices are passed through via /dev/bus/usb.

Multi-Architecture Builds (amd64 + arm64)

Cross-compile on an x64 machine and push to a registry. This is much faster than building natively on an RPi.

# One-time setup on your x64 build machine
docker run --privileged --rm tonistiigi/binfmt --install all
docker buildx create --name intercept-builder --use --bootstrap

# Build and push for both architectures
REGISTRY=ghcr.io/youruser ./build-multiarch.sh --push

# On the RPi5, just pull and run
INTERCEPT_IMAGE=ghcr.io/youruser/intercept:latest docker compose --profile basic up -d

Build script options:

Flag Description
--push Push to container registry
--load Load into local Docker (single platform only)
--arm64-only Build arm64 only (for RPi deployment)
--amd64-only Build amd64 only

Environment variables: REGISTRY, IMAGE_NAME, IMAGE_TAG

Using a Pre-built Image

If you've pushed to a registry, you can skip building entirely on the target machine:

# Set in .env or export
INTERCEPT_IMAGE=ghcr.io/youruser/intercept:latest

# Then just run
docker compose --profile basic up -d

ADS-B History (Optional)

The ADS-B history feature persists aircraft messages to Postgres for long-term analysis.

# Start with ADS-B history and Postgres
docker compose --profile history up -d

Set the following environment variables (for example in a .env file):

INTERCEPT_ADSB_HISTORY_ENABLED=true
INTERCEPT_ADSB_DB_HOST=adsb_db
INTERCEPT_ADSB_DB_PORT=5432
INTERCEPT_ADSB_DB_NAME=intercept_adsb
INTERCEPT_ADSB_DB_USER=intercept
INTERCEPT_ADSB_DB_PASSWORD=intercept

Other ADS-B Settings

Set these as environment variables for either local installs or Docker:

Variable Default Description
INTERCEPT_ADSB_AUTO_START false Auto-start ADS-B tracking when the dashboard loads
INTERCEPT_SHARED_OBSERVER_LOCATION true Share observer location across ADS-B/AIS/SSTV/Satellite modules

Local install example

INTERCEPT_ADSB_AUTO_START=true \
INTERCEPT_SHARED_OBSERVER_LOCATION=false \
python app.py

Docker example (.env)

INTERCEPT_ADSB_AUTO_START=true
INTERCEPT_SHARED_OBSERVER_LOCATION=false

To store Postgres data on external storage, set PGDATA_PATH (defaults to ./pgdata):

PGDATA_PATH=/mnt/usbpi1/intercept/pgdata

Then open /adsb/history for the reporting dashboard.

Open the Interface

After starting, open http://localhost:5050 in your browser. The username and password is admin:admin

The credentials can be change in the ADMIN_USERNAME & ADMIN_PASSWORD variables in config.py


Hardware Requirements

Hardware Purpose Price
RTL-SDR Required for all SDR features ~$25-35
WiFi adapter Must support promiscuous (monitor) mode ~$20-40
Bluetooth adapter Device scanning (usually built-in) -
GPS Any Linux supported GPS Unit ~10

Most features work with a basic RTL-SDR dongle (RTL2832U + R820T2).

Not using an RTL-SDR Device?
Intercept supports any device that SoapySDR supports. You must however have the correct module for your device installed! For example if you have an SDRPlay device you'd need to install soapysdr-module-sdrplay.
GPS Usage
gpsd is needed for real time location. Intercept automatically checks to see if you're running gpsd in the background when any maps are rendered.

Discord Server

Join our Discord


Documentation


Disclaimer

This project was developed using AI as a coding partner, combining human direction with AI-assisted implementation. The goal: make Software Defined Radio more accessible by providing a clean, unified interface for common SDR tools.

This software is for educational and authorized testing purposes only.

  • Only use with proper authorization
  • Intercepting communications without consent may be illegal
  • You are responsible for compliance with applicable laws

License

MIT License - see LICENSE

Author

Created by smittix - GitHub

Acknowledgments

rtl-sdr | multimon-ng | rtl_433 | dump1090 | AIS-catcher | acarsdec | aircrack-ng | Leaflet.js | SatDump | Celestrak | Priyom.org

Description
No description provided
Readme Apache-2.0 112 MiB
Languages
Python 45.9%
HTML 22.7%
JavaScript 20.2%
CSS 9.9%
Shell 1.2%
Other 0.1%