Skip to main content

thd75-fw

CI codecov Python 3.10+ License: GPL v3 Typed

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)

Source distribution for thd75-fw 0.3.1
File Size Uploaded
thd75_fw-0.3.1.tar.gz 444.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for thd75-fw 0.3.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page