# SatsDecoder **Repository Path**: xu-hao0/SatsDecoder ## Basic Information - **Project Name**: SatsDecoder - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-24 - **Last Updated**: 2026-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Satellites decoder [![](https://img.shields.io/badge/english-blue)](https://github.com/baskiton/SatsDecoder/blob/main/README.md) [![](https://img.shields.io/badge/русский-blue)](https://github.com/baskiton/SatsDecoder/blob/main/README.ru.md) ![](https://img.shields.io/github/v/release/baskiton/SatsDecoder?label=stable) ![](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/baskiton/7270038ca73e8e5f1acea6280cc8a416/raw/satsdecoder-pre.json) ![](https://img.shields.io/github/downloads/baskiton/SatsDecoder/total?label=downloads%40total) ![](https://img.shields.io/github/downloads/baskiton/SatsDecoder/latest/total) Image and Telemetry decoder for some amateurs satellites (geoscan, sputnix platforms...) First, download, setup and run soundmodem https://r4uab.ru/settings-soundmodem/ * geoscan (new): [1](http://r4uab.ru/program/modem/geoscan27.zip), [2](http://uz7.ho.ua/geoscan27.zip) * geoscan (old): [1](http://r4uab.ru/program/modem/geoscan.zip), [2](http://uz7.ho.ua/geoscan.zip) * usp: [1](https://edu.sputnix.ru/assets/files/hs_soundmodem-4c5cea0c92a6d1e2d686662c6b3115a8.zip), [2](http://uz7.ho.ua/gmskusp.zip) * other: [1](http://uz7.ho.ua/packetradio.htm) To start decoding, run SatsDecoder, select protocol tab and press `Connect` button. Play FM demodulated signal and wait for result. #### Options * `Out Dir` Directory to store result images and telemetry * `Server` Hostname or IP-address of soundmodem * `Port` Port of soundmodem (see in File -> Devices -> AGWPE Server Port) * `Merge mode` When enabled, all new images data will store to one file * `New Image` Force a new image #### Hotkeys * `Ctrl-Q` Quit * `F1` Show About window, check if newer version available #### Protocols The following protocols are currently supported: * `GEOSCAN` - [Geoscan platform](https://download.geoscan.aero/site-files/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8%20%D1%82%D0%B5%D0%BB%D0%B5%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%B8.pdf) * `USP` - [Unified SPUTNIX protocol](https://sputnix.ru/tpl/docs/amateurs/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0%20USP%20v1.04.pdf) * `AX.25` * `CSP` - [Cubesat Space Protocol](https://github.com/libcsp/libcsp) * `CubeBel-2` * `D-Star ONE` - [D-Star ONE Protocol](https://web.archive.org/web/20190807184852/http://www.d-star.one/downloads/D-Star%20ONE%20telemetry%20frame%20format.pdf) * `CitGardens-02` - [CIT Gardens-02 project](https://sites.google.com/view/gardens-02/english_ver/home) * `GreenCube` - [GreenCube](https://www.s5lab.space/index.php/decoding-ledsat-2/) * `Ledsat` - [LEDSAT](https://www.s5lab.space/index.php/decoding-ledsat/) * `Lucky-7` - [Lucky-7 Satellite protocol](https://www.lucky7satellite.org/radioamateurs) * `RoseyCubeSat` * `SamSat-Ionosphere` - [SamSat-Ion2 beacon structure](https://spaceresearch.ssau.ru/doc/SamSat/SamSat-Ion2/SamSat-Ionosphere-beacon.pdf) * `SharjahSat` * `Snuglite` - [SNUGLITE-I beacon structure](https://snuglitecubesat.wixsite.com/website/post/snuglite-beacon-structure) * `Sonate-2` - [Sonate-2 protocol](https://www.informatik.uni-wuerzburg.de/en/aerospaceinfo/mitarbeiter/kayal/forschungsprojekte/sonate-2/information-for-radio-amateurs/) * `WTCSimba` - [WildTrackCube-SIMBA](https://www.s5lab.space/index.php/decoding-simba/) * `RAW` - Any raw data #### Data Sources Various data source types are available in the `Conn` combobox: * `AGWPE Client` - to connect to soundmodems * `HEX values` - per-line decoding of data transmitted as a HEX string * `HEX values from files` - same as the `HEX values`, but from files * `TCP Client` - TCP socket as client * `TCP Server` - TCP socket as server * ATTENTION!!! For TCP types, the data provider ensures that the header is sent before the main data: ```C struct header { int64_t t; // unix timestamp, s (-1 if empty) uint32_t len; // data length } ``` Byte order: Network (big-endian) * `JSON files` - read JSON-files ```json { [any_unique_key]: { REQUIRED (one of): * "raw": string // hex string OR * "data": string // hex string OPTIONAL: * "unixtime": string | number // unix timestamp UTC, s * "unixtimemill": string | number // unix timestamp UTC, ms * "datetime": string // datetime in ISO format (e.g. YYYY-MM-DDTHH:MM:SS) } } ``` valid example: ```json { "001": { "raw": "DEADBEEF", "datetime": "2026-01-09T13:52:05" }, "002": { "data": "1337A55A", "unixtime": "1767966804" }, "003": { "data": "ABBA", "unixtimemill": 1767966804898 }, "004": { "raw": "EA51" } } ``` * `KISS files` - read KISS-files * `SatDump frm files` - read SatDump frm files (only for AX.25 and Geoscan) ![](doc/Screenshot.jpg) ### Run from source Required at least Python 3.7 I recommend to use a virtual environment Install required packages: ```commandline pip install -r requirements.txt ``` To run: ```commandline python -m SatsDecoder ``` ### Build from source Required at least Python 3.7 I recommend to use a virtual environment * Pyinstaller ```commandline pip install -r requirements.txt pip install pyinstaller pyinstaller -y decoder.spec ``` * Nuitka ```commandline pip install -r requirements.txt pip install nuitka python -m nuitka python -m nuitka --python-flag=-m --onefile --standalone \ --assume-yes-for-downloads --output-dir=dist --script-name=SatsDecoder \ --enable-plugins=tk-inter --windows-icon-from-ico=res/icon.png \ --include-data-dir=res=res --noinclude-data-files=res/*.txt ``` The result build can be found in the `dist` folder ### Licensing SatsDecoder is licensed under GPL-3.0-or-later. It contains third-party code licensed as GPL-3.0-or-later, but the majority of the codebase is licensed as MIT ### Contributing Contributions to SatsDecoder must be licensed as MIT. The "main" branch is the release branch. New branches must be created from "dev". All PRs must be into "dev". Python code must be compliant or close to the PEP-8.