Launchpad Mini Mk3 — clip launcher

Novation Launchpad Mini Mk3 drives the clip player over browser-native Web MIDI (no helper app). It works with one unit or two — pick a tab; each is a complete, self-contained guide for that mode.

Two kinds of recording

CLIP RECORD
Recording into a clip. Notes: KEYS → QUEUE-REC. Knob / control moves: per-clip automation, Deluge-style — right-click a module's cardAssign to automation lane (1–8; the whole module joins the lane and its card gets a border in the lane's colour), launch a clip in that lane, then arm the lane (the card's per-lane next to its RATE control, or on a single-unit Launchpad HOLD SHIFT + that lane's top-row button; lane 8 = HOLD SHIFT + the pad directly below SHFT — the two-unit rig has no hardware arm yet, arm from the card) and just move the module's controls: every touch — screen, MIDI, Electra — records into that clip's own automation, punching in at the clip's next loop start, then overdubbing every loop. CV is never recorded: automation records your hands, a CV cable stays live modulation.
ARRANGER RECORD
The red that records your clip launches onto the song timeline (experimental). Arm it from the card's , the single-mode Control-Mode REC pad, or the pair deck's top-left REC button (CC 91). It never records notes or knob moves.

1 Launchpad — one device, four views

One Launchpad does everything. The lone device is a four-view surfaceGRID (launch clips), CLIP (edit notes; its KEYS sub-view plays, clip-records + arpeggiates), ARRANGER (TBD) and CONTROL (the performance deck) — laid over a permanent top-row nav bar that never changes meaning, with a one-hand SHIFT layer. New to the device? Start with the Walkthrough tab. Setup + the shared top-row / SHIFT foundation sit in the two collapsible panels just below the tabs.

Setup — connect the device
  1. Add a launchpad control and a clip player to the canvas.
  2. Click Connect single Launchpad on the card (grants Web-MIDI/sysex on the first click). The one device binds — no press-a-pad handshake — and auto-binds the first clip player.
  3. The device starts in GRID view. A reload restores your view; hit Connect single Launchpad once to re-attach the hardware (browser permission needs a click).
Shared in every view — the permanent top row, SHIFT, the colour language + the automation ARM layer

The permanent top row — your compass

GRIDCLIPARRCTRLUNDOREDOSHFTTRANSPORTVIEWS · Grid · Clip · Arranger · ControlUNDO / REDOSHIFT
The 8 top-row buttons (CC 91–98) mean the SAME thing in every view. Left→right: transport (red stopped / green playing) · GRID · CLIP · ARRANGER · CONTROL (purple; the active view is bright) · UNDO · REDO (orange) · SHIFT (yellow). The 8×8 below is dark here only to spotlight the row.
  • Transport (CC 91): start / stop the rack transport (TIMELORDE). Red = stopped, green = playing — the only red/green button on the row.
  • GRID · CLIP · ARRANGER · CONTROL (CC 92–95): the four view buttons — dim purple when you're not in them, bright purple for the one you're in. While KEYS is open (a sub-view of Clip) the CLIP button also lights bright; pressing any view button leaves KEYS for that view.
  • UNDO / REDO (CC 96 / 97): launchpad-scoped — they revert only this launchpad's persistent clip edits (div, swing, length, paste, note content, scale), never a collaborator's edits and never a transient launch. Orange when there's something on the stack, dim when empty.
  • SHIFT (CC 98): the alt-layer key (next). Dim yellow off, bright yellow while held. Momentary hold only — a short tap does nothing; there is no latch.
  • AUTOMATION ARM — HOLD SHIFT + a lane's top button (every view): while SHIFT is held, the top row becomes the per-lane automation arm map: pressing column 1–7 toggles that lane's clip-automation record (red pulse = armed, dim red = available), and the press is consumed — shift+▶ never touches the transport, shift+GRID never switches views, shift+UNDO never undoes. Lane 8's top button IS the shift button, so lane 8 lives on the pad directly below SHFT (the topmost 8×8 row, rightmost column) — while shift is held, tap it to toggle lane 8's arm (it lights in the arm map too). Because this lives on the global row, you can arm or disarm any lane from any screen — and an ARMED lane's top button red-flashes over its normal colour all the time, in every view, as the always-visible record indicator.

The arm layer in pictures

1234567SHFTARM MAP — press = toggle that lane (red pulse = armed · dim red = available)SHFT — lane 8 = the pad below
SHIFT held — the top row becomes the PER-LANE ARM MAP, in EVERY view: columns 1–7 are lanes 1–7 (red pulse = armed — lane 3 here; dim red = available; the press toggles the arm and is consumed). Column 8 keeps the SHIFT LED — lane 8 lives on the PAD DIRECTLY BELOW SHFT (topmost 8×8 row, rightmost column; dim red = available, red pulse = armed), tapped while shift is held.
GRIDCLIPARRCTRLUNDOREDOSHFTTRANSPORTVIEWS · Grid · Clip · Arranger · ControlUNDO / REDOSHIFT
Shift released — the compass comes back, but ARMED lane 3's button keeps RED-FLASHING, alternating with its base colour (shown on the red phase), in every view, until the lane is disarmed. A RED-FAMILY base (the stopped transport button) alternates with a DIM red instead, so the blink stays legible.

The shift layer + tap-to-arm — one-handed by design

Every right-column button has a plain meaning and a shift meaning. SHIFT (CC 98) is a momentary hold: the alt layer is active only while you physically hold SHIFT (bright yellow) — a short tap does nothing, there is no latch. And because you can't hold a function button and tap a clip at once, the Grid's compound functions (Copy · Paste · Clip-Div · Length) are tap-to-ARM: hold SHIFT and tap the function → it arms (brightens; only one at a time) → release SHIFT and tap a target → it applies and auto-disarms. Copy and Paste stay sticky across the release so the no-shift matrix hosts their target; tap the armed button again to cancel; a stale arm auto-clears after ~4 s.

Navigation palette (permanent top row)

transport — stopped red — CC 91; tap to start
transport — playing green — CC 91; tap to stop
view — inactive dim purple — a view you are NOT in (Grid · Clip · Arranger · Control)
view — active bright purple — the current view (Clip is bright while KEYS is open)
undo / redo — available orange — CC 96 / 97; a persistent edit is on the stack
undo / redo — empty dim orange — nothing to undo / redo
shift — off dim yellow — CC 98 idle
shift — held bright yellow — momentary hold (there is no latch)

Right-column function taxonomy

pattern green — content: copy · paste · double · follow · scales · row-nav
pattern — armed / selected bright green — armed (tap-to-arm) or the selected scale / arp direction
timing blue — clip divider · swing ± · step-scroll · arp division
timing — armed / jump bright blue — armed clip-div, or a block / page jump under shift
length yellow — edit clip length (owner override; not green)
KEYS entry bright orange — open the KEYS keyboard (owner override)
system orange — arp range · arp on/off · arp latch
system — off dim orange — that system toggle is off
copy buffer turquoise (pulses) — the Paste button while the clipboard holds a clip
swing — raising purple ramp — Swing+ nudged up (pale → bright by amount)
swing — lowering blue ramp — Swing− nudged down

GRID Mode — launch clips

GRIDCLIPARRCTRLUNDOREDOSHFTKSVROW ▶CHANNELS / LANES 1 → 8
GRID view (no shift). The 8×8 is the clip matrix, TRANSPOSED to match the on-screen card: each COLUMN is a channel/lane (1–8 left→right), each ROW is a clip slot (top row = slot 1). Clip states paint in each CHANNEL'S OWN colour: dim = loaded · solid = playing · flashing = queued-launch · flashing RED = queued-stop (red is the one semantic exception). Right column = ROW / scene launch (amber where the scene has clips, dark where empty; the top row flashes green — its scene holds the queued clip).
  • Every channel's clip states glow in that channel's own colour (the colour you picked on the card, else its default hue) — dim = loaded, solid full brightness = playing, flashing = queued-launch. Only queued-stop flashes RED on every channel, so a pending stop always reads. The pad matches the card's swatch for the same channel.
  • Tap a loaded clip (dim) to launch it — it flashes (queued) until the next quantize boundary, then turns solid (playing). Tap the playing clip to queue a stop (flashes red until the boundary).
  • Columns are channels, rows are slots — the same orientation as the ClipplayerCard, so the pad you see lit is the clip you see on screen.
  • Row / scene launch (right column): a grid row is one clip per channel — an Ableton-style scene / song section. Scene button N fires that row's slot across every channel that has a clip and stops the channels that don't. It flashes green while any channel in that row is queued. The column is a scrolling window over up to 64 scenes (slide it with Grid + shift SCR▲ / SCR▼; an empty scene is dark and its launch is a no-op).
  • Empty pads glow dim red while ARRANGER RECORD is armed.

Single-tap launches · double-tap edits

A single tap launches immediately (never delayed). A double-tap of the same pad (~¼ s) instead selects that clip and opens it in CLIP mode — and it reverts the channel to whatever play/queue state it was in before the first tap, so editing never changes whether a clip plays. Double-tap an empty pad to create a fresh clip and edit it. The selected clip is what the CLIP and KEYS buttons act on, and its channel is the one Swing ± nudges.

GRID + shift — the function palette (home of copy/paste)

1234567SHFTKSVCOPYPASTEDIVSW+SW−LENSCR▲SCR▼CHANNELS / LANES 1 → 8
GRID + shift (SHIFT HELD, bright yellow). The right column becomes the function palette, top→bottom: COPY · PASTE · CLIP-DIV · SWING+ · SWING− · LENGTH · SCR▲ · SCR▼. Green = pattern, blue = timing, yellow = length, amber = scene-scroll. PASTE shows turquoise here because the clipboard holds a clip. While shift is held, the TOP ROW is the per-lane automation ARM MAP (dim red = available — none armed here).

That shift-state top row is the automation ARM MAPsee the arm layer in pictures ↑ (in the shared foundation above).

  • COPY (green): arm, then tap a loaded clip → snapshot that CLIP to the clipboard, OR tap a ROW / scene-launch button → snapshot the WHOLE SCENE (all 8 channels at that slot). For a scene target, release SHIFT first so the column shows the ROW ▶ buttons again — while shift is held, that column is still this function palette (clip-pad targets work under either shift state). The clipboard is typed: a clip buffer pulses turquoise, a scene buffer pulses amber. Re-tap COPY while loaded to clear it. (Copy is a snapshot — edit after copying? re-copy.)
  • PASTE (green; only arms when the clipboard holds something): arm, then tap a clip pad to drop a clip buffer there, or a ROW / scene-launch button (again with SHIFT released) to full-REPLACE that whole scene from a scene buffer. The paste is type-gated — clip→clip and scene→scene apply; clip→scene and scene→clip are no-ops (nothing is written). A scene paste is a single undo step. Copy/paste carries each clip's recorded automation with it (the envelope belongs to the clip): the destination's old automation is replaced — or cleared when the source clip had none. This Grid palette is the ONLY copy/paste on the Launchpad — clips and scenes, right here; the note editor deliberately has none. (PASTE-REV, the time-reversed clip paste, is a pair-deck hold — see 2 Launchpads; it pastes the automation time-reversed to match.)
  • CLIP-DIV (blue): the per-clip divider. Arm, then tap a clip repeatedly to cycle its own clock division (1/8 · 1/4 · 1/2 · 1 · 2x · 4x). While you cycle, the target clip pad itself pulses in time with the chosen division. It writes once when you disarm, applied at the clip's next loop start. A clip's own div overrides its channel's CONTROL-mode RATE.
  • SWING+ / SWING− (blue): direct ±2 % nudges (one per press) to the selected channel's swing — odd steps slide late for a shuffle. The buttons ramp purple while you raise and blue while you lower, and both flash green on the nudge that returns swing to dead-centre (straight).
  • LENGTH (yellow): arm, tap a loaded clip → its length page opens (a full-device takeover, detailed below; EXIT returns to Grid).
  • SCR▲ / SCR▼ (amber): slide the scene-launch window UP (toward scene 1) / DOWN (up to 64 scenes; DOWN lazily reveals one empty scene past your deepest clip; each button dims at its scroll limit). Direct — no arming.

Scene repeats — HOLD GRID + HOLD a scene button

Scenes loop forever by default (repeats = infinite). To make a scene play N times and then auto-launch the next scene down (skipping empty rows; the last content scene keeps looping), set its repeat count with a 3-button, two-hands gesture: HOLD the GRID button (permanent top row) + HOLD one of the 8 scene-launch buttons. The scene press under GRID-hold selects only — it never launches.

GRIDCLIPARRCTRLUNDOREDOSHFT161HOLD
REPEAT-COUNT view while HOLDING GRID + HOLDING the top scene button — shown: 16 repeats, so pads 1–16 (the top two rows) glow system orange, counted row-major from the upper-left. ALL 64 pads lit = INFINITE (the default). The held scene button stays bright amber. Releasing either held button returns to the normal grid.
  • While both buttons are held, tap pad k (1-indexed row-major: upper-left = 1, second in the top row = 2, …) to set k repeats (1–63); pad 64 (bottom-right) sets it back to INFINITE. The bar updates live as you tap, and always shows pads 1..N lit for count N.
  • Scroll-aware: the held scene button is position-relative through the scene window — with the column scrolled (SCR▲/▼), button i edits scene offset + i, the same scene it would launch.
  • After N passes of the scene's longest clip (its length × rate/div, frozen at launch — mid-count edits never move the scheduled boundaries), the next content scene down launches through the normal quantized launch path — arranger-record captures it, LEDs update, peers stay in sync.
  • Manual always wins: launching any scene mid-count re-anchors the count fresh (re-launching the SAME scene resets it to zero); launching an individual clip outside the scene cancels the countdown until the next scene launch. Muting lanes never voids or alters the count; stopping every scene lane cancels it.
  • The count is saved with the patch and shows on the card as a small ×N flair beside the scene's row (live p/N while counting; infinite shows nothing).
  • Counts travel with the scene: a whole-scene COPY/PASTE carries the repeat count along with the clips and their automation — a full-replace paste sets the target scene's count from the copied one (and clears it when the copied scene had none).
  • No collision with the automation arm: that gesture is SHIFT + a top-row button — this one is a GRID hold without shift.

Clip-default probability — SHIFT + a clip pad

Every note has a firing probability, always: until you set a note's own, it uses the clip's probability. Give a WHOLE clip a default firing probability — the chance every note that has no probability of its own rolls each time it plays. HOLD SHIFT and press a clip pad (one that already holds a clip, with no function armed) → the 8×8 becomes a 40-level ORANGE bar over the top 5 rows (the orange echoes the clip-default note colour). Tap pad k = k × 2.5%; pad 40 = 100% (every note fires). The page auto-returns to the grid on that tap; a dark-row tap cancels.

GRIDCLIPARRCTRLUNDOREDOSHFT1
CLIP-DEFAULT PROBABILITY page (shown: 50% → pads 1–20 lit ORANGE over the top 5 rows). SHIFT + a Grid clip pad opens it; the next pad tap writes the clip’s default and returns. The default is used by every note that has not had its own probability set — in the note editor those notes render orange (∝ the default), a note using its own probability renders purple, and any effective 100% is white.
  • Precedence: once a note has its OWN probability it uses THAT value in all cases; a note that has none follows the clip default; with neither it always fires. So the default colours only the notes with no probability of their own (they turn orange in the editor); notes using their own probability stay purple (white at effective 100%).
  • It gates playback, and a note pins over it: a clip default of 0% silences every note that follows it — but a note set to 100% fires 100% (white) and thereby sits ABOVE a lower clip default, and a note set to 50% fires 50% even under a 100% clip. A note's own probability is used as-is, including exactly 100% (no delete, no special-casing). Setting the clip default to 100% clears the clip default (every note then fires unless it has its own lower value; old clips stay byte-identical).
  • Under shift an armed copy / paste / clip-div / length still consumes the clip-pad tap (unchanged); a no-shift tap still launches. Empty pads don't open the page (there's no clip to carry a default). Single-unit only — on the card, right-click a clip pad → note probability.
  • The bottom-right clip pad (7,7) is claimed by the lane-8 arm from every view, so a SHIFT-tap there arms lane 8 rather than opening that clip's default-probability page. Set that clip's default from the card instead: right-click the clip pad → note probability.

LENGTH-EDIT — set an exact clip length

123EXITEND BLOCK 1 → 8
LENGTH-EDIT page (shown: 3 blocks, end-step 4 → 36 steps). A full-device takeover. Bottom row = end BLOCK (1–8, ×16 steps each); the next two rows = end STEP (1–8, then 9–16). The bright pad is the current end — tap to set. Non-destructive; EXIT (top scene button) returns to where you came from.

Length = (endBlock−1)×16 + endStep, up to 128. Each clip's length is independent — polymeter is the point — and all playing clips re-align to step 1 when the transport starts (or on a RESET).

Clip-state colours (in the channel's own colour)

empty slot off no clip here (glows dim red while ARRANGER RECORD is armed)
loaded clip static dim has notes, stopped — DIM in the channel’s own colour
playing SOLID running now — full-brightness channel colour (steady; a blinking pad means queued, not playing)
queued-launch flash flashes in the channel’s colour until the loop boundary
queued-stop flash RED will stop on the boundary — always red, whatever the channel colour
scene / ROW launch (right col) amber fire one slot-row across all 8 channels; dark = empty scene; flashes green while queued

Reference

permanent top row (every view)CC 91 = transport (red stopped / green playing) · 92 = GRID · 93 = CLIP · 94 = ARRANGER · 95 = CONTROL (purple; bright = active) · 96 = UNDO · 97 = REDO (orange) · 98 = SHIFT (yellow: dim off / bright held). This row NEVER changes meaning per view
SHIFT (CC 98)MOMENTARY HOLD — effective only while physically held down (bright yellow); a short tap does nothing (there is no latch). HOLD shift + tap a right-column / top-row function to use its shift meaning. Grid compound functions arm on the held tap and stay sticky for their target, so nothing needs a permanent second hand
AUTOMATION ARM (HOLD SHIFT + top row)while SHIFT is HELD, the top row becomes the PER-LANE ARM MAP: press column 1–7 to toggle that lane’s automation record (red pulse = armed · dim red = available); lane 8 = the pad DIRECTLY BELOW SHFT (topmost 8×8 row, rightmost column), lit in the arm map. Works from EVERY view; the press is consumed (no transport/view/undo/launch side-effect). An armed lane’s button red-flashes over its normal colour all the time
UNDO / REDO (CC 96 / 97)launchpad-scoped: undoes only THIS launchpad’s persistent clip edits (div / swing / length / paste / content / scale) — never a collaborator’s edit, never a transient launch. Lit orange when the stack has something; dim otherwise. Under SHIFT these presses are the lane 6/7 arm toggles instead
GRID — the clip matrixcolumn = channel / lane (1–8 left→right), row = clip slot (top row = slot 1). Single-tap = launch / stop (queued to the boundary). DOUBLE-TAP a clip = select it + open CLIP on it (empty pad = create a clip). No-shift right column = ROW / scene launch — a SCROLLING window of position-relative buttons over up to 64 scenes (slid by Grid+shift SCR▲/SCR▼)
CLIP-DEFAULT PROBABILITY — SHIFT + a clip padSHIFT + press a clip PAD (with NO armed function) → the 8×8 becomes a 40-level ORANGE bar (top 5 rows; each pad = 2.5%) for that clip’s DEFAULT firing probability. Tap pad k = k×2.5%, pad 40 = 100% (clears the clip default); the page auto-returns on the tap, a bottom-3-row tap cancels. The default is used by EVERY note with no probability of its own (a note’s own prob is used as-is, incl 100% which pins above the default). Opens only on a pad holding a clip; single-unit only. An armed copy/paste/div/len still consumes the tap; a no-shift tap still launches. Also on the card: right-click a clip pad → “note probability”
GRID + shift right columntop→bottom: COPY · PASTE · CLIP-DIV · SWING+ · SWING− · LENGTH · SCROLL▲ · SCROLL▼ (amber). Copy / Paste / Clip-Div / Length are TAP-TO-ARM (tap → arm → tap a target). Copy + a ROW/scene press grabs the WHOLE SCENE (all 8 lanes) — release SHIFT first so the column shows the ROW ▶ buttons (clip-pad targets work under either shift state); Paste is type-gated (clip→clip + scene→scene apply, the cross-type pastes are no-ops). Swing ± are direct ±2 % nudges on the SELECTED channel. SCROLL ▲▼ slide the scene window (up to 64 scenes; each dims at its limit)
SCENE REPEATS — HOLD GRID + HOLD a scene buttonthe 8×8 becomes the orange REPEAT-COUNT view for that scene (no shift — SHIFT+top-row stays the arm map). Tap pad k (row-major from the upper-left) = k repeats (1–63) · pad 64 = INFINITE (default). Pads 1..N stay lit for count N; all 64 lit = infinite. The held button is POSITION-RELATIVE through the scene scroll (button i edits scene offset+i); the press never launches. Release either button = back to the grid. After N passes of the scene’s longest clip (frozen at launch) the next content scene down auto-launches via the normal quantized path

Hardware protocol (confirmed against the device)

8×8 pads (programmer mode)note = row*10 + col · 11 = bottom-left · 88 = top-right
top row buttonsCC 91 · 92 · 93 · 94 · 95 · 96 · 97 · 98 (left → right)
right scene column (top→bottom)CC 89 · 79 · 69 · 59 · 49 · 39 · 29 · 19
per-LED full RGBF0 00 20 29 02 0D 03 03 <pad> <R> <G> <B> F7 (0–127)
Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo