open-audiovisual
Search GitHub

Arturia

Arturia MiniLab 3

Arturia MiniLab 3 is a MIDI hardware controller by Arturia: 8 pads, 25 keys, 8 knobs, 1 encoder, 4 faders and 2 touch strips.

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

  • Manufacturer docs
  • Artist's TouchDesigner tool
  • Community notes
  • 1 unverified
Kind
hardware device
Maker
Arturia
Controls
48 controls
Messages
Pitch bend · CC · Note
MIDI channels
1, 10
LED feedback
none sent
Signals
midi/minilab3/…
Port name matches
/minilab\s*3/i
MINILAB 3MiniLab 3ShiftHoldOct−Oct+PitchModMainKNOBS12345678FADERSS1S2S3S4PADS

Play Arturia MiniLab 3 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 Arturia MiniLab 3 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 Arturia MiniLab 3
ControlTypeMessageChNumberSignalLED feedbackVerified
Pitch pitch touch strip Pitch bend · springs to centre 1 0–16383 · centre 8192 midi/minilab3/pitch — yes
Mod mod touch strip CC 1 1 midi/minilab3/mod — yes
Main enc encoder CC · relative (offset64) 1 28 midi/minilab3/enc — unverified
1 knob1 knob CC 1 74 midi/minilab3/knob1 — yes
2 knob2 knob CC 1 71 midi/minilab3/knob2 — yes
3 knob3 knob CC 1 76 midi/minilab3/knob3 — yes
4 knob4 knob CC 1 77 midi/minilab3/knob4 — yes
5 knob5 knob CC 1 93 midi/minilab3/knob5 — yes
6 knob6 knob CC 1 18 midi/minilab3/knob6 — yes
7 knob7 knob CC 1 19 midi/minilab3/knob7 — yes
8 knob8 knob CC 1 16 midi/minilab3/knob8 — yes
S1 s1 fader CC 1 82 midi/minilab3/s1 — yes
S2 s2 fader CC 1 83 midi/minilab3/s2 — yes
S3 s3 fader CC 1 85 midi/minilab3/s3 — yes
S4 s4 fader CC 1 17 midi/minilab3/s4 — yes
1 pad1 pad Note · velocity 10 36 · C2 midi/minilab3/pad1 — yes
2 pad2 pad Note · velocity 10 37 · C#2 midi/minilab3/pad2 — yes
3 pad3 pad Note · velocity 10 38 · D2 midi/minilab3/pad3 — yes
4 pad4 pad Note · velocity 10 39 · D#2 midi/minilab3/pad4 — yes
5 pad5 pad Note · velocity 10 40 · E2 midi/minilab3/pad5 — yes
6 pad6 pad Note · velocity 10 41 · F2 midi/minilab3/pad6 — yes
7 pad7 pad Note · velocity 10 42 · F#2 midi/minilab3/pad7 — yes
8 pad8 pad Note · velocity 10 43 · G2 midi/minilab3/pad8 — yes
Keys keys keys Note · velocity 1 48–72 (C3–C5) midi/minilab3/keys/on · midi/minilab3/keys/off · midi/minilab3/n48…n72 — yes

LED feedback is not modeled for this one yet, so OAV does not light its LEDs. Every control still plays and sends its message.

Notes on single controls

Sources

Where this profile comes from

Che-Yu Wu's TouchDesigner tool, recorded from his own MiniLab 3: base_minilab3 → out_knob (knob1–8 ← CC 74 71 76 77 93 18 19 16), out_slider (s1–s4 ← CC 82 83 85 17), out_pad (pad1–8 ← ch10 notes 36–43), out_note (25 keys, notes 48–72), out_pitch (mod CC 1 + pitch bend). Device table: in-device "Minilab3MIDI", channel 1. TouchDesigner's MIDI In CHOP names channels 1-based (ch1ctrl75 = CC 74, ch10n37 = note 36); the numbers here are real MIDI numbers. 260830 minilab3 midi.toe

Notes

Pad pressure type is not documented: poly aftertouch is followed automatically if the unit sends it. Pad RGB LEDs are SysEx-only (not sent; sysex stays off).

Port names it recognises

matches
/minilab\s*3/i
prefers
/midi/i
avoids
/din/i /thru/i /mcu/i /alv/i

Signals

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

Use it

Use Arturia MiniLab 3 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="arturia-minilab3" 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=arturia-minilab3&readout"
            width="720" height="468" style="border:0;max-width:100%" allow="midi"
            title="Arturia MiniLab 3"></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="arturia-minilab3" 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=arturia-minilab3 to make the on-screen controller this one; a real Arturia MiniLab 3 is recognised by its port name.

javascript
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js?profile=arturia-minilab3' }));
In your sketchControlMessage
knob11 knob1CC 74 · Ch 1
knob22 knob2CC 71 · Ch 1
knob33 knob3CC 76 · Ch 1
knob44 knob4CC 77 · Ch 1
knob55 knob5CC 93 · Ch 1
knob66 knob6CC 18 · Ch 1
knob77 knob7CC 19 · Ch 1
knob88 knob8CC 16 · Ch 1
fader1S1 s1CC 82 · Ch 1
fader2S2 s2CC 83 · Ch 1
fader3S3 s3CC 85 · Ch 1
fader4S4 s4CC 17 · Ch 1
pad11 pad1Note 36 · C2 · Ch 10
pad22 pad2Note 37 · C#2 · Ch 10
pad33 pad3Note 38 · D2 · Ch 10
pad44 pad4Note 39 · D#2 · Ch 10
pad55 pad5Note 40 · E2 · Ch 10
pad66 pad6Note 41 · F2 · Ch 10
pad77 pad7Note 42 · F#2 · Ch 10
pad88 pad8Note 43 · G2 · Ch 10
notePressed(note, velocity)48–72 (C3–C5)a key goes down
p5.js sketch
function draw() {
  background(knob1 * 255);   // 1 · CC 74
  circle(width / 2, height / 2, 50 + knob2 * 300);   // 2 · CC 71
}

function padPressed(n, velocity) {      // n = 1…8, as in the table
  circle(random(width), random(height), velocity * 100);
}

function notePressed(note, velocity) {   // a key goes down
  circle(random(width), random(height), velocity * 100);
}

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.