A standalone Windows desktop application for receiving and decoding SSDV (Slow Scan Digital Video) image packets from the HADES-SA amateur satellite. Connects to soundmodem via a KISS TCP link, decodes every incoming SSDV packet, saves each as a raw .bin file, and reconstructs a live image preview as packets arrive.
HADES-SA is an amateur radio CubeSat operated by AMSAT-EA (Spain). Among its payloads it downlinks SSDV — a packetised JPEG format designed for lossy radio links — on the 70 cm band using AX.25 packet radio. Each 256-byte packet carries a slice of a JPEG image, allowing partial image reconstruction even with missing packets.
- KISS TCP link to soundmodem (configurable host/port, default
127.0.0.1:8100) - AX.25 frame parsing with optional callsign filter (
HADES,SP5MXJ,SP9EMI) - SSDV packet decoder — handles both No-FEC (
0x66) and FEC (0x67) packet types - Raw packet saving — every 256-byte SSDV packet saved as an individual
.binfile - Organised output — packets grouped into per-image sub-folders automatically
- Live image preview — partial JPEG reconstructed and displayed as packets arrive
- Image table — tracks all received images with ID, callsign, packet count, and status
- Timestamped packet log with colour-coded levels
- Standalone EXE — no Python or DLL installation required on the target machine
Connect soundmodem, tune to the HADES-SA downlink frequency, and watch packets and images appear in real time.
- Go to the Releases page
- Download
HADES_SSDV_Decoder.exe - Double-click to run — no installation required
| Requirement | Version | Link |
|---|---|---|
| Windows | 10 or 11 (64-bit) | — |
| Python | 3.11 or 3.12 | https://www.python.org/downloads/ |
| soundmodem | latest | http://uz7.ho.ua/packetradio.htm |
During Python install, tick "Add Python to PATH".
1. Clone or download this repository
2. Double-click build_windows.bat
3. Find your EXE at dist\HADES_SSDV_Decoder.exe
The batch script installs Pillow and PyInstaller automatically, then compiles everything into a single portable executable.
pip install pillow pyinstaller
pyinstaller hades_ssdv_decoder.spec --clean --noconfirm
# Output: dist\HADES_SSDV_Decoder.exe- Open soundmodem → Settings → Devices
- Enable KISS over TCP, port 8100
- Set your sound card input to your radio receiver's audio output
- Start soundmodem and tune your radio to the HADES-SA 70 cm downlink
soundmodem must be running and decoding audio before clicking Connect in this app.
%USERPROFILE%\HADES_SSDV\
├── image_0001\
│ ├── ssdv_img0001_pkt00000.bin ← raw 256-byte SSDV packet
│ ├── ssdv_img0001_pkt00001.bin
│ └── ...
├── image_0002\
│ └── ...
└── ...
Each .bin file is the exact 256-byte SSDV packet as received over the air, suitable for offline processing with the ssdv command-line tool or any other SSDV-aware software.
The output directory is configurable in the UI.
| Byte(s) | Field | Notes |
|---|---|---|
| 0 | Sync byte | Always 0x55 |
| 1 | Packet type | 0x66 = No-FEC / 0x67 = FEC |
| 2–7 | Callsign | ASCII, space-padded to 6 chars |
| 8–9 | Image ID | uint16 big-endian |
| 10–11 | Packet ID | uint16 big-endian |
| 12–13 | Width / height / EOI | MCU counts + end-of-image flag |
| 14–232 | JPEG data | 219 bytes per packet |
| 233–255 | FEC / padding | Unused in No-FEC mode |
| Problem | Solution |
|---|---|
| "Connection failed" | Confirm soundmodem is running and KISS TCP is enabled on port 8100 |
| No packets decoded | Disable the callsign filter; check the log for the actual source callsign |
| Garbled preview | Normal for partial reception — use the .bin files for lossless offline decode |
| Antivirus flags the EXE | Common false positive with PyInstaller; add an AV exclusion |
tkinter missing during build |
Reinstall Python with "tcl/tk and IDLE" ticked |
| Band | Downlink | Mode |
|---|---|---|
| 70 cm (UHF) | 436.888 MHz | FSK 1200 baud AX.25 |
Frequencies subject to change — check AMSAT-EA for current information.
Pull requests are welcome. For major changes, please open an issue first to discuss what you'd like to change.
MIT — free to use, modify, and redistribute.
- AMSAT-EA — HADES-SA satellite team
- Philip Heron (fsphil) — original SSDV protocol and tools
- UZ7HO — soundmodem
- The amateur radio satellite community