thd75-fw
Extract, inspect, patch, and flash firmware for the Kenwood TH-D75 amateur radio. The package provides nine command-line tools and a typed Python library, including display-theme generation and a native USB firmware flasher.
Supply an official firmware updater obtained from Kenwood. The patch catalog and hardware-qualified workflows target TH-D75 V1.03.
Install
Requires Python 3.10 or later.
pip install thd75-fw
Or install all nine CLIs with uv:
uv tool install thd75-fw
For a Python project, use uv add thd75-fw.
Quickstart
Extract the updater's firmware and data sections:
thd75-extract TH-D75_V103_e.exe ./extracted/
The output includes the main ARM firmware, display images, voice prompts, fonts, and DSP data. See the section reference for filenames and layouts, and the usage guide for extracting images and audio.
To try extraction without installing the tools:
uvx --from thd75-fw thd75-extract TH-D75_V103_e.exe ./extracted/
Tools
| CLI | Purpose |
|---|---|
thd75-extract |
Extract firmware sections from the updater |
thd75-extract-images |
Extract display images as PNG |
thd75-extract-voice |
Extract voice prompts as WAV |
thd75-list-patches |
Inspect the built-in patch catalog |
thd75-patch |
Apply patches and produce a plaintext KEX |
thd75-repack |
Apply patches to a copy of the updater EXE |
thd75-theme |
Generate a display-theme patch |
thd75-flash |
Inspect a KEX offline or flash an admitted image over USB |
thd75-serial-cipher |
Encrypt/decrypt individual serial packets |
Use COMMAND --help for options. The patch catalog explains each
patch, its required base, compatible stacks, and flashing availability.
Flashing can leave the radio unusable. Retain a verified stock recovery image and read the flashing and recovery guide before a hardware write. The native flasher admits only specific audited images; generating a patch does not automatically make its output eligible for native flashing.
Documentation
| Task | Guide |
|---|---|
| Use the CLIs or Python library | Usage |
| Choose a patch or build a supported stack | Patch catalog |
| Flash, recover stock firmware, or qualify a flash | Flashing and recovery |
| Write a patch manifest | Patch format |
| Understand ciphers, containers, and section layouts | Format reference |
| Load extracted binaries in IDA or Ghidra | Loader setup |
| Work with capture tools or experimental firmware | Firmware workspace |
| Inspect the Azimuth automation ABI | Automation reference |
| See release changes | Changelog |
The firmware/ and scripts/ research tools require a repository checkout;
their setup and hardware status are documented separately from the installed
Python package.
Development
From a repository checkout:
uv sync
make check
Tests include synthetic fixtures and integrations that use locally supplied
reference artifacts. The slow cases require --run-slow; see the
development test notes.
Credits and license
Built on DD4CR's TH-D74 research and informed by OpenWood's flasher work. Related-model research is distinguished from TH-D75 observations in the technical docs.
GPL-3.0. This project is not affiliated with or endorsed by JVCKENWOOD. See the legal and interoperability notice for the full notice and warranty terms.
Release files for thd75-fw 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| thd75_fw-0.3.1.tar.gz | 444.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| thd75_fw-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 704.3 kB
Release files / thd75_fw-0.3.1.tar.gz
| Download URL | thd75_fw-0.3.1.tar.gz |
|---|---|
| Size | 444.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
57f8fb1c4ee6abc3b64d498ab1752c7d33a2b71a9257ab0bc37abc0fb679d5dd
|
|
BLAKE2b-256 checksum How to use checksums |
ae72d53943a922e9b8a15ca76dac2cc3377c77aaf6eaf89117acb48d0ab64054
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / thd75_fw-0.3.1-py3-none-any.whl
| Download URL | thd75_fw-0.3.1-py3-none-any.whl |
|---|---|
| Size | 259.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
68b3b1810bf9b35abcbab4a8fff3f616caa5cc102698b07ef940535933fc56bc
|
|
BLAKE2b-256 checksum How to use checksums |
ae8af7d48d67dbed3bee83a3a57ff357f39db1ba8555a27bc10a9df143ce63f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log