Pad Ripple

Read with AI
All docs in one file (llms-full.txt)
midi_pad_ripple #I/O #Node
Pad Ripple

A node that treats the grid of a controller with RGB pads as a small display and spreads ripples of light out from the pad you press. When it receives a NoteOn within the grid range, a ripple is born at that position; every frame it calculates the intensity of each pad and sends NoteOn only to the pads whose value changed (differential sending). Any number of ripples can run at once, and where they overlap they are combined by taking the maximum intensity.

The note layout is assumed to be note = Note Offset + row × Cols + column.

  • Device — the destination device (kept by name)
  • Channel — 0–15, Note Offset — 0–127
  • Cols / Rows — the number of columns and rows in the grid. Each 1–16 (default 8 × 5)
  • Vel Core / Vel Mid / Vel Dim — the velocities used for the crest, middle, and tail of the wave, which are the model’s color palette numbers. 0–127 (the defaults are APC40 mk2’s white 3 / orange 9 / red 5)
  • Speed — how fast the ripple spreads (pads per second). Clamped to 0.5–60 (default 10)
  • Burst — a trigger that emits one ripple from the center of the grid. It lets you check operation without pads on hand

The conversion from intensity to velocity has three steps. Above 0.66 is Core, above 0.33 is Mid, above 0.06 is Dim, and anything lower is off (velocity 0).

There is no device selection on the input side. Notes on the specified Channel and within the grid range, from every enabled MIDI input device, become ripple centers.

When you change Device / Channel / Note Offset / the grid size, it rebuilds the cache after turning off the pads that were lit under the old settings. Deleting the node likewise attempts to turn everything off (if the device has already been unplugged, pads may stay lit).

Input ports

Port IDType
Speedfloat
Bursttrigger

Output ports

None

Scriptable members

PathType
speedInputfloat
currentDeviceNamestring
currentChannelint
currentNoteOffsetint
currentColsint
currentRowsint
currentVelCoreint
currentVelMidint
currentVelDimint

Synapse Apps (scripting)

await synapse.modules.create({ type: "midi_pad_ripple" })