mftd
A thin, adaptable API for programatically configuring Midi Fighter Twister midi controllers, and integrating them in Touch Designer projects.
Firmware support
0.3.0 and later target the 2026 firmware (build 2026-06-01 or newer — the
Midi Fighter Utility gates the same behaviour on fw_version >= 0x20230c11).
That release renumbered two enums by insertion, so running 0.3.0 against older firmware fails silently rather than loudly — the stale value selects a different, valid function:
| Value | Pre-2026 meaning | 2026 meaning |
|---|---|---|
EncoderSwitchActionType 6 |
Shift Encoder (Hold) | Encoder Fine Adjust |
SideSwitchAction 12 |
Cycle Bank | Bank 2 |
Use 0.2.0 for pre-2026 firmware. 0.3.0 also adds device config addresses
33–38 (colour map, animation channels, sleep timer and animation, bank change
animations), which older firmware does not report — get_device_config()
raises on a response missing any declared address.
Build
Generate inlined source using inline-importer:
# Prepare destination
rm -f dist/mftd.py
mkdir -p dist
# Build
inline-python -p mftd -e mftd/__init__.py -o dist/mftd.py
Touch Designer Usage
When running inside TouchDesigner the library uses a midioutCHOP named midiOut to communicate with the Midi Fighter Twister. The library will create this operator if it is missing.
Metadata
Release files for mftd 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mftd-0.4.0.tar.gz | 30.9 kB | Without provenance | Details for mftd-0.4.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mftd-0.4.0-py3-none-any.whl | Python 3 | none | any | Details for mftd-0.4.0-py3-none-any.whl |
Total release size: 62.8 kB
Release files / mftd-0.4.0.tar.gz
| Download URL | mftd-0.4.0.tar.gz |
|---|---|
| Size | 30.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f87c227a28a9198cefb08767b6cb17b0852b18e42cd69d7ac20fb98ea67572b5
|
|
BLAKE2b-256 checksum How to use checksums |
656978e44a0ccb51c655523836032917e7e9b5ea450c5f7251ccd25b9e645841
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mftd-0.4.0-py3-none-any.whl
| Download URL | mftd-0.4.0-py3-none-any.whl |
|---|---|
| Size | 31.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
581990c5a5202d9edbc18c297f3b6ffb1f6e32046a8c861cf3de64483e1c16f0
|
|
BLAKE2b-256 checksum How to use checksums |
913a12a58fda7eb4d0e837005401fac3c68e19fbba4f9cfdc310de79364c46ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for mftd 0.4.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.