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
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.
| Control | Type | Message | Ch | Number | Signal | LED feedback | Verified |
|---|---|---|---|---|---|---|---|
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
sidel1Left side button 1 (top). Bank 1: CC 8 / note G#-1 on the system channel (4). The manual lists this number for a side button set to a MIDI function; which function the factory configuration gives it is not printed, so the number is the manual's, the default behaviour unconfirmed.sidel2Left side button 2 (middle). By default it decrements the bank (an internal action, no MIDI): the manual's Bank 1 table lists CC 9 / note A-1 for it only when the Utility makes it a MIDI button.sidel3Left side button 3 (bottom). Bank 1: CC 10 / note A#-1 on the system channel (4); factory function not printed.sider1Right side button 1 (top). Bank 1: CC 11 / note B-1 on the system channel (4); factory function not printed.sider2Right side button 2 (middle). By default it increments the bank (an internal action, no MIDI): the manual's Bank 1 table lists CC 12 / note C0 for it only when the Utility makes it a MIDI button.sider3Right side button 3 (bottom). Bank 1: CC 13 / note C#0 on the system channel (4); factory function not printed.
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
Embed it with one line
No import map, no build step. Change
layout, addhardware="ask"for a Connect button.<script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script> <oav-controller profile="djtechtools-midi-fighter-twister" readout></oav-controller>Or as an iframe
For places that only take an iframe. Every event arrives as a
postMessage.<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>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.
<!-- 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.
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js?profile=djtechtools-midi-fighter-twister' }));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).
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.