single-file sstv encoder/decoder for ctf work, radio experiments, and quick image/audio round-trips.
developer: @uckix
- decodes wav / mp3 / ogg / flac / m4a / aac / opus into images
- auto-detects supported sstv modes from the vis header during decode
- encodes images into wav / mp3 / ogg / flac / m4a / aac / opus
- supports forced mode selection with
-m - works as a single-file cli script
MartinM1MartinM2ScottieS1ScottieS2ScottieDX
python packages:
pip install -r requirements.txtsystem dependency:
- ffmpeg is required for anything that is not plain
.wav
git clone https://github.com/uckix/sstv_decoder_encoder.git
cd sstv-tool
pip install -r requirements.txtoptional:
chmod +x tool.pypython tool.py --helppython tool.py --versionpython tool.py --list-modespython tool.py -i input.wav -o out.png
python tool.py -i input.mp3 -o out.png
python tool.py -i input.ogg -o out.pnguse this when auto-detect fails or the file has a noisy/custom preamble.
python tool.py -i input.wav -o out.png -m ScottieS1python tool.py -i in.png -o out.wav -m ScottieS1
python tool.py -i in.jpg -o out.ogg -m MartinM1
python tool.py -i in.jpg -o out.mp3 -m ScottieDXfor the cleanest results:
- encode to wav when possible
- decode to png when possible
- use ScottieDX for a slower but usually stronger signal
- use sharp, high-contrast source images
- avoid lossy chains like
jpg -> mp3 -> jpg
when decoding, the script scans the beginning of the audio for the standard sstv vis header:
- 1900 hz leader
- 1200 hz break
- 1900 hz leader
- vis bits that identify the mode
if the vis code matches one of the supported modes, the tool decodes the image automatically.
decode a challenge file:
python tool.py -i challenge.wav -o decoded.pngencode a png as scottie dx:
python tool.py -i image.png -o signal.wav -m ScottieDX- this project currently supports only the 5 listed modes
- some noisy or custom ctf files may need manual mode forcing with
-m - very lossy audio can break header detection or reduce decoded image quality
sstv-tool/
├── README.md
├── requirements.txt
├── .gitignore
└── tool.py
this is a practical utility script meant for learning, ctf use, and experimentation. it is not a full replacement for mature radio/sstv suites.