Introduction

About lpminimk3

lpminimk3 is a Python package that helps you to control the Novation Launchpad Mini MK3. lpminimk3 communicates with the Launchpad using MIDI over USB. It uses the MIDI implementation for the device (specified in the device’s programmer’s reference) to control LEDs and access Launchpad Mini MK3’s various features.

Goals

  • Intuitive, object-oriented design

  • Convenient for use in script and shell

  • Access to all (or most) of the Launchpad Mini MK3 MIDI features

Hardware

../_images/mk3.jpg

The Launchpad is equipped with a variety of components, the first three being accessible from lpminimk3:

  • 64 Pads

  • 16 Buttons

  • 81 RGB LEDs

  • USB-C Socket

  • Kensington MiniSaver Slot

Features

  • Full LED control

  • Text rendering

  • Data-driven bitmap rendering

  • Data-driven movie rendering

  • Console rendering

  • Button event handling

  • Control over a network via websockets

  • Direct control of Launchpad using raw MIDI

Installation

To install the most stable version of this package, run:

$ pip install lpminimk3

To test the installation, connect your Launchpad to your computer and run:

$ python -m lpminimk3.examples.hello

Getting Started

Make sure your Launchpad is connected to the computer.

In script

Control LEDs individually:

"""Display a random array of colors for 5 seconds.
"""

from lpminimk3 import Mode, find_launchpads
import random
import time

lp = find_launchpads()[0]  # Get the first available launchpad
lp.open()  # Open device for reading and writing on MIDI interface (by default)

lp.mode = Mode.PROG  # Switch to the programmer mode

for led in lp.panel.led_range():  # Loop through all LEDs
    led.color = random.randint(1, 127)  # Set LED to a random color

time.sleep(5)  # Keep LEDs on for a while

for led in lp.panel.led_range():
    del led.color  # Turn off LED

Render text on Launchpad’s surface:

"""Scroll text from right to left across the Launchpad's surface.
"""

from lpminimk3 import Mode, find_launchpads
from lpminimk3.graphics import Text

lp = find_launchpads()[0]  # Get the first available launchpad
lp.open()  # Open device for reading and writing on MIDI interface (by default)

lp.mode = Mode.PROG  # Switch to the programmer mode

print('Watch text scroll across the Launchpad\'s surface.\n'
      'Press Ctrl+C to quit.\n')

lp.grid.render(Text(' Hello, world!').scroll())  # Scroll text indefinitely

See more examples here.

In shell

Start by finding a connected device and opening the device for reading and writing:

$ python
>>> import lpminimk3
>>> lp = lpminimk3.find_launchpads()[0]
>>> lp.open()

Query the device to ensure we can read and write to it:

>>> lp.device_inquiry()  # Query device

Switch to programmer mode to start manipulating button LEDs:

>>> lp.mode = 'prog'  # Switch to programmer mode
>>> lp.grid.led('0x0').color = 10  # Set color to yellow (Valid values: 0 - 127)
>>> lp.grid.led(1,0).color = lpminimk3.colors.ColorPalette.Red.SHADE_1  # Set from palette
>>> lp.panel.led('logo').color = 'violet'  # Set logo LED color to violet
>>> lp.panel.led('drums').color = 'green2'  # Set 'Drums' LED color to second shade of green
>>> lp.panel.led('stop').color = 'w1'  # Set 'Stop/Solo/Mute' LED color to first shade of white
>>> lp.panel.led('mute').color = 'o3'  # Set 'Stop/Solo/Mute' LED color to third shade of orange
>>> lp.panel.led('mute').color = 'r0'  # Invalid but okay, will default to 'r1'
>>> lp.panel.led('scene_launch_1').color = '#ff0000'  # Set color to red using hex
>>> lp.panel.led('scene_launch_2').color = (0, 0, 255)  # Set color to blue using rgb
>>> lp.panel.led('mute').color = 0  # Turn off LED
>>> lp.panel.led('logo').reset()  # Another way to turn off LED
>>> del lp.panel.led('stop').color  # Another way to turn off LED

Note in the above snippet that lp.grid only contains the grid buttons (i.e. the faceless white buttons) and lp.panel contains all buttons (including the logo LED at the top right corner).

Wait for and respond to button presses and releases:

>>> ev = lp.panel.buttons().poll_for_event()  # Block until any button is pressed/released
>>> ev
ButtonEvent(button='7x5', type='press', deltatime=0.0)

Or only button releases instead:

>>> ev = lp.panel.buttons().poll_for_event(type='release')  # Block until released
>>> ev
ButtonEvent(button='up', type='release', deltatime=0.0)

Pass button names as arguments to wait for specific button events:

>>> lp.panel.buttons('up', '0x0', 'stop').poll_for_event()

Render A on Launchpad’s surface:

>>> from lpminimk3.graphics import Text
>>> lp.grid.render(Text('A'))

Print A in console:

>>> Text('A').print()
  XX
 XXXX
XX  XX
XX  XX
XXXXXX
XX  XX
XX  XX

Scroll Hello, world! on Launchpad’s surface once:

>>> lp.grid.render(Text(' Hello, world!').scroll(count=1))