{"id":16643377,"url":"https://github.com/baskiton/satsdecoder","last_synced_at":"2026-04-03T09:01:23.432Z","repository":{"id":219445623,"uuid":"749057388","full_name":"baskiton/SatsDecoder","owner":"baskiton","description":"Image and Telemetry decoder for some amateurs satellites (geoscan, sputnix platforms...)","archived":false,"fork":false,"pushed_at":"2026-02-25T08:33:20.000Z","size":627,"stargazers_count":43,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-25T12:58:58.102Z","etag":null,"topics":["amateur","amateur-satellites","satellite-images","satellite-telemetry"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/baskiton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-GPL","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-01-27T13:16:02.000Z","updated_at":"2026-02-25T08:33:25.000Z","dependencies_parsed_at":"2024-02-05T13:25:57.829Z","dependency_job_id":"026bee1f-feb2-4903-a313-065473927d78","html_url":"https://github.com/baskiton/SatsDecoder","commit_stats":null,"previous_names":["baskiton/satsdecoder"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/baskiton/SatsDecoder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskiton%2FSatsDecoder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskiton%2FSatsDecoder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskiton%2FSatsDecoder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskiton%2FSatsDecoder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/baskiton","download_url":"https://codeload.github.com/baskiton/SatsDecoder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskiton%2FSatsDecoder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31344430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T08:03:20.796Z","status":"ssl_error","status_checked_at":"2026-04-03T08:00:37.834Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amateur","amateur-satellites","satellite-images","satellite-telemetry"],"created_at":"2024-10-12T08:08:15.657Z","updated_at":"2026-04-03T09:01:23.426Z","avatar_url":"https://github.com/baskiton.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Satellites decoder\n[![](https://img.shields.io/badge/english-blue)](https://github.com/baskiton/SatsDecoder/blob/main/README.md)\n[![](https://img.shields.io/badge/русский-blue)](https://github.com/baskiton/SatsDecoder/blob/main/README.ru.md)\n\n![](https://img.shields.io/github/v/release/baskiton/SatsDecoder?label=stable)\n![](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/baskiton/7270038ca73e8e5f1acea6280cc8a416/raw/satsdecoder-pre.json)  \n![](https://img.shields.io/github/downloads/baskiton/SatsDecoder/total?label=downloads%40total)\n![](https://img.shields.io/github/downloads/baskiton/SatsDecoder/latest/total)\n\nImage and Telemetry decoder for some amateurs satellites (geoscan, sputnix platforms...)\n\nFirst, download, setup and run soundmodem  \nhttps://r4uab.ru/settings-soundmodem/  \n* geoscan (new): [1](http://r4uab.ru/program/modem/geoscan27.zip), [2](http://uz7.ho.ua/geoscan27.zip)\n* geoscan (old): [1](http://r4uab.ru/program/modem/geoscan.zip), [2](http://uz7.ho.ua/geoscan.zip)\n* usp: [1](https://edu.sputnix.ru/assets/files/hs_soundmodem-4c5cea0c92a6d1e2d686662c6b3115a8.zip), [2](http://uz7.ho.ua/gmskusp.zip)\n* other: [1](http://uz7.ho.ua/packetradio.htm)\n\nTo start decoding, run SatsDecoder, select protocol tab and press `Connect` button. Play FM demodulated signal\nand wait for result.\n\n#### Options\n* `Out Dir` Directory to store result images and telemetry\n* `Server` Hostname or IP-address of soundmodem\n* `Port` Port of soundmodem (see in File -\u003e Devices -\u003e AGWPE Server Port)\n* `Merge mode` When enabled, all new images data will store to one file\n* `New Image` Force a new image\n\n\n#### Hotkeys\n* `Ctrl-Q` Quit\n* `F1` Show About window, check if newer version available\n\n\n#### Protocols\nThe following protocols are currently supported:\n* `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)\n* `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)\n* `AX.25`\n* `CSP` - [Cubesat Space Protocol](https://github.com/libcsp/libcsp)\n* `CubeBel-2`\n* `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)\n* `CitGardens-02` - [CIT Gardens-02 project](https://sites.google.com/view/gardens-02/english_ver/home)\n* `GreenCube` - [GreenCube](https://www.s5lab.space/index.php/decoding-ledsat-2/)\n* `Ledsat` - [LEDSAT](https://www.s5lab.space/index.php/decoding-ledsat/)\n* `Lucky-7` - [Lucky-7 Satellite protocol](https://www.lucky7satellite.org/radioamateurs)\n* `RoseyCubeSat`\n* `SamSat-Ionosphere` - [SamSat-Ion2 beacon structure](https://spaceresearch.ssau.ru/doc/SamSat/SamSat-Ion2/SamSat-Ionosphere-beacon.pdf)\n* `SharjahSat`\n* `Snuglite` - [SNUGLITE-I beacon structure](https://snuglitecubesat.wixsite.com/website/post/snuglite-beacon-structure)\n* `Sonate-2` - [Sonate-2 protocol](https://www.informatik.uni-wuerzburg.de/en/aerospaceinfo/mitarbeiter/kayal/forschungsprojekte/sonate-2/information-for-radio-amateurs/)\n* `WTCSimba` - [WildTrackCube-SIMBA](https://www.s5lab.space/index.php/decoding-simba/)\n* `RAW` - Any raw data\n\n#### Data Sources\nVarious data source types are available in the `Conn` combobox:\n* `AGWPE Client` - to connect to soundmodems\n* `HEX values` - per-line decoding of data transmitted as a HEX string\n* `HEX values from files` - same as the `HEX values`, but from files\n* `TCP Client` - TCP socket as client\n* `TCP Server` - TCP socket as server\n  * ATTENTION!!! For TCP types, the data provider ensures that the header is sent before the main data:  \n    ```C\n    struct header {\n        int64_t t;     // unix timestamp, s (-1 if empty)\n        uint32_t len;  // data length\n    }\n    ```\n    Byte order: Network (big-endian)\n* `JSON files` - read JSON-files\n  ```json\n  {\n      [any_unique_key]: {\n          REQUIRED (one of):\n          * \"raw\": string  // hex string\n          OR\n          * \"data\": string  // hex string\n\n          OPTIONAL:\n          * \"unixtime\": string | number  // unix timestamp UTC, s\n          * \"unixtimemill\": string | number  // unix timestamp UTC, ms\n          * \"datetime\": string  // datetime in ISO format (e.g. YYYY-MM-DDTHH:MM:SS)\n      }\n  }\n  ```\n  valid example:\n  ```json\n  {\n    \"001\": {\n      \"raw\": \"DEADBEEF\",\n      \"datetime\": \"2026-01-09T13:52:05\"\n    },\n    \"002\": {\n      \"data\": \"1337A55A\",\n      \"unixtime\": \"1767966804\"\n    },\n    \"003\": {\n      \"data\": \"ABBA\",\n      \"unixtimemill\": 1767966804898\n    },\n    \"004\": {\n      \"raw\": \"EA51\"\n    }\n  }\n  ```\n* `KISS files` - read KISS-files\n* `SatDump frm files` - read SatDump frm files (only for AX.25 and Geoscan)\n\n![](doc/Screenshot.jpg)\n\n\n### Run from source\nRequired at least Python 3.7  \nI recommend to use a virtual environment\n\nInstall required packages:\n```commandline\npip install -r requirements.txt\n```\n\nTo run:\n```commandline\npython -m SatsDecoder\n```\n\n\n### Build from source\nRequired at least Python 3.7  \nI recommend to use a virtual environment\n\n* Pyinstaller\n    ```commandline\n    pip install -r requirements.txt\n    pip install pyinstaller\n    pyinstaller -y decoder.spec\n    ```\n\n* Nuitka\n    ```commandline\n    pip install -r requirements.txt\n    pip install nuitka\n    python -m nuitka python -m nuitka --python-flag=-m --onefile --standalone \\\n        --assume-yes-for-downloads --output-dir=dist --script-name=SatsDecoder \\\n        --enable-plugins=tk-inter --windows-icon-from-ico=res/icon.png \\\n        --include-data-dir=res=res --noinclude-data-files=res/*.txt\n    ```\n\nThe result build can be found in the `dist` folder\n\n\n### Licensing\nSatsDecoder is licensed under GPL-3.0-or-later. It contains third-party code\nlicensed as GPL-3.0-or-later, but the majority of the codebase is licensed as MIT\n\n\n### Contributing\nContributions to SatsDecoder must be licensed as MIT.  \nThe \"main\" branch is the release branch.  \nNew branches must be created from \"dev\".  \nAll PRs must be into \"dev\".  \nPython code must be compliant or close to the PEP-8.  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaskiton%2Fsatsdecoder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaskiton%2Fsatsdecoder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaskiton%2Fsatsdecoder/lists"}