MCPcopy Index your code
hub / github.com/sgoudelis/ground-station

github.com/sgoudelis/ground-station @v0.7.9 sqlite

repository ↗ · DeepWiki ↗ · release v0.7.9 ↗
4,940 symbols 17,914 edges 675 files 1,822 documented · 37%
README

Ground Station

Tests License: GPL v3 Release Last Release Last Commit

Ground Station is an open-source, browser-based application for tracking satellites and celestial targets, controlling station hardware, and receiving, decoding, and recording SDR signals. Built for amateur radio operators, satellite enthusiasts, and researchers, it brings orbit visualization, multi-target tracking consoles, SDR waterfall analysis, packet and telemetry decoding, scheduled observations, and hardware management into a single web interface.

Recent Releases (Last 10 Tags)

  • v0.7.8 (2026-06-30): Isolated waterfall marker drag interactions from container pan handlers, upgraded target badges to TargetNumberIcon in fleet and popover views, and improved target popover tracking/navigation behavior to streamline jumps to tracker pages.
  • v0.7.7 (2026-06-30): Improved waterfall VFO drag behavior and movement state handling, enhanced playback overlay responsiveness, added runtime scheduler metadata with clearer terminal-observation visibility, and refined target-slot badges plus EarthView satellite/transmitter editing flows.
  • v0.7.6 (2026-06-28): Added SDR usage badges with cross-session utilization tracking, persisted orbital sync state with UI hydration support, improved active non-satellite tracker resync during celestial sync, and refined target layout/schema behavior.
  • v0.7.4 (2026-06-27): Added timeline scrubbing and improved IQ playback controls, refined SDR options/streaming behavior, introduced resettable table defaults with versioned migration logic for EarthView and celestial views, and added transmitter duplication support.
  • v0.7.3 (2026-06-25): Improved worker presentation timing for Android WebView, refined Satellites admin UI layout, and enhanced SDR table rendering/port behavior.
  • v0.7.2 (2026-06-22): Added native Airspy/Airspy HF+ support (Airspy HF+ currently untested), grouped SDRs by type with inline edit actions, and updated SDR management docs/UI copy.
  • v0.7.1 (2026-06-20): Expanded celestial catalog defaults with major moons for Uranus, Neptune, and Pluto.
  • v0.7.0 (2026-06-20): Introduced UHD/USRP discovery integration, improved SoapySDR discovery/task monitoring, and cleaned up hardware management UX.
  • v0.6.0 (2026-06-16): Added SQLite concurrent-write retry handling, moved auth/session behavior to cookie-backed flows, introduced the Setup Wizard (with location restore and admin setup), and hardened setup/admin-recovery logic.
  • v0.5.2 (2026-06-12): Expanded planetarium/target map capabilities (interactive controls, fullscreen, pass handling), and refreshed docs/features descriptions.

Screenshots

Global Satellite Overview

Overview page with amateur satellite group (desktop)     Earth view page on mobile

Overview page with quick group selection and real-time satellite status indicators


Solar System View

Solar System view page (desktop)     Solar System view page on mobile

Solar System page for celestial-body tracking with live orbital context and interactive visualization


Login Screen

Ground Station login screen (desktop)     Ground Station login screen on mobile

Login screen for user authentication before accessing the Ground Station interface


Multi-Target Tracking Console

Multi-target tracking console focused on ISS (desktop)     Target console on mobile

Multi-target tracking console view showing an active ISS target with per-target control and live tracking telemetry


SDR Waterfall View

Waterfall view with live transcription

Waterfall view with live transcription overlay during active satellite communication


Waterfall Packet Decoding (GMSK)

Waterfall packet decoding view with GMSK

Waterfall view with live GMSK packet decoding and decoded output details


Telemetry Packet Viewer (Hex + ASCII)

Telemetry packet viewer with hex and ASCII columns

Packet viewer showing telemetry payload bytes in hex with ASCII side-by-side


TLE Data Synchronization

TLE synchronization page

TLE synchronization page showing real-time progress and satellite database updates


SDR Hardware Management

SDR page index

Comprehensive SDR device management interface supporting RTL-SDR, SoapySDR, and UHD/USRP radios with remote capability


File Browser & Decoders

File browser with decoded outputs and transcriptions

File browser view showing decoded weather images, packet outputs, and saved transcriptions


Observations Overview

Observations overview

Automated observations dashboard with upcoming passes and task status


DSP Topology & Performance

DSP topology and performance view

Chain of threads and processes IQ samples pass through, showing performance and data flow across the DSP pipeline


Key Features

  • Real-time Orbit Tracking: Track Earth-orbiting targets using Skyfield/SGP4 propagation from stored orbital elements.
  • Configurable Orbital Sources + Metadata Enrichment: Sync orbital data from configured sources (default CelesTrak feeds) and enrich satellites/transmitters from SatNOGS APIs.
  • Multi-Target Tracker Instances: Run multiple tracker instances in parallel (target-N slots), each with independent runtime state.
  • Automated Antenna Rotator Control: Drive connected rotators with continuous az/el updates, limit checks, and anti-thrashing retarget logic.
  • Rig Control with Doppler Correction: Control compatible rigs (rigctld/Hamlib paths) with RX/TX Doppler-corrected tuning during tracking.
  • SDR Hardware Support: RTL-SDR (USB/rtl_tcp), SoapySDR (local/remote), UHD/USRP, plus a virtual SigMF Playback SDR.
  • Live DSP Pipeline: Stream IQ to FFT/waterfall, demodulators, decoders, recorders, and browser consumers through queue-based worker orchestration.
  • IQ Recording (SigMF): Record IQ as .sigmf-data + .sigmf-meta with center frequency, sample rate, session stats, and target satellite metadata.
  • SigMF Playback: Replay recorded IQ through the same processing pipeline used for live SDR operation.
  • Data Decoding + Framing Protocols: Supported decoder paths include SSTV, FSK, GFSK, GMSK, BPSK, and GNSS, with AX.25/USP/GEOSCAN framing support in the packet pipelines.
  • Transcription Services: Real-time demodulated-audio transcription via Gemini Live or Deepgram, with optional translation and file output under backend/data/transcriptions/.
  • Scheduled Observations: APScheduler-driven AOS/LOS orchestration for automatic start/stop of tracking, SDR, decoding, recording, and transcription tasks.
  • SatDump Post-Processing: Optional SatDump processing for IQ recordings, including METEOR LRPT/HRPT pipelines.
  • Performance Monitoring: Live pipeline metrics (queue utilization, throughput, drops, and component health) streamed to the frontend.
  • Responsive Web Interface: Material-UI + Socket.IO frontend for desktop, tablet, and mobile operation.
  • Authentication + User Management: Built-in login screen with role-based access control for two user types: admins and operators.
  • Interactive Solar System View: Dedicated Solar System page with live orbital context for planets and other supported bodies.
  • Celestial Body + Mission Targeting: Track selected solar-system bodies and deep-space mission targets through NASA/JPL Horizons-backed vectors.

Scheduled Observations & Automated Pass Recording

Ground Station includes a comprehensive automated observation system that can schedule and execute satellite passes without user intervention:

  • Monitored Satellites: Define satellite monitoring templates with hardware configurations, signal parameters, and task definitions. The system automatically generates scheduled observations for all qualifying passes.
  • Automated Pass Scheduling: Automatically calculate and schedule upcoming satellite passes based on configurable criteria (minimum elevation, lookahead window). The scheduler uses APScheduler to trigger observations at AOS (Acquisition of Signal) and stop at LOS (Loss of Signal).
  • Flexible Task Composition: Each observation can include multiple concurrent tasks: IQ recording (SigMF format), audio recording (WAV), protocol decoding (AFSK, GMSK, SSTV), and optional AI transcription.
  • Hardware Orchestration: Automatically controls SDR devices, antenna rotators (with satellite tracking), and rigs (with Doppler correction) during scheduled observations.
  • Live Observation Capability: Users can observe any automated pass in real-time through the web interface - view the spectrum waterfall, listen to demodulated audio, and watch live decoder output. When using the same SDR as an automated observation, users can monitor without interference, but be aware that changing the SDR's center frequency or bandwidth will affect the ongoing observation.
  • Multi-SDR Observing: Automated observations can run on one SDR while additional SDRs record, decode, and listen to the same pass in parallel.
  • Status Management: Real-time observation status tracking (scheduled, running, completed, failed, cancelled, missed) with automatic cleanup of old completed observations.
  • Session Management: Automated observations run in isolated internal VFO sessions (namespace: "internal:"). When using different SDRs, user sessions and automated observations operate completely independently without any interference.

Architecture

The Ground Station application is composed of a frontend, a backend, and a set of worker processes.

High-Level System Architecture

```mermaid flowchart TB %% Cache buster: v5-20251115-updated %% Frontend Layer A[Frontend: React + Redux + MUI

  • Real-time UI updates

  • State management

  • Interactive satellite maps

  • Spectrum & waterfall display

  • Audio playback & recording

  • IQ recording & playback controls

  • Decoder monitoring & output display]

    %% Backend Layer B[Backend: FastAPI + Socket.IO

  • WebSocket connections

  • Worker process management

  • Database operations

  • TLE data fetching

  • Recording & file management

  • Decoder lifecycle management]

    %% Worker Layer subgraph Workers["Worker Processes"] direction TB W1[Tracker Supervisor + Tracker Instances

  • One tracker instance per rotator

  • Antenna rotator control

  • Rig/radio control

  • Real-time tracking calculations

  • Hardware state management] W2[SDR IQ Acquisition

  • Raw IQ sample streaming

  • IQ Broadcaster pub/sub

  • Multi-consumer support] W2A[FFT Processor

  • Spectrum computation

  • Waterfall generation

  • Real-time FFT analysis] W2B[Demodulators

  • FM/SSB/AM modes

  • Normal & Internal modes

  • Frequency translation

  • Audio processing

  • Multi-VFO support] W2C[IQ Recorder

  • SigMF format recording

  • Metadata capture

  • Satellite info tagging

  • Waterfall snapshot saving] W2D[Decoders

  • SSTV image decoder ✓

  • AFSK packet decoder WIP

  • LoRa/GMSK decoders WIP

  • Audio Broadcaster for monitoring] W3[SDR Local Probe

  • Device discovery

  • Local SoapySDR enumeration

  • Hardware capability detection] W4[SDR Remote Probe

  • Remote SoapySDR discovery

  • Network device scanning

  • Remote capability detection] end

    %% Hardware Layer subgraph Hardw

Core symbols most depended-on inside this repo

get
called by 3624
backend/tracker/data.py
put
called by 173
backend/tracker/logic.py
exists
called by 93
backend/pipeline/registries/decoderregistry.py
useSocket
called by 75
frontend/src/components/common/socket.jsx
serialize_object
called by 75
backend/common/common.py
update
called by 72
backend/tlesync/state.py
set
called by 53
backend/tracker/data.py
is_alive
called by 47
backend/tracker/runner.py

Shape

Function 3,187
Method 1,445
Class 294
Route 14

Languages

Python64%
TypeScript36%

Modules by API surface

backend/tests/test_tlesync_utils.py75 symbols
frontend/src/components/earthview/earthview-slice.jsx54 symbols
frontend/src/components/celestial/solarsystem-canvas.jsx50 symbols
backend/tracker/runner.py47 symbols
backend/tests/test_tracking_satellite.py47 symbols
backend/hardware/airspynative.py47 symbols
backend/server/startup.py43 symbols
backend/celestial/scene.py43 symbols
backend/demodulators/gnsssdrdecoder.py41 symbols
frontend/src/components/dashboard/dashboard-layout.jsx39 symbols
backend/handlers/entities/hardware.py38 symbols
backend/tests/test_crud_hardware.py36 symbols

Dependencies from manifests, versioned

@emotion/react11.14.0 · 1×
@emotion/styled11.14.1 · 1×
@eslint/js9.39.4 · 1×
@mui/icons-material7.3.9 · 1×
@mui/joy5.0.0-beta.52 · 1×
@mui/lab7.0.1-beta.23 · 1×
@mui/material7.3.9 · 1×
@mui/x-charts8.28.2 · 1×
@mui/x-data-grid8.28.2 · 1×
@playwright/test1.59.1 · 1×
@reduxjs/toolkit2.11.2 · 1×

For agents

$ claude mcp add ground-station \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact