open-audiovisual
Search GitHub

DJ TechTools

DJ TechTools Midi Fighter Twister

DJ TechTools Midi Fighter Twister is a MIDI hardware controller by DJ TechTools: 16 encoders and 22 buttons.

It sends CC on channels 1, 2, 4. The profile cites 2 sources. 6 of its controls are marked unverified: the number is our best reading, and Learn rebinds it in one move.

  • Manufacturer docs
  • LED feedback
  • 6 unverified
Kind
hardware device
Maker
DJ TechTools
Controls
38 controls
Messages
CC
MIDI channels
1, 2, 4
LED feedback
yes, lights are driven by MIDI
Signals
midi/twister/…
Port name matches
/midi\s*fighter\s*twister/i
MIDI FIGHTER TWISTER12345678910111213141516L1◀L3R1▶R3

Play DJ TechTools Midi Fighter Twister on screen Full screen ↗ Raw JSON ↗ All controllers

Drag knobs and faders · tap pads and keys · or plug the real one in and press Connect. Nothing is sent anywhere unless you add a MIDI out.

MIDI implementation

Every control of DJ TechTools Midi Fighter Twister and the message it sends

Generated from the profile file, so it is the same table the on-screen controller plays. Channels are 1–16; numbers are real MIDI numbers.

MIDI implementation of DJ TechTools Midi Fighter Twister
ControlTypeMessageChNumberSignalLED feedbackVerified
1 enc1 encoder CC · absolute 1 0 midi/twister/enc1 — yes
2 enc2 encoder CC · absolute 1 1 midi/twister/enc2 — yes
3 enc3 encoder CC · absolute 1 2 midi/twister/enc3 — yes
4 enc4 encoder CC · absolute 1 3 midi/twister/enc4 — yes
5 enc5 encoder CC · absolute 1 4 midi/twister/enc5 — yes
6 enc6 encoder CC · absolute 1 5 midi/twister/enc6 — yes
7 enc7 encoder CC · absolute 1 6 midi/twister/enc7 — yes
8 enc8 encoder CC · absolute 1 7 midi/twister/enc8 — yes
9 enc9 encoder CC · absolute 1 8 midi/twister/enc9 — yes
10 enc10 encoder CC · absolute 1 9 midi/twister/enc10 — yes
11 enc11 encoder CC · absolute 1 10 midi/twister/enc11 — yes
12 enc12 encoder CC · absolute 1 11 midi/twister/enc12 — yes
13 enc13 encoder CC · absolute 1 12 midi/twister/enc13 — yes
14 enc14 encoder CC · absolute 1 13 midi/twister/enc14 — yes
15 enc15 encoder CC · absolute 1 14 midi/twister/enc15 — yes
16 enc16 encoder CC · absolute 1 15 midi/twister/enc16 — yes
push1 button CC · momentary 2 0 midi/twister/push1 CC 0 · ch 2 · on 127 / off 0 yes
push2 button CC · momentary 2 1 midi/twister/push2 CC 1 · ch 2 · on 127 / off 0 yes
push3 button CC · momentary 2 2 midi/twister/push3 CC 2 · ch 2 · on 127 / off 0 yes
push4 button CC · momentary 2 3 midi/twister/push4 CC 3 · ch 2 · on 127 / off 0 yes
push5 button CC · momentary 2 4 midi/twister/push5 CC 4 · ch 2 · on 127 / off 0 yes
push6 button CC · momentary 2 5 midi/twister/push6 CC 5 · ch 2 · on 127 / off 0 yes
push7 button CC · momentary 2 6 midi/twister/push7 CC 6 · ch 2 · on 127 / off 0 yes
push8 button CC · momentary 2 7 midi/twister/push8 CC 7 · ch 2 · on 127 / off 0 yes
push9 button CC · momentary 2 8 midi/twister/push9 CC 8 · ch 2 · on 127 / off 0 yes
push10 button CC · momentary 2 9 midi/twister/push10 CC 9 · ch 2 · on 127 / off 0 yes
push11 button CC · momentary 2 10 midi/twister/push11 CC 10 · ch 2 · on 127 / off 0 yes
push12 button CC · momentary 2 11 midi/twister/push12 CC 11 · ch 2 · on 127 / off 0 yes
push13 button CC · momentary 2 12 midi/twister/push13 CC 12 · ch 2 · on 127 / off 0 yes
push14 button CC · momentary 2 13 midi/twister/push14 CC 13 · ch 2 · on 127 / off 0 yes
push15 button CC · momentary 2 14 midi/twister/push15 CC 14 · ch 2 · on 127 / off 0 yes
push16 button CC · momentary 2 15 midi/twister/push16 CC 15 · ch 2 · on 127 / off 0 yes
L1 sidel1 button CC · momentary 4 8 midi/twister/sidel1 — unverified
◀ sidel2 button CC · momentary 4 9 midi/twister/sidel2 — unverified
L3 sidel3 button CC · momentary 4 10 midi/twister/sidel3 — unverified
R1 sider1 button CC · momentary 4 11 midi/twister/sider1 — unverified
▶ sider2 button CC · momentary 4 12 midi/twister/sider2 — unverified
R3 sider3 button CC · momentary 4 13 midi/twister/sider3 — unverified

LED feedback is modeled for 16 of its controls: the LED column says which message lights each one.

Notes on single controls

Sources

  • manufacturer Midi Fighter Twister User Guide v1.01 (DJ TechTools)official. Appendix 1, Bank 1: encoders CC 0–15, switches CC 0–15 (switch type defaults to CC), side switches CC 8–13; the guide counts channels 0–15, so its 'channel 0' is MIDI channel 1 on the wire; encoder types CC / Note / 'Enc 3FH/41H' (relative: 65 per clockwise step, 63 per anti-clockwise step); switch actions CC hold / toggle, note hold / toggle, reset, fine, shift; RGB segment: 'a MIDI message of the same MIDI number, on channel 1' (= MIDI channel 2), 0 = inactive colour, 127 = active colour, 1–126 a colour on the scale; animation messages on the next channel; bank change notes; banks 2–4 use CC 16–31, 32–47, 48–63
  • manufacturer Midi Fighter Twister User Guide v1.03 (DJ TechTools; copy hosted by a retailer, justmusic.de)official document, third-party host. Says it in 1-based channels: 'Channel 1: Encoders & LED Rings · Channel 2: Encoder Switches (RGB) · Channel 3: Encoder Switches animations & brightness · Channel 4: System MIDI Channel (Banks & Side Buttons) · Channel 5: Shift Encoders & LED Rings'; side-button messages on the system channel (4 by default); bank-select notes on channel 4, CC 0–3; the animation values 1–16 and brightness 17–47

Notes

Models the factory configuration of the Midi Fighter Utility, Bank 1 of 4 (the unit starts on Bank 1; the middle side buttons change bank by default, an action that sends no CC). Each of the 16 encoders is two controls: the encoder (CC 0–15, channel 1, absolute 0–127) and its push switch (CC 0–15, channel 2, 127 while held, 0 on release). The encoder is endless in your hand but sends an absolute value by default. Switch an encoder to 'Enc 3FH/41H' in the Utility and it becomes relative: 65 for each clockwise step, 63 for each anti-clockwise one, which is relative "offset64" in this format (set it on the control or with learn). Banks 2–4 send encoders and switches on the same channels with CC 16–31, 32–47 and 48–63 (the v1.01 guide's bank 3 switch column skips CC 37; the encoder column does not), and the side buttons move up with the bank: none of that is modelled, and any encoder or switch you remap in the Utility leaves this table. LED feedback: send the push switch's own CC on channel 2 (value 0 = its inactive colour, 127 = its active colour, 1–126 a colour on the guide's scale) and the 11-LED ring follows a CC of the same number on channel 1: that is how a DAW or this page shows a parameter's value on the unit. Animations (strobe 1–8, pulse 9–16, rainbow 127) go to channel 3. The six side buttons send on channel 4; their numbers are the manual's but its factory function for them is not printed, so they are flagged. On the unit they sit on the left and right edges; here they are drawn beside the grid. Ring colours follow DJ TechTools' product image (a yellow-to-red gradient, row by row).

Port names it recognises

matches
/midi\s*fighter\s*twister/i
avoids
/boot/i

Signals

Every control publishes midi/twister/<control> (0..1), plus /raw; pads add /hit, encoders /delta, keys /on /off and n<note>; the last control touched is midi/twister/last.

Use it

Use DJ TechTools Midi Fighter Twister in your own work

  1. Embed it with one line

    No import map, no build step. Change layout, add hardware="ask" for a Connect button.

    html
    <script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script>
    <oav-controller profile="djtechtools-midi-fighter-twister" readout></oav-controller>
  2. Or as an iframe

    For places that only take an iframe. Every event arrives as a postMessage.

    html
    <iframe src="https://openaudiovisual.com/embed/controller/?profile=djtechtools-midi-fighter-twister&readout"
            width="720" height="656" style="border:0;max-width:100%" allow="midi"
            title="DJ TechTools Midi Fighter Twister"></iframe>
    <script>
      // every control the visitor plays arrives here
      addEventListener('message', (e) => {
        if (e.data?.source !== 'openav' || e.data.type !== 'control') return;
        console.log(e.data.detail.signal, e.data.detail.value);
      });
    </script>
  3. Send it to Ableton, TouchDesigner or Resolume

    What you play on screen leaves as real MIDI on the IAC bus (macOS) or a loopMIDI port (Windows). The steps are on the catalog page.

    html
    <!-- what you play on this controller → the IAC bus (macOS) → Ableton, TouchDesigner, Resolume -->
    <script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script>
    <oav-controller profile="djtechtools-midi-fighter-twister" midi-out="IAC" readout></oav-controller>
    <!-- Windows: midi-out="loopMIDI" · let the visitor pick a port: midi-out="ask" -->

    macOS: Audio MIDI Setup → MIDI Studio → IAC Driver → “Device is online”. Windows 11: the built-in Windows MIDI Services have a loopback (not tested by us); older Windows: install loopMIDI, add a port and use midi-out="loopMIDI".

In p5.js, with one line

The one-line injection names knobs, faders and pads by their order in this profile, the order of the table above. Add ?profile=djtechtools-midi-fighter-twister to make the on-screen controller this one; a real DJ TechTools Midi Fighter Twister is recognised by its port name.

javascript
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js?profile=djtechtools-midi-fighter-twister' }));
p5.js sketch
function draw() {
  background(20);
}

Encoders, buttons, wheels and strips are not numbered: read them as midi.cc[number] in the table above, or react in controlChange(cc, value, ch).

The whole p5.js page →

Missing

Is your controller not here?

Open an issue with the brand and model, whether you have the unit and a link to the manual. Or write the profile yourself: it is one JSON file.

GitHub

Is something in this data wrong?

Every number on this page comes from one JSON file. If it disagrees with your unit or the manual, tell us which firmware you checked and we fix the file.