Skip to content

K5WH-Walter/Hades-SA-SSDV

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛰️ HADES-SA SSDV Decoder

License: MIT Python 3.11+ Platform: Windows Protocol: SSDV Satellite: HADES-SA

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.


📡 What is HADES-SA?

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.


✨ Features

  • 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 .bin file
  • 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

🖥️ Screenshots

Connect soundmodem, tune to the HADES-SA downlink frequency, and watch packets and images appear in real time.


🚀 Quick Start (pre-built EXE)

  1. Go to the Releases page
  2. Download HADES_SSDV_Decoder.exe
  3. Double-click to run — no installation required

🔨 Build from Source

Prerequisites

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".

One-click build

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.

Manual build

pip install pillow pyinstaller
pyinstaller hades_ssdv_decoder.spec --clean --noconfirm
# Output: dist\HADES_SSDV_Decoder.exe

⚙️ soundmodem Configuration

  1. Open soundmodem → Settings → Devices
  2. Enable KISS over TCP, port 8100
  3. Set your sound card input to your radio receiver's audio output
  4. 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.


📁 Output File Layout

%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.


📦 SSDV Packet Format Reference

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

🛠️ Troubleshooting

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

📻 HADES-SA Frequencies

Band Downlink Mode
70 cm (UHF) 436.888 MHz FSK 1200 baud AX.25

Frequencies subject to change — check AMSAT-EA for current information.


🤝 Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you'd like to change.


📄 License

MIT — free to use, modify, and redistribute.


🙏 Acknowledgements

About

Hades-SA SSDV Decoder

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages