A Linux-first editor for the DJ Tech Tools MIDI Fighter Twister — configure encoders, colours, banks, and side switches without needing Windows or macOS. Ships in two flavours that share a byte-exact protocol layer: a PySide6 desktop app and a Svelte web app that runs anywhere Web MIDI does.
This is an early-tester release. Expect rough edges, missing polish, and the occasional bug.
Hardware safety. The editor only sends standard config SysEx that the official MF Utility also sends. There is no firmware-update or flash-erase code path anywhere in this codebase. Worst case, a bad mapping is recoverable in two clicks via Tools → Factory Reset.
Not affiliated with DJ TechTools. "MIDI Fighter Twister" and "DJ Tech Tools" are trademarks of DJ TechTools — this is a community project that talks to their hardware over the public MIDI/SysEx interface.
uv sync
uv run mft-editor
Or with pip:
pip install -e .
mft-editor
cd web
pnpm install
pnpm dev
Open the URL Vite prints and authorise Web MIDI when prompted.
| Path | What lives here |
|---|---|
mft_editor/ |
PySide6 (Qt) desktop editor — talks to the device over ALSA / python-rtmidi. |
web/packages/app/ |
Svelte + TypeScript web editor. Runs in any Chromium-based browser with Web MIDI. |
web/packages/core/ |
Shared protocol layer: encoder / global config types, SysEx encode/decode, colour palette. Consumable by other tooling. |
web/design-mockups/ |
Single-file HTML prototypes — d-focused.html is the basis for the screenshot above. |
docs/twister-reference.md |
Distilled protocol & hardware reference, linked back to DJTT's official docs. |
examples/ |
Sample mft-editor-v1 JSON presets you can import. |
The desktop and web editors deliberately implement the same protocol from a single byte-exact spec — round-trip parity is enforced by shared fixtures (tests/fixtures/*.json exercises both Python and TypeScript).
Bug reports, repro recipes, and patches are all welcome. If you're adding to the protocol layer, please add a fixture under tests/fixtures/ so both the Python and TypeScript implementations stay in sync.
# Python
uv run pytest
# Web
cd web && pnpm test && pnpm typecheck
LGPL-3.0-or-later. The full GPL-3.0 text it incorporates lives in LICENSE.GPL.