MPE Insight User Guide
A real-time performance environment for expressive MIDI and MPE data. This guide covers every module, setting, and workflow.
What is MPE?
MIDI Polyphonic Expression assigns each note its own MIDI channel, enabling independent pitch bend, pressure, and timbre per finger.
What MPE Insight does
It reads every MPE message in real time and routes it to nine modules at once: eight visual analysis engines plus the DRIFT processor.
Five expression signals
Pressure · Pitch Bend (Glide) · Timbre (CC74) · Velocity · Release Velocity, all tracked per note, per channel.
No setup required
Connect any MIDI keyboard, open MPE Insight, select your MIDI input, everything runs immediately. Without an MPE controller, arm DRIFT with one click and it supplies the per-note expression. That switch is the only setup step there is: the app always starts with DRIFT off.
Requirements
Operating system: Windows 10 version 1803 or later, or Windows 11, 64-bit, or macOS 12 or later on Apple silicon. On Windows the app runs on WebView2, which is pre-installed on all modern systems and is where the 1803 floor comes from. The macOS build is Apple silicon only, Intel Macs are not supported. MPE Insight is sold as a direct download, on Steam and on the Mac App Store; there is no Linux build.
Graphics: Any modern GPU, a dedicated one is recommended for FORGE. Two FORGE passes, Point Cloud and Cells, additionally need WebGL2, which every current system provides. Without it those rows grey out rather than disappear, and nothing else is affected.
MIDI controller: Any class-compliant MIDI device. An MPE controller sends five expression dimensions per note straight away. With an ordinary keyboard, the built-in DRIFT processor generates that per-note pressure, pitch and timbre motion itself, so every module, and every synth downstream, receives a real MPE stream. No drivers or plugins required, MPE Insight reads standard per-channel MIDI messages directly.
Controllers that already send MPE include:
None of these is a requirement. An ordinary keyboard, a pad controller or a .mid file reaches every module the same way, with DRIFT supplying the per-note expression.
First Launch
-
1
Activate your license (direct download only)
If you bought MPE Insight from the website, enter your license key in the activation screen. The key is in your purchase confirmation email. Format: XXXX-XXXX-XXXX-XXXX.
Copies from the Mac App Store and from Steam need no key and no sign-in of any kind. There is no activation screen in those builds, so start at step 2.
-
2
Connect your MIDI controller
Plug in your device before or after launching, MPE Insight detects new devices automatically.
-
3
Select your MIDI input
Click the MIDI input indicator in the toolbar. A list of connected devices appears, click to activate one or more.
-
4
Play
All active modules respond immediately to incoming MPE data.
MIDI Signal Flow
Every source (your controller, the 🎞 MIDI File player, the demo engine) runs through a single router, optionally through the DRIFT processor, then out to the visual modules, your synth, and the recorder. The recorder's exported .mid can be re-imported and run through DRIFT all over again, and the visual modules can in turn feed their live picture into FORGE, alone or combined.
MIDI Input
Click the MIDI input status indicator in the toolbar to open the device list. Each device shows its manufacturer name and a green dot when active. Multiple devices can be enabled simultaneously.
MPE Insight receives standard MIDI and MPE messages: Note On/Off, Poly Aftertouch, Channel Pressure, Pitch Bend, CC74 (Timbre/Brightness), Mod Wheel, Program Change, and MIDI Clock.
The MIDI file player
The 🎞 MIDI File pill in the toolbar plays a standard .mid file into the app as if it were arriving from a controller, so every module, the Stream Log and the recorder react to it exactly as they do to hardware, and it reaches the MIDI output ports the same way. Dropping a .mid anywhere in the window loads it.
What the file says about itself is read along with the notes. Its tempo drives the transport, its time signature sets the beats per bar, so the beat lamp, the count-in, the live bar grid and the prefilled time signature of the sheet export all follow it; its key signature sets the key of every Grand Staff, so the accidentals are spelled the way the piece is written; and its lyrics run as a line under the Grand Staff's Time view, each syllable arriving at its own moment.
Bend range
Pitch bend arrives as a position, never as an interval, so how far that position really reaches is something the instrument has to declare. It declares it per channel, with RPN 0, and MPE Insight reads that declaration and uses it everywhere a bend is drawn or read out in semitones. Until an instrument says otherwise the MPE default of 48 semitones per note applies, so a controller set to anything else is drawn at its true deflection from the moment it announces itself, without a range setting of your own anywhere. Most controllers send that announcement only at power-up or when their zone changes, which is why the MIDI Stream Log lists it on connect rather than while you play. Where a module offers fixed values beside Auto, a fixed value is a display zoom for making small bends legible: it changes the picture, never the incoming data.
The bend wheel and the notes under it. On an MPE instrument the notes live on member channels while the bend wheel sends on the master channel, and the sound engine adds the two together, exactly as MPE prescribes. Every module reads it the same way: a pull on the wheel moves every note of that zone, so a held chord travels as a block while a finger glide beside it still bends only its own note. The two are added in semitones and not in wheel positions, which matters because a member channel usually declares 48 semitones and a master wheel 2: what you see is the interval that really sounds, rather than a wheel drawn 24 times too large. If you want the gesture itself to read bigger, a module's own Pitch Bend Range set to 2 makes a full wheel a full deflection, which is what that control is for.
Playing without a controller
The ⌨ Play pill in the toolbar holds both ways to make notes without hardware: Typing Keys and Mouse Mode. Whichever you use, the notes travel the same path as a plugged in controller, so all modules, the Stream Log and the recorder react exactly as they would to real hardware, and both reach your MIDI output ports on their own, with or without MIDI Thru.
Typing Keys
Play with your computer keyboard.
The layout is the one a pianist already knows: two manuals, black keys physically above their white keys. The upper manual starts on Q, the lower one on Z, and both span an octave plus its top C, so they overlap on a single shared note like the two halves of one keyboard.
Upper manual
White keys Q W E R T Y U I, black keys 2 3 5 6 7.
Lower manual
White keys Z X C V B N M , black keys S D G H J.
Performance keys
Space is the sustain pedal, Shift accents the note. The octave moves with ↑ ↓ or the numpad + − keys, so you never have to reach for the mouse mid phrase.
Both manuals always start on a C, because that is the only anchor where the black key row lines up with the keys under it. Every key of the selected keyboard size stays reachable: at the lowest step the block hangs over the bottom edge the way an octave switch on a hardware controller does, so the three keys below C1 on an 88 key layout can be played too, while the block's own keys below the keyboard simply are not drawn.
Keys are matched by their physical position, not by the letter printed on them, so the geometry is identical on QWERTY, QWERTZ and AZERTY boards. While Typing Keys is armed, the Keyboard module prints each mapped key's letter onto the piano, using your own keyboard layout where the system reports it.
Glide. Tick Glide in the popover and the typing keys become a mono lead: the first key you press sounds, and every key you press while it is held slides the pitch there in the time set on the slider, from 10 ms to 2 s. Letting go of a key jumps the pitch at once, it never slides: release the first key and the note sits on the second, release the second and it is back on the first. The last key to come up ends the note. Chords are off while Glide is on.
Mouse Mode
The other way in, and the expressive one: click or touch the Keyboard or PB / Mod module to send real MPE notes. Each pointer gets its own member channel, so multi touch chords work. Drag along X for Pitch Bend, up for Pressure, down for CC74. Both playable modules show a coloured frame while Mouse Mode is armed.
Channel 1 only. Tick this in the popover and every mouse note leaves on channel 1 as plain MIDI, not MPE, for a synth or a DAW track that listens on one channel. Typing Keys and the PB / Mod wheels already send there, so with it on, everything you play yourself arrives on the same channel. What changes is the expression: on one channel bend, pressure and CC74 are channel wide, so with several fingers on a touch screen the last one to move sets them for every note held, and lifting one finger resets them for the others. With one pointer nothing is lost. Switching it under held keys is safe, a note ends on the channel it started on.
Hotkeys: MIDI to keystrokes
The same road the other way round. Typing Keys lets your computer keyboard play MPE Insight; Hotkeys lets your playing press real computer keys in whatever other app is in front, so a note or a pedal can start a recording, fire a scene or hit a shortcut in the software you are working with.
It lives in the ⌨ Hotkeys pill in the Routing group of the toolbar, next to MIDI In and MIDI Out, because that is what it is: a road the input takes out of here.
Note Keys
A played note holds its key for as long as it sounds. Note On presses, Note Off releases.
Controller Keys
Pedals and pads. A continuous controller counts as pressed from half travel up, the same line the app draws for sustain, so a switch pedal and a half pedal behave alike.
Two clicks per row
Learn takes the next thing you play, Set key the next key you press, modifiers included: Shift, Ctrl, Alt, AltGr and Cmd. AltGr counts as its own modifier, so a row stored as AltGr+Q stays AltGr+Q instead of turning into Ctrl+Alt+Q in your DAW.
macOS: the permission
macOS gates synthetic key presses behind a system permission. The App Store build asks for it but no dialog appears, so you grant it by hand: open System Settings, Privacy & Security, Accessibility, add MPE Insight with +, switch it on, then quit the app with Cmd+Q and start it again. macOS answers this question once per process, so a running app keeps the old No.
Windows
Nothing to grant, it works out of the box. One limit is the system's, not the app's: a window running as administrator does not accept synthetic input from a normal program, so a DAW started as admin stays deaf to it.
MIDI Routing from a DAW
To analyse MIDI that is already playing inside your DAW, you can route it to MPE Insight using a virtual MIDI port. No additional hardware is required.
-
1
Create a virtual MIDI port
Windows: download and install loopMIDI (free). Create a new port and give it a name, for example "MPE Insight In".
macOS: use the built-in IAC Driver, no additional software required. Open Audio MIDI Setup, choose Window → Show MIDI Studio, double-click IAC Driver and tick Device is online. Its bus then appears as a MIDI port everywhere.
-
2
Route your DAW to the virtual port
In your DAW, set the MIDI output of the relevant track or instrument to the virtual port you created.
-
3
Select it as input in MPE Insight
Open the MIDI device list in MPE Insight and activate the virtual port.
Make sure to disable MIDI Input for the virtual port in your DAW. If the DAW has MIDI Input monitoring active on the same port it is sending to, the signal will loop back into itself, causing a MIDI feedback storm that can freeze or crash software. Only the output of the DAW should be routed to the virtual port; MPE Insight reads from it without sending anything back.
MIDI Output
A dedicated output port with two independent send modes. Whatever you play yourself, with the mouse or the computer keyboard, goes out through the same ports without a switch of its own: see Playing without a controller.
MIDI Thru
Incoming MIDI signals are forwarded unmodified to the selected output port.
Demo Out
The built-in demo engine sends generated MPE events to the output port, useful for testing downstream devices.
Clock & BPM
One tempo pill in the toolbar shows the tempo that is really running, and where it comes from: MIDI while a host clock (0xF8) is driving, Int while the app's own internal clock is. Clicking it opens the source switch and the internal tempo.
Any control that turns cyan is locked to this same tempo, wherever it lives: FORGE's effect Sync buttons, the Sync toggle of the Conductor (FORGE's autonomous slider drift, described with that module), DRIFT's Arpeggiator Sync.
MIDI Clock events are included in recordings and embedded as Tempo meta-events in exported MIDI files, using the actual measured tempo, not a fixed 120 BPM placeholder. A steady host tempo settles to a single accurate tempo event, not a run of near-duplicate readings from USB/driver jitter.
The Internal Clock inside that pill is the app's one internal tempo source: DRIFT's arpeggiator, the Sync switches in FORGE (Conductor, Glitch, Strobe) and CASCADE's beat grid all read it. Follow MIDI Clock hands the tempo to a host whenever one is sending, and takes the last measured host tempo over when it stops, so a track that ran at 140 does not snap back to an old hand value. Internal only keeps your own tempo even while a host clock is running, for playing along to something without the host dragging the visuals with it. A padlock on the pill marks that state, and turning the tempo up there while a clock is running switches to it for you. While a clock is being ignored, its tempo stays readable in the popover, and Take over adopts it as your own value without handing the tempo back.
Modules
Keyboard
A piano display of 88, 61, 49 or 25 keys (set via Keyboard Range in Global Settings), showing all active notes in real time. Each active key is highlighted in the colour of its MPE channel. Pressure is shown as fill intensity, and a Pitch Bend ring around each key visualises the current deviation in cents.
Keyboard Play Mode: Click or touch any key to send real MPE notes out. Horizontal position controls Pitch Bend; vertical position controls Pressure (upward) or CC74 Timbre (downward).
Pixel Grid: An eighth style, a from-above LED grid in three layouts: Piano (a dotted key silhouette, black keys read darker at rest), Fingerboard (equal-width semitone columns, no key shapes) and Accordion (the chromatic button accordion's field: three rows, a minor third per step along a row, neighbouring rows a semitone apart, so an interval spans the same distance in every key and an octave is four columns). Two combinable switches, Glow Trail and Splash (fires above an adjustable velocity threshold), plus its own Density (LED count) and Pixel Size controls, separate from the global Size slider.
Microtonal is a design and a playing mode in one, and it brings its own Tuning group with five scales. Quarter Tones (24-EDO) is the split-key one: every key gains a second, terraced field a quarter tone above its front field, so all 24 steps per octave are visible and playable on screen. The other four put one scale step on every key, the 1:1 mapping a Scala file assumes: 12 Equal is the plain twelve, Just Intonation is a 5-limit tuning, Equal Steps divides the octave into any number from 2 to 96, and Custom takes a list of cents and ratios with the period last, typed into the field or loaded from a .scl Scala file. The Root is the anchor key: it sounds its own 12-EDO pitch and every other key counts steps from it, so a 19-step scale repeats after 19 keys rather than after twelve. Reference is the concert pitch of A4, anywhere from 390 to 493 Hz, so the whole keyboard can sit at 415 for a baroque ensemble or wherever your group tunes; it is a constant shift rather than a step of the scale, which is why it applies to 12 Equal and Quarter Tones as well. Every key then carries a small gauge above its octave label showing how far it sits from 12-EDO at 440, scale and reference together, and the gauge widens its full scale with them, so the mark never runs out of groove. On-screen play strikes exact steps (a drag walks the terraces instead of gliding), and the tuning leaves the app as well: a key played with the mouse or the typing keys carries its offset in its own pitch bend, and a note arriving from your controller is retuned on its channel, so a synth downstream sounds the scale you picked. Hardware pitch bend itself stays continuous and glides the performance dot straight through the steps.
Settings:
Nine visual designs (Classic, Glass, Neon, Minimal, Dark, Fingerboard, Motion, Pixel Grid, Microtonal) with per-design colours (Fingerboard stripe, Motion wave pair, Pixel Grid unlit/lit LED) · Tuning on the Microtonal design (scale, steps per octave, a cents or ratio list with .scl import, root, reference pitch) · pressure colour mapping (Low → High or Static, with adjustable intensity) · Fill Level (pressure fills the key from the bottom up like a meter) · Hand split (a separate colour pair for the left hand below an adjustable split point) · Brightness Ring for CC74 (min / max colours or static, intensity and size) · Key Light (Light, Shadow, Dim: light spilling across the key bed, shadows cast by the black keys, and a dimmer over the whole bed) · Transparent BG. The bend ring around each key reads the instrument's own range automatically, see Bend range.
CASCADE · Note Rain
A piano-roll-style note-rain visualiser that sits above the Keyboard display. Three note sources feed the same canvas: Live MPE: notes are born at the strike line and travel away from it (rising or falling), pitch bend drifts each note sideways and channel pressure blends its colour; any .mid file played by the global 🎞 MIDI File player in the toolbar, arriving exactly like live input; and CASCADE's own Play a Picture, which turns a picture, a drawing or plain text into a note rain, no keys needed.
Play a Picture: Three tabs: Image (threshold, detail, invert, original colours, keep aspect, with an Auto button that tunes the threshold for you), Draw (a small sketch pad with colour palette) and Text (typed words become falling glyphs, case and line breaks are kept). Image and drawing pixels map to notes through a scale (Chromatic, Major, Minor, pentatonics, Blues, modes …), root note and tempo. ▶ Play bakes the source into CASCADE's own scrolling transport (play / pause / stop / seek / loop), and ⭳ Export .mid saves the generated notes as a Standard MIDI File, all notes on channel 1, nothing dropped even for dense text, ready for your DAW or synth.
Render modes: Eight independent layers, freely combinable, Bars (classic solid bars / ribbons), Particles (dissolve into a drifting particle cloud), Lightning (notes as crackling electric bolts), Code Rain (falling code-rain glyph columns), Plasma (breathing energy columns), Waveform (an oscilloscope trace whose wavelength follows pitch and amplitude follows pressure, CC74 adding harmonic bite), Vines (growing tendrils that thicken with pressure as leaves unfurl along the note) and Stars (constellations of star nodes that weave webs between chords and twinkle with pressure, with an adjustable star shape). Four Render-Mode sliders (Opacity · Roundness · Amount · Size) act on every active layer at once.
Settings: Flow direction (up / down) and speed · note gradient (driven by Pressure or Velocity) with CC74-timbre and glow colour, or a Step driver that moves one slot along a named palette with every note played, so a run of notes arrives in clearly different colours and a chord fans out across them · hand split (a separate gradient per hand from a split point) · note texture fills (noise, lines, diamond, glass, chrome, outline or a custom image) · pitch-bend shift, its bend range on Auto by default with fixed values available as a display zoom for making small bends legible (see Bend range) · octave gridlines · a beat and bar grid locked to the incoming MIDI clock (from a DAW or the MIDI File player, so you can see whether a note landed on the beat) · optional sustain pedal note length, where a pedalled note keeps drawing until the pedal lifts instead of ending with the key · impact effects on landing (glow flash, sparks, ripple, fountain, firework, flames, water geyser, rain, lightning, vortex), ten independent layers that combine as freely as the render modes do, with Amount and Size acting on every armed one at once, and an Own color switch that gives every armed layer one shared colour instead of the colour of the note that set it off · a glow bar along the strike edge with six motion styles (Aurora drift, Wave, Flames, Weed, Bubbles, Sparks) · atmosphere layers: background colour or image with Transparent BG, background FX (motes, aurora, nebula, fireflies, starfield, light rays), note trails (comet, stardust, ribbon, bubbles, embers) and keyboard fog · playful game modes (retro block grid, alien shooter) · post-effects such as bloom, god rays and smear.
PB / Mod
Displays the Master Pitch Bend and Mod Wheel from the MIDI Master Channel (channel 1). Three display styles: Classic (two vertical sliders), Radial (circular dial) and the Expression Pad, a stack of tilting rings that reads Pressure and CC74 instead of the wheels, taking the strongest of the per-note values and the zone-wide one, so it keeps reading with nothing held. All three are colour-configurable; in the pad the two pickers colour the CC74 and Pressure rings, and a Plates slider takes the rings from hairlines to solid discs. The wheel styles never convert: they show the raw master pitch-bend position, so full deflection is full deflection whatever range the instrument reports (see Bend range).
In Mouse Mode the tile plays. The wheel styles send Master Pitch Bend (sideways) and Mod Wheel (up) relative to wherever you press; the Expression Pad sends real Channel Pressure (up) and CC74 (sideways) to every sounding note, or zone-wide when nothing is held, and both values spring back to zero when you let go. While your hand is down it dominates: a note that starts under it is given the held value at once rather than at the next mouse move, and when the last note ends the zone-wide value takes it over, so the reading stays where you put it instead of jumping back to rest. A note that is already fading keeps the shape the hand gave it. Letting go zeroes only what the pad itself wrote last: where your controller has since sent pressure or timbre on that channel, the instrument has the channel back and the pad leaves it alone.
Expression Overview
One module, five ways to see the same expression data. Expression Overview tracks up to 10 signal sources, by default Pitch Bend, CC74 Brightness, Velocity, Pressure and Release Velocity, each in its own freely chosen colour. The View menu at the top of the settings switches between two time-based views (Lines, 3D Box) that plot every source over a configurable window, and three current-moment views (Radar, Landscape 3D, Rack) that show where each source sits right now. Radar and Landscape 3D were the separate "Expression Breakdown" module in earlier versions; they now live here as modes.
Lines draws a flat chart of the last 5-30 seconds (default 10): bipolar signals such as Pitch Bend are centred on a dashed zero line, unipolar ones grow from the bottom edge. 3D Box lifts the same history into a slowly swaying perspective box, time runs along the box, each source gets its own depth lane, and every signal leaves a glowing trajectory whose bright endpoint marks the live value.
Radar spans a spider mesh across the sources (at least 3): a filled polygon updates in real time, its colour mixed from the most active axes, and each axis label shows the signed value while the shape uses the magnitude.
Landscape 3D turns the same values into a static 3D terrain: every source owns a fixed anchor point on the mesh, and its live value raises a smooth mound there, Pitch Bend can also dig below the surface. Mounds widen as they grow and blend softly where they overlap, glowing peak dots carry each source's name and value, and a spectral height ramp colours valley to summit, with fast attack and slow release, so hits land instantly and fade gently. A slow camera sway adds parallax while the terrain itself stays put.
Rack drops the curves entirely and draws each source as the piece of studio gear you already read it by. A value you set gets a control, a value that happens gets a meter, and every row lets you overrule that: Auto, Knob, Meter or Bar, the bar new in this release, so a source you want to read at a glance can be a bar even where the automatic would have drawn a knob: Pitch Bend and CC10 Pan appear as knobs with a centre detent, resting straight up and swinging either way, while Pressure, Velocity, Release Velocity and both Aftertouches appear as channel-strip meters filling from the bottom, each with a peak mark that holds for a moment and then falls, so a single strike stays readable instead of flashing past. CC74, the Mod Wheel and any other CC are positions too, so they get knobs. The elements arrange themselves into a grid that fits the panel and drop their readouts, then their names, as the module gets smaller. Unlike Radar and Landscape 3D this mode works from a single source.
Pitch Bend always reads in real semitones (e.g. +2.00 st). With several channels bending at once the scale follows whichever one is contributing the largest swing, at the range that channel itself reported (see Bend range), so nothing has to be set by hand here.
Settings: View · sources (add / remove / recolour, up to 10, Radar and Landscape 3D need at least 3) · Time Window (5-30 s, Lines / 3D Box, greyed out in the current-moment modes) · Glow · Transparent BG · MIDI channel filter.
MIDI Stream Log
A real-time table of all incoming MIDI events (up to 250 entries, newest first). Columns: timestamp (with milliseconds) · message type · channel · note · value · raw hex bytes. Each message type is colour-coded, Note On green, Pitch Bend blue, CC orange, and so on. The most recent entry briefly flashes on arrival. The module's toolbar offers ⌫ Clear and ⭳ Export, which saves the visible rows as a .csv table in chronological order (oldest first, the opposite of the newest-first table on screen); both respect the module's MIDI channel filter (the master channel 1 always passes). Transparent BG is available here too.
Five views share the module, picked with the View menu at the top of the settings (the toolbar names the one that is showing). Events is that table. Notes is a voice ledger, Channels is a per-channel breakdown, Stats is the numbers, and Tracker writes the note stream the way a tracker column writes it. Each Log instance remembers its own view, so two Logs side by side can show two different views of the same stream, each with its own channel filter; the view is part of a saved stand, like every other module setting. Ten presets come in pairs, one pair per view: the plain panel, and the same view as a chrome-less overlay floating over the visual modules. ⌫ Clear and ⭳ Export belong to Events and Tracker, which read the same rows, and ↺ Reset to Stats and Channels, since both read the totals it zeroes; each button greys out on the views where it has nothing to do.
Message colours. Eight message types, one colour each, edited in the settings under Message Colours: click a swatch and pick, the way Expression Overview's sources work. One palette serves every view, so recolouring Pitch Bend moves the Events rows, the Channels band, the Stats line and the ledger together, and the two note colours carry the Tracker cells. Each Log instance keeps its own palette and it travels with a saved stand. CC74 starts on the same orange as the other controllers, so nothing looks different until you decide the timbre axis deserves its own colour, which is one click. ↺ Reset colours puts the whole palette back.
Events, the detail line. Click any row and the strip below the table writes that one message out in full: the decoded fields and the raw bytes side by side. A pitch bend reads as its signed value, its 14-bit number, its normalised position and its deflection in semitones at the range that channel reported, so the number the app is drawing with is visible next to the bytes that produced it. The selection follows the message, not the row it was on, so it survives the table filling up around it. With Transparent BG on, the table stops taking clicks and the strip says so.
Notes, the voice ledger. One row per sounding voice, in the order the keys were struck: status, note, channel, velocity, pressure, bend in semitones, CC74 and a running duration. This is not a second reading of the wire, it is what the app believes: the same voice list Keyboard, Grand Staff, CASCADE and FORGE draw from, so a note that looks wrong on screen can be checked as a number here. A finished note stays for three seconds, greyed, with its release velocity if the controller sent one, which is the only way a staccato run is readable at all. Bend is written with two decimals, so a quarter-tone reads +0.50 and a sixteenth-tone is still distinct from it.
Channels. Sixteen rows, one per MIDI channel, always in channel order: a bar showing how much traffic that channel carried since the last reset, measured against the busiest channel, then what it is holding right now, note, bend, pressure and CC74. The bar is split into coloured bands, so its length says how much and its bands say of what: notes, pitch bend, pressure (channel and poly aftertouch together) and CC74, with everything else in a fifth, quiet band. On an MPE zone that is the whole picture at a glance, a channel carrying notes and little else looks nothing like one carrying a note under a wall of pressure. The colours are the same ones the Events table uses for those message types, and a key sits under the table. A channel that is quiet, or that the channel filter is holding back, is greyed rather than removed.
Stats. Two blocks, kept apart because they measure different things. Now is the live spread across everything sounding: how many notes, over which channels, and the lowest to highest note, velocity, pressure, bend and timbre among them. It carries the weight of the two, since it is the answer most of the time, and in silence it reads as empty rather than freezing on the last value. Since reset, set apart below it, is the running total: how many messages of each kind, split by type and colour-coded like the Events table, plus the spans each value has travelled, with bend given both in semitones and as the raw 14-bit pair. ↺ Reset zeroes those totals for this Log only; it is a separate account from Clear, which empties the Events rows.
Tracker. The same rows Events shows, reduced to the notes and written the way a tracker column writes them: the time, the note as C-4 or C#4, the channel, and the velocity as two hex digits, with a release reading OFF. Newest first like Events, finished notes greyed. Nothing new is stored here, it is the same stream read through another lens, which is why ⌫ Clear and ⭳ Export act on this view as well.
Two things an instrument says about itself get their own line here, because they change how every module draws: Bend Range (RPN 0, see Bend range) and MPE Zone (the MPE Configuration Message). Many controllers announce both only when they power up or when their zone changes, so the line appears on connect rather than while you play, and this is the one place to check that it arrived at all.
Grand Staff
Five display modes share one engraving engine, picked with the View menu at the top of the settings. Now shows only the currently held notes, Time lets played notes scroll across the staves like a timeline, Flow turns them into expressive MPE ribbons, Weave leaves notation behind for a harmonic field, and Tab writes the performance as guitar tablature.
Classic notation on treble and bass clef staves. All currently held notes are shown with accidentals matching the selected key signature. An optional Pitch Bend Hook draws a curved arc from each notehead, up for positive bend, down for negative, scaled to the bend depth. Chord detection recognises triads, 6th/7th chords, sus/add chords, altered dominants (♭9/♯9/♯11/♯5/♭13), quartal voicings, polychords and 9th/11th/13th extensions from the currently held notes and labels them lead-sheet style, including slash-chord inversions (e.g. "C/E"). Anything with a real 7th is named by construction rather than looked up in a list, so an ordinary jazz voicing that no table anticipated still gets its proper name: C-E-B♭-A♭-D♭-F♯ reads C7♭9♯11♭13.
Time: the scrolling take on notation (the former Note Timeline module lives on here): every played note travels across the staves, so phrases stay readable after the moment has passed. Noteheads keep the pressure colour mapping (Low → High, or Static), an optional CC74 / Timbre colour blends in as a note brightens, and Hand split gives the left hand its own colour pair below a configurable split point.
Flow, notation becomes ribbons: each note draws a band at its pitch whose length is the duration, whose thickness follows velocity and pressure, and whose curve traces the pitch bend. True legato merges into one continuous line, an adaptive phrase break starts a new ribbon when a silence is long relative to your playing speed, and a voice-split threshold keeps two-handed playing in separate voices. Colours per voice (each melodic line keeps its colour) or by scale degree, with eight palettes from Spectrum to Beige, plus a soft glow halo and a gap bridge across small non-legato gaps.
Weave, harmony as a field: the staves disappear and pitch becomes a position on an interval field instead of a height on a line. One step to the right is a fifth, the two diagonals are the major and the minor third. Because the directions are fixed intervals, a chord turns into a shape: every major triad is the same upward triangle and every minor triad the same downward one, in every key, so quality reads before a single note has been named. Transposing moves that shape rather than redrawing it, and voice leading becomes distance, a cadence stays in one small area while a modulation visibly walks away from it. Each pitch class recurs across the field, and Field width decides how much of that repetition you see: fully zoomed in there is exactly one figure, centred, and pulling back scales the copies in one at a time until the whole field is a wallpaper of the same shape. Pitch bend climbs the field vertically, its trail as long as the interval it travels, whole octaves folded away (a node is a pitch class, so a bend of exactly an octave has arrived back where it started and a slow full sweep breathes out and back once per octave). An adjustable afterglow keeps released chords burning so the harmonic path of a whole phrase stays visible. Two looks share all of it. Instrument draws the field the way an instrument face is drawn: the lattice itself in hairlines, hard-edged marks lit from a single direction, the lowest note carrying a collar so inversions read on a field that has no octaves, colour reserved for what sounds right now while the recent past drains toward grey, and the chord name set small on the panel's own margin. Glow keeps the softer luminous rendering. Key gravity weighs the resting field toward the current key: at zero every position weighs the same, turned up the key's own notes grow and brighten, foreign ones sink away and the tonic becomes a marked anchor. Field width sets how much of the field fits across the panel, counted in steps, so the same setting means the same thing in a narrow tile and a wide one. Labels appear only on what actually sounds, as scale degrees (1, ♭3, 5), as sol-fa syllables or as note names, and step aside once the field gets too dense to read them. They are spelled, not looked up: the route a note took across the field is a spelling, so a raised fifth and a flattened sixth stay apart even though they are the same key, and the label can never contradict the chord symbol above it.
Tab, the performance as guitar tablature: six string lines with a scrolling history of everything played. Each note's string comes from its MIDI channel on an MPE guitar (with the channel order flippable for controllers that count the other way), or, from a keyboard, is solved automatically into a playable fingering of the currently sounding set. Tuning and capo are adjustable, with the capo marked in the gutter; a note that lands on an unplayable fret is shown in red rather than hidden, so the display never silently rewrites what you played. Notes struck close together read as one strummed grip, hammer-ons stay on their string, and let-ring notes move to free strings instead of cutting each other off. The sheet export prints tab lines along with the staves.
Notation: How the score is written is a set of choices rather than one house style. Note labels beside each notehead in Now read as the note name with its octave (C4, E♭3), as a degree of the key (1, ♭3, 5, which is Jianpu, cipher and Nashville numbers in one), as a movable-do sol-fa syllable (do, me, so), or not at all. Chord labels write the detected chord three ways: Symbol (Cm7, G/B) is the lead-sheet name it has always been, Roman (ii⁷, V⁶₅) is the numeral of the key with the inversion figures a harmony class writes, and Figured bass (B 6) is the bass note under the figures a continuo player reads. Noteheads stay Round or become Shape notes, the seven shapes of the singing-school books, one per degree of the key, so the head says the degree before its position on the staff does. All three spell by the key signature, so a label can never contradict the notehead it belongs to.
Chord diagrams: The detected chord can also be drawn as a fingering in a band above its symbol, in Now, in Time and on the printed sheet, for Guitar or Ukulele. It asks nothing of your instrument, the input is the notes you are holding: a chord book of the common open and moveable shapes answers first, and whatever it does not cover (a rootless voicing, a slash chord, an extension) goes to a solver that searches a four-fret window for the fullest, least stretched grip a hand can really hold, at most four fingers or a barre. On the guitar the lowest sounding string carries the bass; the ukulele is re-entrant and its own chord books ignore which tone lies lowest, so the diagram does too.
Settings: View (Now / Time / Flow / Weave / Tab; the Flow, Weave and Tab groups grey out outside their own view) · key signature (all major and minor keys) · note labels (name / degree / sol-fa / off) · chord labels (symbol / Roman / figured bass) · noteheads (round / shape notes) · Pitch Bend Hook · chord detection with label colour and chord diagram (off / guitar / ukulele) · note colours (pressure Low / High, Static, Hand split with own colour pair and split point) · CC74 / Timbre colour (Time mode) · Flow: phrase break, voice split, gap bridge, colour mode (Voice / Scale (key)) and palette, halo · Weave: look (Instrument / Glow), field width, afterglow, key gravity, triad fill, labels · Tab: strings (Auto (nearest fret) / MIDI channel), channel order (Ch 2 = low E / Ch 2 = high E), tuning (Standard EADGBE, Drop D, DADGAD, Open G) and capo · Glow · Transparent BG · MIDI channel filter.
Grand Staff's engraving also powers the lead-sheet export: record a take and render it as a complete paginated notation sheet, chord symbols included, saved as one PNG.
Aura
A generative real-time visualiser that maps MPE expression data to one of twenty-seven rendering styles, grouped into four families, Elements, Rings & Radial, Flow & Organic and Scenes. In every style, size, width and twist are independently routed to the MPE dimension of your choice. A Scenes highlight is Orrery: notes orbit a central ring by pitch class, with octaves as orbital depth, pressure, bend and timbre animate each note's glow, size and trail, and the rotation direction is switchable.
Styles
Elements
Rings & Radial
Flow & Organic
Scenes
Elements are GPU shader fields: Silk Flames is a flowing WebGL flame-silk field that ignites per note and reacts to pitch, and Photo Swarm turns a photo of your own into a GPU particle cloud that scatters per pitch column and heals back (with no photo it runs neutral in the background colour). Smoke breathes a fine ribbon of incense smoke out of every played key: the ribbon rises straight off its pitch, only starts curling higher up, leans with the bend and dissolves as it ages, and Base Speed keeps a single idle wisp wandering between phrases (at zero, silence stays empty). A hard strike blows the smoke apart in a circle around its key like a stone hitting water, and letting go pulls what was displaced visibly back in, reaching exactly as far as your velocity had sent it. In Flow & Organic, Filament is the one style that keeps what you played: a note plants a glowing seed at its pitch, and for exactly as long as you hold it a thread grows out of that seed, wanders, forks and fuses with whatever it touches, so a phrase grows into a single lit net instead of a scatter of shapes. The whole structure travels the entire time, which is why the frame never runs out of room: new growth appears at one end, the other thins into out-of-focus points and is gone. Base Speed steers that journey and is the character switch of the style: forward the net recedes and dissolves in the distance, backward it comes at you and dissolves as it sweeps past, at zero it stands still and simply piles up. Strike a note a good interval away from what is already standing and it starts its own colony instead of joining the old one, so wide leaps build separate bodies. Attack and Decay are lengths here rather than brightnesses: a long Attack has the thread creep out of its seed and pick up speed, a long Decay has it keep inching onward after you let go. The Width source is the master ignition, so pushing CC74 up lights every node that is still standing and the whole net comes back out of the dark, not just the growing tips. And Note Rotation winds the body around instead of nudging it: low notes turn it one way, high notes the other, and it stays where you turned it. In Scenes, Tunnel is a flight through a tiled tube of light with no end in sight: the wall is a grid of glowing panels with dark seams, it curves away in the middle of the frame and leaves through the edge, and because the shell is translucent you can follow the pipe running on behind its own wall. Pressure is the thrust, a full pitch bend lays the exit out on the horizon to the left or the right, and CC74 climbs and bends the pipe harder into view. Every strike sends a wave of light down the wall towards you, a held note lights and bulges its own column of tiles, and two keys bent against each other tear the pipe open sideways. Tonewheel is a pitch-clock dial where notes ignite on the ring and drift back into a depth tunnel, and Glass Spiral winds the block field into a spiral seen from an elevated camera: low notes stand on the wide outer rim, high notes in the tight core, and every slab is lit glass. Shatter is the pane with a memory: every note is a knock on one shared sheet of glass, and the cracks never heal, the way glass never does. A knock does not open the whole star at once. The star is rolled at the strike and then released in eight stages, and only a further knock unlocks the next one, so between knocks the picture stands and that pause is the phase. What changes from stage to stage is the kind of crack rather than its size: a fine chip first, then the long cracks lengthen and the first ring segments nucleate around the impact, then bands ring the sheet at irregular radii and branches fork off, and at the last stage long fracture chords cut the web into large polygonal plates, an unstable pane rather than a denser spiderweb. Velocity never sets the size of a star, only where in that sequence you start and how fast you walk it: a soft knock opens at the first stage and takes one at a time, a hard one starts higher and takes two, so the same phrase played gently or firmly wears the glass down at a different rate. Pitch places the impact across the pane, velocity throws it high and timbre pulls it low. Leaning on a held key breaks the glass like a strobe rather than melting it, a short pause and then a chunk gives way at once, and once that crater is full the fracture runs on and opens fresh glass nearby. Holding a bent note marches the damage sideways across the sheet, to the right as the bend rises and to the left as it falls. Repeat a note and you keep working the same hole, play a melody and you crack fresh glass. Later impacts interact with what is already standing, a fresh crack ends where it meets an older one, and the holes are real missing material, so anything that ran into one is simply gone. The sheet gives way only once a knock can find no glass left anywhere, and then the finished picture stands for a moment before a white blink swaps in a clean pane, which makes how far you have worn the glass down part of the performance. Black Hole hangs two discs of silky orbiting streams around a pure black horizon: a wide band seen almost edge on (Colour B) and a second disc jutting out toward you (Colour A), crossing along one seam where the two streams flow into each other and trade colours. All the light belongs to the streams themselves; the fast inner orbits hug the rim and draw the ring light on their own. Seen from above the forward disc swings like a clock hand with what you play: its near end sweeps right for high notes and left for low ones, and the crossing point wanders with it. Pressure is pure luminosity and runs the inner streams white hot, Width simply lifts the brightness, and Segments turns the grain from distinct orbit rings into a smooth haze. The Twist source bows that forward disc from the inside: its near rim sweeps around the body, to the right as a bend rises and to the left as it falls, easing out to nothing by mid band, so the stance your playing set stays exactly where it is while the inner streams lean. One bent key does it even inside a held chord, because the disc follows whichever note is pulled furthest rather than the average of all of them.
Signal sources (per parameter)
Each of the three dynamic parameters (Size · Width · Twist) can be independently routed to: Pressure · CC74 Timbre · Velocity · or Pitch Bend (bipolar). Glow is a fixed amount, and Attack / Decay shape how fast every routed parameter rises and falls. Wherever a style places a note on a key axis, its Pitch Bend Range is Auto by default, with fixed values available as a display zoom (see Bend range).
Aura Presets
Two built-in presets for every style, with the MPE Insight signature at the top of the list. Each is a starting point rather than a finished look: change anything and save your own alongside them. The pair belonging to a style differs in more than colour. Presets set the style, colour pair, segment count, envelope, signal routing, and background colour simultaneously, so a handful deliberately drive a knob from a different signal where that fits the picture better, for example a strike-driven look running Size from Velocity, which also keeps it working on a keyboard without aftertouch. Custom configurations go into the per-instance Aura Snapshot list, which has no upper limit and simply starts with five empty rows.
FORGE · Depth Shader
A live WebGL shader driven by the same MPE data every other module reads. Feed it an image or video, the webcam, or the live picture of other modules, the shader reacts to your playing in real time: pitch bend, pressure and CC74 shift, warp and animate the picture. FORGE runs as a single instance (one GL context, one source chain).
Sources: Drop an image or video anywhere on the module, or pick a source in the settings: a file, the webcam (with camera selection), or the Module Feed: CASCADE, AURA, Grand Staff, Expression and Keyboard can each be routed through the FORGE effect chain, alone or several at once. Multiple feeds composite with a selectable Feed Blend: Screen and Lighten add light, Stack and Multiply luma-key each layer (dark areas turn transparent), Difference inverts overlaps. While a module feeds FORGE, its own tile hides itself, and a file or the webcam can sit underneath the whole feed as a Base Layer.
Real depth: On first load FORGE uses AI to estimate a depth map of the image (Depth Anything V2, Apache-2.0) and builds real parallax and relief from it, instead of a flat filter. If the model or a backend is unavailable (e.g. fully offline), the shader falls back automatically to a luminance pseudo-depth, so the module always works, just with flatter parallax when offline.
Effects: Parallax · normal-map relief · heat shimmer · flow · kaleidoscope · Infinity Spiral · glitch · mosaic · chromatic aberration · False Color palettes · point cloud · strobe · feedback trails · Retro Pixel VHS · cell screens · zoom · rotation · tunnel warp · camera shake, each effect independently switchable between off, MPE-driven and a constant value.
Global & mapping: Sensitivity shapes how your pressure reads: to the left you have to lean in before much happens, to the right a light touch already carries. Full press always arrives at full, whatever it is set to. Every disc effect carries its own Size slider, the radius of the disc it plays inside. Pitch → Position (Global), marked ◈ in the panel, decides where a note lands on the image: Circle, Horizontal, Vertical, Center (the whole keyboard on one middle disc), Random (a fixed scatter, one place per key), Color key (nearest matching colour) or Hue key. The 88 / 12 pair beside it sets how finely that mapping reads the keyboard: 88 gives every key its own place, 12 lets all octaves share one, so a note name always lands in the same spot however you voice it. The pair matters for places only. Color key and Hue key always read the whole keyboard: the lowest key aims at the darkest value or the start of the hue circle, the highest at the brightest or the end, whatever the 88 / 12 switch says. Every effect can also leave that global choice and run its own mapping, from the small menu on its own OFF / MPE / CONST button; all seven mappings are on offer there, Color key and Hue key included, so one effect can key to brightness while its neighbour stays on a place, and a button showing ◈ is simply following the global switch. A Depth Preview toggle shows the estimated depth-map thumbnail.
The symbol beside each title is the face an effect's own button wears for that mapping, so the chart and the panel say the same thing in the same signs. OFF and CONST say themselves; in MPE the button carries the chosen mapping's symbol, so one glance says whether that effect follows the global Pitch to Position choice or has left it for one of its own. Rings and Splash are the one pair without a Constant entry, because a gesture has no constant twin. Color key and Hue key carry their own symbols like every other mapping, so one effect can key to a brightness or a hue on its own while its neighbours stay on places; an effect that follows Global shows the ◈ and does whatever the global switch says. The last chapter is the 88 / 12 pair: on 12 the places collapse onto twelve, one per note name, and every octave of the same note lands on the same spot.
Envelopes: Pressure, Pitch and CC74 each have their own Attack and Release times, so the shader can snap instantly or ease in and fade out smoothly after every note, from tight, percussive reactions to slow, breathing swells.
Effect parameters: Each effect has its own toggle, OFF, MPE (driven by your playing inside the Size disc at the note's pitch) or CONST (a constant value over the whole image), plus its own sliders: its own Size (the disc radius around each note), Parallax (Depth, Motion, Drift), Heat shimmer, Flow and Chroma (Strength, Motion), Kaleidoscope (Segments, Motion), Mirror (Angle, Folds, Motion, Size and a Flip switch: one straight fold line where Kaleidoscope folds a wedge, so it can stand off centre at any angle; in MPE the line runs through the pressure weighted centre of what you are playing and the average pitch bend tilts it, and Size sets how far along the line the fold reaches), Infinity Spiral (Twist, Rings, Motion), Glitch (Strength, Rate, Density, each strike tears inside its note's disc), Mosaic (Blocks, pressure carries the block size from the start ring to the slider, so it can build up or heal away), False Color (Mix, Solarize, Hue, pitch bend can spin the palette live), Normal Light (Strength, colour, plus a diffuse Fill and its own Motion and Orbit), Strobe (Intensity, Speed, colour, plus a Backlight mode that fires the God-Ray pass instead of a flat flash) and Feedback Trails (Decay). Every Motion slider is a true time control: at zero the movement stops and the effect settles into one defined resting state, so the same slider position always gives the same picture, and where the two directions look different (Parallax, Normal Light, Heat, Flow, Kaleidoscope, Mirror, Infinity Spiral, the Ripple, the VHS tracking bar) the slider runs both ways, left of centre playing the same movement backwards.
Point Cloud: A second render path, WebGL2 only: instead of the flat picture, FORGE plots a grid of points across the image and pushes each one toward or away from the camera by the depth map, so the Virtual Camera flies through a real point cloud instead of a flat plane. Shape switches between hard Dots, soft Splats and Glyphs, Size sets how large each point is, Density thins or fills the grid, and Depth sets how strongly the depth map pushes points out. In Glyphs mode each point stamps a character instead of a dot, picked from a ramp so that brighter points carry denser characters, kept in the point's own colour, for a live ASCII look you can fly through. The character set is a field you can edit, and the ramp re-sorts itself by density from whatever you type. In MPE mode, played notes push the points inside their disc toward the camera: presence brings them in and lets them fall back on release, pressure holds them out further the harder you press, slide opens the cone wider, and pitch bend moves it sideways. Under a global Color or Hue mapping the cloud selects its points by brightness or by hue instead of by place, exactly as the flat effect rows do. CONST mode runs the camera and depth alone, with no note pushing anything. The Depth of Field and Motion Blur post passes and the camera's own Relief slider are not available while Point Cloud is on (their rows grey out): they read scene brightness as distance, and the cloud already carries its own real depth. Camera Ground tilt, Heading and Lens distortion all work with it. Spin turns the whole cloud about its own centre, in two halves that read like handling an object. The pose: Angle turns it left or right, Tilt tips it toward you or away, Roll leans it sideways, and each of the three holds exactly where you put it. The motion: Speed sets rate and direction of a continuous rotation, and the Axis buttons name what that rotation is, a flat Turntable spin, a head over heels Tumble, or Clock hands turning in the picture plane. With Speed at zero the picture stands exactly on the pose. In MPE mode the spin winds while you play and settles back onto the pose in silence; CONST turns steadily. Point Cloud has its own section in the panel now.
Virtual Camera: Using the AI depth map, the Virtual Camera moves a real 3D camera through the image instead of applying a flat filter. Relief sets how strongly depth separates near from far. Ground lays the image down into a plane that recedes to a horizon, so parallel lines converge and near content really is larger than far; with it, Depth of Field and Fog stop reading brightness and start reading actual distance. Heading turns that ground under the camera, letting content run diagonally into the distance. The rest of the rig is grouped by what it does. Position moves the camera itself: Truck X/Y slide it sideways and up, Dolly drives it toward or away. View turns it on the spot: Yaw left and right, Tilt up and down, Roll tipping the horizon. Optics holds FOV (telephoto ↔ wide) and Lens (pincushion ↔ barrel/fisheye), and camera-motion Blur sits below. The distinction between the two groups is worth knowing, because it is the one thing that makes these sliders feel duplicated. Moving the camera and turning it only look different when there is depth in the picture: a real move shifts near content further than far content, which is parallax, while a turn shifts everything equally. With Relief and Ground both at 0 the image has no near and far at all, so Truck X and Yaw genuinely produce the same result, and so do Truck Y and a gentle Tilt. Raise Relief or lay the plane down with Ground, and they separate immediately. Likewise Truck Y against Dolly: one keeps the distance and changes the angle you look down at, the other keeps the angle and changes the distance. Three different rotations exist, and they are easy to mix up. Roll tips the camera head, so the horizon tilts with it. Heading turns the ground plane itself, so the horizon stays level and the content swings around underneath. Spin, over in the Whole Frame group among the Distort FX, is not a camera at all: it rotates the finished picture around its centre like a turntable. Move Amt sets how strongly the chosen Move preset plays on top of your framing. How far your playing moves the camera is not a separate number: it is the journey on each row, from the small start ring where it begins to the handle where it ends, so every axis says its own reach and you can read it off the panel. Reset Pose returns the framing to neutral, Ground and Heading included. With the Conductor running it keeps drifting those two on from there, which is what that target is for: close the range rings on the Ground and Heading sliders if you want the floor to stay flat. A cinematic DoF post-pass adds bokeh blur off the focal plane, its Focus slider is auto in the centre (focus follows your playing), far to the left, near to the right, and Fog fades distant content into atmosphere; both work in every camera mode. ● REC records up to 60 seconds of your own slider moves, Ground and Heading included, as a seamlessly looping Custom move preset. While a take is running the Conductor lets go of the camera and its bands go quiet, so the recording holds your move rather than its drift; it picks the camera back up the moment you stop.
Virtual Camera move presets: The Move dropdown offers around twenty cinematic camera paths in two groups. Fly in & home presets (Slow Push In, Orbit, Drift, Handheld, Crane, Dolly Zoom, Smash Zoom, Free Fall, Whip Pan, Quake) perform the move while you play and fly the camera back home on release. Continuous presets (Figure-8 Glide, Carousel, Endless Wander, Pendulum, Pull & Repel, Corkscrew Drill, Vortex Pull, Surge, Slingshot, Kite) wind forward like a loop while you play, release freezes the camera in place, and the next note continues the move from there, and the manual sliders below stay live as a trim on top of the preset. A move you recorded yourself always plays back at the tempo you recorded it.
Camera & post-process: CC74 Rings is what the slide axis does to the picture: lean into CC74 and the frame is pulled toward the note you are playing, with waves running outward on that pull. One bipolar slider carries the whole effect, and its two sides are two different pictures: to the right it pulls in and the waves run out, to the left it pushes away and they run in, and the centre is off. Splash is the strike's own ring in the picture: every note you play sends one wavefront out from its place, shoving the picture aside as it crosses and thinning as it grows. Strength sets how hard it shoves, Speed how fast it travels, and both reach a real zero. It is MPE only, because a splash needs something to throw it, and once thrown a wavefront always completes its journey: letting the key go, or playing on top, never cuts it short. These rings are drawn in the image; the rings on the sliders themselves are a different thing entirely, see Conductor and Start point below. Simpler whole-frame transforms live with the Distort FX, in a group called Whole Frame: Zoom, Spin (speed and direction, a turntable rotation of the finished frame rather than a camera move), Tunnel warp and Shake. Shake is played, not looped: every strike throws the frame off centre and a spring brings it back, low notes throwing it left and high notes right, and the harder you strike the further it goes. Strength sets the weight of a hit, Motion how much movement each one releases, from a single short nudge up to a long ring-out. Play nothing and the picture stands perfectly still, unless you set its start ring away from zero, in which case that is where it rests and a gentle tremble carries on by itself (its CONST mode keeps a steady idle tremble too, for a look that runs without playing). They bend the finished picture without a camera behind them, which is why they sit with the other distortions rather than with the Virtual Camera. Four post-process passes run last, on the finished frame: Bloom (Threshold, Intensity, Radius) blooms the bright areas, God Rays (Intensity, Length, Decay) casts volumetric light shafts, and Retro Pixel VHS puts the finished picture through an analog tape and CRT chain: Scanlines with a rolling tracking bar whose Roll slider sets its speed and direction, Dot Glow (the image resolves into a grid of glowing phosphor points), Chroma Tear (RGB offset, in MPE mode every strike bursts a harder tear), Grain with its own Grain Speed, and a Duotone tint with its own colour. Cells breaks the finished frame into a grid and redraws each cell by its own brightness, in one of three looks: ASCII stamps a character whose density follows the brightness, in the cell's own colour, Halftone lays down a rotated dot screen whose dots grow with the brightness, and Dither steps the frame down to a few colour levels in an ordered dot pattern. Cell Size sets how coarse the grid is and Contrast shapes the brightness ramp, and like every pass it runs off, at a constant value, or answering your playing, where harder playing breaks the picture further into cells. Every FORGE setup can be stored in the module's preset and snapshot slots, and FORGE respects the same MIDI channel filter as the other modules.
Living World: The image grows a world of its own, every style draws its palette and material from the source picture instead of a canned pattern. Four styles: Organic Growth (a grown reaction-diffusion culture; your playing seeds it at the note's position), Fractal Tunnel (an enclosed corridor ride), Fractal Open Space (free flight through floating folded formations; Density sets how many cells hold one) and Ink Bloom (an amber macro fluid-art blob that is its own light source). Pattern, Flow, Growth and Blend shape the behaviour, and ↺ Reseed World restarts the world from the current image.
Conductor: Autonomous slow drift on top of your sliders, so the look keeps living between notes. Switch it on and every slider it can reach grows a pair of range rings, one for each end of the range that knob may drift in. The panel has just two marks and they read the same everywhere: an outer range ring is a point you set, the green dot is the value right now. Closed, the two rings sit on the value as one, with the dot inside it, so a dot in its ring means the image is on your handle and a dot anywhere else means something else is moving it: a Move preset, or the play envelope on a camera in MPE mode. Drag the left ring to move the value as always; pull the right one outwards and the pair opens: the groove between them is the range, and the green line inside it shows what the drift can reach at this moment. Once open, either ring sets the reach and the line itself moves the value. Pull a ring back onto the value, or double-click one, and the pair closes again. Where a range runs into the end of its travel it slides inwards instead of getting narrower, so a knob at the very bottom of its slider still drifts its full width. The range always sits around your own value, so nothing jumps when the drift settles: at rest the picture is exactly what your sliders say. Intensity sets every open range at once, Cycle sets the pace, from a lazy ~5-minute sweep down to 0.4 s (the readout switches to BPM at musical rates). Its Sync button hands that pace to the transport tempo instead: the same slider then snaps to musical divisions, 1/16 up to 4 bars, and the readout names the division and the tempo it is riding. Or hand the timing to Silence: the drift holds still while you play and re-rolls in every pause. Because the drift breathes with your playing energy, the band widens as you dig in and settles back in the rests, and the live tick on the slider shows what is being rendered right now. The whole Virtual Camera is included: position, view, optics, Ground and Heading all take a range, so the Conductor can operate the camera the way it operates an effect. On a camera in MPE mode every row starts on its own handle, so the framing you dial in is the framing you see, in silence and while you play; pull a ring off the handle and that axis becomes a journey your playing travels, drift included. CONST mode drifts on its own. The Conductor drifts camera values, never the camera PATH: which move runs is the Move dropdown's answer alone.
Start point (MPE): In MPE mode a slider is the destination and your playing performs the trip to it. That trip begins at the parameter's neutral, which is why playing can only ever add a look, never clear one. It does not have to. Move the pointer over a camera, Bloom, God Rays, Living World, Glitch Strength, Strobe Intensity, Hue, Mosaic Blocks, Zoom Speed, Shake Strength, Tunnel Warp or Point Cloud Spin, Angle, Tilt and Roll row in MPE mode and the small start ring appears where the journey begins. Drag it anywhere on the travel, including past the slider's own handle, and the move runs the other way: start wide and play your way in, start fogged and clear the air as you dig in, hold the camera off centre and let a phrase bring it home. A groove under the track draws the trip and the green bar inside it fills as you play, so you can see how far your playing is actually getting. Mosaic is the one row where every note travels its own trip inside its own disc, so a soft note stays blocky while a hard one right beside it comes clean; its bar reads the note pressing hardest. Double-click the start ring to hand the start back to the neutral. With the Conductor's range rings open on the same knob, its drift is capped to the stretch you drew, so every phrase reaches a different distance along the trip and none of them leaves it.
A row can carry two of them, and each one is undone the same way: point at the ring you want back and double-click that ring. A double-click next to it, on the track or on the slider's handle, does nothing.
Big ring pair (the Conductor's range rings): double-click either ring and the range closes. The two rings sit on your value as one again and that knob stops drifting.
Small ring (the MPE start ring): double-click it and the journey is handed back. The trip starts at the neutral again, which on the direct camera rows is the slider's own handle, so the small ring settles back onto it.
Where the small ring sits on the handle it takes the press, so move the value from anywhere else on the track and the ring comes along by itself.
DRIFT · MPE Processor
DRIFT is a live MPE processor that sits between your controller and your synth. It turns an ordinary MIDI keyboard into an expressive MPE instrument: one note per key goes in, a randomized, humanized MPE stream comes out, spread across the member channels with its own pressure, pitch and timbre motion per note. Every module, and every synth downstream, then reacts as if the part had been played on an expressive controller. While switched on, DRIFT replaces plain MIDI Thru on the enabled outputs. The master Intensity knob scales every randomization at once. Two modes decide how it reacts: Independent keeps the randomization running constantly, regardless of how you play, while Follow scales it with your own expression (pressure, pitch bend, CC74), subtle when you play plainly, wide when you dig in. By default Follow reads whichever of the three is strongest; an axis picker beside the mode pins it to Press, Bend or Timbre alone, so a slide no longer drives the swing when you meant aftertouch to. Follow never scales all the way down: a floor of 5 % keeps a trace of movement even on a perfectly flat note. A plain, non-MPE keyboard sends no such expression, so Follow stays near that floor and Independent is the mode to use. The factory presets are grouped as Keys, Pads, Chords, Arp and FX. Selecting a DRIFT preset also sets the ⏻ power switch: presets meant to be heard arm DRIFT, all others switch it off, so the switch always matches the picked entry.
Modulation: Five independent per-voice modulators, called lanes. Each lane carries its own target, shape, depth, rate and colour, and a target can sit on one lane only, so the colour stays a readable legend. A target you cannot pick is greyed out rather than dropped from the list, since numbers missing from a numbered row read as a fault. Two things grey a target: another lane already holds it, or it is protocol rather than modulation. Ten numbers are protocol, Bank Select (CC0 and CC32), Data Entry (CC6 and CC38), Data Increment and Decrement (CC96 and CC97), NRPN (CC98 and CC99) and RPN (CC100 and CC101). They carry the bytes of a state and parameter protocol instead of the position of a control, and with RPN it is not theoretical: DRIFT sets the bend range itself with RPN 0 on exactly the member channels a lane writes to. The catalogue stays complete behind the greying, so a saved stand keeps whatever target it was given. The target list is Pitch, Pressure and every continuous controller from CC0 to CC119 under its own name. That last part is worth more than it sounds, because on member channels an ordinary CC becomes a per-note CC, and that does not exist without MPE. Out of the box the lanes are the four classic destinations, Pitch, Brightness (CC74), Pressure and Pan (CC10), with the fifth lane switched off, so an older take sounds exactly as it did. Where a wave rests is knowledge in the list rather than a control you have to find: CC8, CC10 and CC74 swing around the centre, CC7 and CC11 dip from the top, everything else rises from zero.
Eight shapes are available: Drift (organic), Sine, Triangle, Saw Up, Saw Down, Square, S&H Random and Static (per note). Pitch depth is in cents, and its ceiling is the bend range itself: 4800 cents at the MPE standard of 48 semitones, 200 at the narrowest setting the Output tab offers. Every other target is a percentage of its own range. Rate runs from 0.02 to 25 Hz while the lane is free, curved so that the lower half of the slider covers everything up to 3 Hz. Each depth readout says setting then reach, the number the handle stands on and the number that actually leaves the module, because the master Intensity scales every one of them. On a plain keyboard DRIFT generates pressure and timbre from nothing; on an MPE controller it layers on top of what you already send.
Mode, the phase across the voices: Each lane also says how its voices relate to one another, which is the difference between a chorus and a breath. Chaos is the default and the behaviour DRIFT always had: every voice draws its own phase and its own rate variation, so MPE's 15 member channels never move in lockstep and even one sustained chord feels chorused and organic. Parallel puts every voice on one clock and one phase, so the chord swells and falls as a single block. Orbit spreads the phase evenly across the member channels, so the movement travels through the chord as a standing wave. Split puts alternate channels in counter-phase, so two halves pull against each other. Static and S&H Random have no phase to spread, so Orbit and Split are greyed out on those lanes and the lane runs as Parallel. Where a voice enters the wave is a setting of its own: Start is Auto (the mode decides, Chaos rolling a fresh phase per note while the other three run free), or Free, Random or Fixed stated outright, with the fixed start given as an angle. On an Orbit lane the fan itself is adjustable: Spread sets how far around one oscillation the 15 member channels are laid out, and Phase turns that whole fan, so the movement can travel through a chord over part of a cycle instead of always the full turn.
Sync, the lane on the tempo grid: A lane runs free or locked to the transport. Ticked, the same Rate slider stops reading in hertz and becomes the division picker, stepping through 22 divisions from 16/4 down to 1/64 with the dotted and triplet values in between, against the transport clock (MIDI Clock when one is present, otherwise the Internal Clock in the toolbar's tempo pill). Switching back and forth loses nothing, the hertz rate and the last division are both kept. A synced lane also drops the per-voice rate variation, because a rate that scatters cannot sit on a grid; where a voice sits inside the bar stays the Mode's business.
Notes: On top of the modulation, DRIFT can generate whole new notes. Octave Layers stack octave copies above and/or below every played note, each its own MPE voice with its own drift and a settable relative velocity, but each layer costs one of the 15 member channels per note. Chord Machine turns a single key into a full chord: the played note becomes the root and each interval gets its own voice (also with its own relative velocity). Scale Lock snaps every generated note into a chosen key and scale, so the Chord Machine becomes diatonic and Note Spread and Bend Quantize follow the same scale. Note Spread displaces each played note to a nearby degree for instant width (snapped to the scale when Scale Lock is on), with a Max displacement control. Bend Quantize pulls continuous glides onto scale notes (100% = hard snap, lower keeps some of the slide) while leaving plain held notes untouched, and a second switch applies the same snap to the drift DRIFT generates itself. The scale list ends in Chromatic, which holds every pitch class and so gives Bend Quantize an explicit semitone grid. Strum fans stacked voices out by pitch instead of sounding them together, with the delay set per voice rather than as a total, and running low to high or high to low. Humanize adds subtle per-hit velocity variation and a few milliseconds of random timing so no two notes are identical.
Arpeggiator: With the ARP engaged, held keys become a step pattern instead of sounding directly, and every step still runs through the full randomization chain (drift, pan, spread, even the Chord Machine for rhythmic chords). Direction can be Up, Down, Up & Down, Random, As Played or Chord, extended over 1-4 octaves. Chord is a distribution rather than a direction: it plays the whole held chord on every step instead of one note at a time, and because each step builds new voices, every hit re-rolls its own detune, LFO phase, velocity and timing offset, so the same chord breathes differently on every beat. There the octave range rotates the chord one octave per step instead of stacking it, keeping the voice count flat; every note still takes one of the 15 MPE channels, so a wide chord together with the Chord Machine can run past them. Free runs it at the Internal Clock tempo set in the toolbar's tempo pill; Sync locks the divisions (1/4, 1/8, 1/8T …) to the transport clock, MIDI Clock when one is present, otherwise the Internal Clock. Ratchet splits one step into 2, 3 or 4 equal repeats, so a step can machine-gun without the grid moving. Gate sets note length as a fraction of the step; Latch keeps the pattern playing after you release the keys, with the next key press starting a new chord. Shuffle makes every second step of the grid play late, from 50% (dead straight) through 66% (triplet swing) to 75% (hard dotted). The grid itself never moves, so a pair of steps always adds up to the same span of time and the pattern stays locked to the bar however far you push it.
MPE Output: DRIFT sends to the enabled MIDI outputs, and what listens there has to be an MPE-capable receiver: a synth, or a DAW track switched to MPE mode. Send MPE Setup transmits the MPE Configuration Message (15 member channels) plus the pitch-bend range to those outputs, it is sent automatically every time DRIFT is switched on, and the range must match what the receiving synth uses on its member channels (MPE standard is 48), or the drift depth will be wrong. The 👁 In / Out monitor decides what every visual module displays while DRIFT is active: the raw input you play, or DRIFT's processed output: the actual randomized MPE stream the synth receives, including chord voices, arp steps and channel allocation. The monitor changes what you see, not what is sent. With output monitoring, the toolbar's ● Rec captures DRIFT's output instead of the input, so you can export the humanized, arpeggiated or chorded MPE performance as a .mid file for your DAW. DRIFT also has its own glow and Transparent BG for the voice-lane visualiser.
The field, and where the controls sit: DRIFT carries its own controls on the module tile rather than in the settings overlay. A head row holds the ⏻ power switch, Intensity, the Motion mode with its axis, the global Mode and the preset bar; below the field sits a card with four tabs, Lanes, Notes, Arp and Output, which folds away when you want the picture alone.
Field views: The bar above the field picks what it draws. Lanes gives every lane its own band, Flow puts every curve in one band, Levels shows one bar per lane and channel, and Notes names the sounding notes and marks each voice as a drift node. The same bar sets the time axis: Hold runs a band whose right edge is now, over a span of 1.5, 3 or 6 seconds, while Scope retriggers on each note onset and is one arp step wide. The monitor beside it shows either Out, DRIFT’s own stream, or In + Out, which lays the values you played underneath the curves as pale lines, so what you did and what DRIFT made of it read against each other. A trail is kept per channel, so a voice keeps glowing for a moment after its note ends.
Seed: Randomization can be made repeatable. A seed of 0 is free randomness, the way DRIFT always ran; any other number replays the same take, from every ⏻ On and from every transport start, which is what makes a drifted performance recordable twice. The dice beside the field rolls a new seed and applies it to held notes at once.
Visuals only: DRIFT engages as soon as a MIDI output is enabled, or, with the monitor set to 👁 Out, entirely without one: the status then reads visuals only · no MIDI out, and DRIFT re-voices a plain keyboard or a single-channel DAW track across the member channels purely for the on-screen modules, no synth required. While it runs, thin ghost ticks on the sliders show what is effectively being sent: the toolbar Intensity tick appears in Follow mode (how far your expression scales the randomization below its maximum), and each lane's depth slider carries one thin stripe per sounding voice in that lane's colour, which is what tells the Modes apart at a glance: Chaos reads as a spread of stripes, Parallel collapses them onto one line.
Layout System
The interface is built on a 12-column CSS grid. Every module can be freely repositioned and resized.
- ↕Drag to move
Grab a module by its title bar, hold the left mouse button and drop it anywhere on the grid. It snaps to the nearest cell and stays where you let go, including on top of another module. The four arrows in the title bar nudge it one cell at a time, by the same rule.
- ⇄Shift-drag to swap
Hold Shift while grabbing the title bar and the module trades places with whatever you release it over, taking that slot's size as well. The dragged module stays put during the gesture and the target is ringed, so you always see which two are about to trade.
- ⤡Resize
Drag any of the eight resize handles (edges and corners) to change a module's size and position on the grid.
- ×Show / Hide
Close any module via its title bar button or the module manager. Reopen it from the module manager panel.
- +Multiple instances
Every module type except FORGE and DRIFT can be opened multiple times simultaneously, each instance has its own settings, channel filter, and snapshot slots. Those two run as single instances (FORGE keeps one GL context, DRIFT would otherwise send every note twice).
The Reset Layout button restores the default arrangement of all nine modules.
The module manager (☰) also offers Place All (add every module not currently on the grid), Randomize (shuffle the visible modules into a random arrangement) and Clear All (remove every module from the grid).
Keyboard Range: Global Settings lets you switch the on-screen key range (88 / 61 / 49 / 25 keys) everywhere pitch maps to position: Keyboard, Cascade including its Play a Picture source, Aura and FORGE, whose Pitch to Position mapping spans exactly this range. Typing Keys is clamped to it too, so its two manuals can never reach past the top key. Grand Staff is the exception, notation puts a pitch on a staff rather than on a keyboard. Smaller ranges mean bigger keys, useful on small screens or with a smaller controller.
Sustain Pedal: Global Settings also describes the pedal itself, because pedal jacks on many instruments can be configured. Sends picks which controller number the pedal arrives on (CC64 damper, CC11 expression, CC7 volume, or no pedal at all). Type says whether it is a switch or a continuous pedal with real half-pedal travel; left on Auto, MPE Insight works this out from your playing, since only a continuous pedal ever sends a value between its two ends. Invert is for a normally closed pedal that would otherwise read as permanently held down. The defaults suit an ordinary sustain switch, so most setups need nothing here.
Stage view. Shift+F11 clears the stage: toolbar, frames and titles disappear, the current layout grows to fill the screen edge to edge, and the cursor hides after two seconds. A layout that is taller than the screen keeps its working size and its lower end is cut off, so the picture never comes out smaller than it was in the workspace. For one big image, save a snapshot holding just the module you want on stage: on its own it takes the whole screen. Stage opens on the display the window sits on, so drag the window to the display you want before you go. Esc or F11 returns to the workspace, exactly as it was. Everything keeps playing: MIDI Learn, Typing Keys, Mouse Mode and the Demo. For streaming or recording, capture the Stage window in OBS. F11 alone toggles plain fullscreen with the toolbar still visible.
Channel Filtering
Global channel filter: Restricts all modules to selected MPE Member Channels (MIDI channels 2-16). The Master Channel (channel 1) is always excluded from filtering as it carries global messages.
Per-module filter: Each filterable module instance can either follow the global filter or set its own independent channel selection.
Filterable modules: Cascade · Keyboard · Aura · Forge · Grand Staff · Expression Overview · MIDI Stream Log · DRIFT.
Snapshots & Undo
Snapshots save named states to browser local storage and can be exported/imported as JSON files.
Global Snapshots (unlimited playlist)
Saves the complete app state: all module settings, layout, theme, and channel filters. No longer a fixed 10 slots, it's a freely growable list you reorder by dragging the ribbed handle in each row (always at least 5 rows shown). Export the whole list at once as a "playlist" file, e.g. to build a setlist for a gig and move it to another computer, or click rows to mark them and export just those.
Starting from nothing: ⊘ All Off
CASCADE, AURA and FORGE each carry an ⊘ All Off button that switches every drawn layer off at once, so you can build a look from an empty frame instead of switching ten things off by hand. What it spares is deliberate: your song, your picture and the Transparent BG setting stay as they are, because those are the frame you are working in rather than part of the look. AURA lands on its MPE Insight signature rather than on bare factory values, so the button hands back a picture instead of an empty field.
Selecting rows, and exporting only those
Clicking a row in any snapshot list marks it, and clicking more rows adds to the selection. While something is marked, Export and Delete work on the selection alone instead of the whole list, so a set of stands for one song can leave as a single file without taking the rest of the library with it. Importing such a file adds its entries to the list rather than replacing it. Clicking a marked row again unmarks it, and the button labels follow what is selected. This works in every module list, not only in the Global Snapshots.
Aura Snapshots (unlimited list)
Saves only Aura configuration and its channel filter override.
Module Snapshots (unlimited list each)
Per-instance snapshots for every open module. Settings only, not layout position.
Undo (20 steps)
Reverts destructive actions: Reset, Randomize, Preset load, Snapshot load, module removal. Ctrl+Z / Cmd+Z. Each step goes back to the full state from just before that action, so tweaks made after it are reverted too. There is no Redo.
Every snapshot list supports: Save · Load · Delete, a ribbed drag handle to reorder (the list scrolls along when you drag past its edge), plus one Export and one Import button below the list. Export writes the whole list as a single .json file; click one or more rows first (they get a dashed mark) and it exports just those instead, after listing them. Pressing a marked row's ✕ likewise deletes the whole selection, after listing it; ✕ on an unmarked row deletes only that row. Import reads any snapshot file back, a whole list, a marked selection, or a single snapshot, and adds what it finds to the end of the list, so nothing you already saved is overwritten. Live switching through a list with MIDI Learn Prev/Next stays a Global Snapshots feature.
A Global Snapshot also stores whether DRIFT is switched on. Loading a snapshot, stepping through the list with MIDI Learn, and Undo all restore that switch together with the rest of the state, so a song saved with DRIFT armed comes back armed. The autosaved state at app start never does this: the app always boots with DRIFT off, and one explicit switch-on per session stays the rule.
Every module's settings panel opens on three tabs: Controls holds the module's own settings, Library holds its Presets and Snapshots, and Channels holds its MIDI channel filter. PB/Mod has no member-channel filter and therefore shows two. The panel opens on Controls every time, so the gear always shows the same thing first. The global menu (☰) follows the same split across three tabs: Modules, Global, and Library.
Inside a Library the preset picker sits on top and the snapshot list below it. Only the list scrolls: Export/Import (and the global list's Prev/Next Learn) stay pinned at the bottom, so they remain reachable however long the list grows.
MIDI Learn (Live Snapshot Switching)
Step through the Global Snapshots list hands-free during a performance, learn a trigger once, then just play it to flip to the next or previous entry, no mouse required. Found in the Global panel under Presets & Snapshots → Snapshots → "Live Snapshot Switching (MIDI Learn)".
Two learnable triggers
"◀ Prev" and "Next ▶". Click Learn, then send a Note, a Control Change (e.g. a footswitch/pedal), or a Program Change, whichever your controller sends is captured automatically.
Channel 1 only, by design
Triggers are only ever read on MIDI Channel 1, the MPE "Manager" channel. Per the MPE spec, member notes never arrive there, only global values and pedal/footswitch CCs, so a learned trigger can never collide with real performance data on Channels 2-16, no matter how wide the MPE zone.
Safe with DRIFT
A learned trigger is a control message, not music: with DRIFT armed it still steps the snapshots, but it is swallowed before the processor, so it never fires a phantom member-channel note and never leaks a CC or Program Change to your synth. Triggers also keep working regardless of the 👁 In / Out monitor setting. Stepping snapshots can also arm or disarm DRIFT itself, exactly as saved.
Program Change syncs the whole rig
Learning a Program Change lets a single footswitch or workstation patch-change message switch MPE Insight's snapshot in lockstep with every other synth in a live rig, using the same message everything else already reacts to.
Collision protection
The same trigger can't mean both Prev and Next. If a just-sent trigger is already bound to the other direction, it's rejected with a brief "Already used by…" hint and learning stays active so you can just send a different one.
Only the "on"/press edge triggers a switch (Note On with velocity, CC/pedal value > 0), a pedal's release doesn't immediately fire it again. Triggers are saved locally and persist across restarts; clear them individually from the same panel.
Conductor control
The same mechanism drives the FORGE Conductor, from three more learn slots inside the Conductor block of the FORGE panel: Enable, Range and Cycle. Still Channel 1 only, still exclusive with the Global Snapshot triggers above, a pedal or CC can't mean two things at once.
Enable is a toggle
Learn a Note, CC or Program Change; only the press/on edge switches the Conductor on and off, same as the Snapshot triggers.
Range and Cycle are faders
These two only accept a CC, and every value is applied continuously, a fader pulled all the way down really does set 0%. Pick a CC your rig does not already use for something else.
CC64 stays off limits here too, it's the sustain pedal. Some DAWs send a Program Change on transport stop/start; a learned PC on Enable then flips the Conductor on every stop, same known caveat as the Snapshot triggers.
Recording
Click the Record button in the toolbar to start capturing all incoming MIDI events with sub-millisecond timestamps. An animated button and stopwatch display indicate active recording.
The recording captures channel messages and MIDI Clock pulses (0xF8) and Transport events (Start 0xFA, Continue 0xFB, Stop 0xFC).
Recorded timestamps come from each event itself, not from the display, so a live performance (and DRIFT's arpeggiator) is captured tightly even when the frame rate drops. The exception: the MIDI File player advances on the render loop, so re-recording a played file through DRIFT under heavy visual load can smear its timing onto the frame grid. For the cleanest bounce of processed MIDI, play the part live, or lighten the visuals (fewer modules / less glow) while re-recording from a file.
Export as MIDI File
After a take, a single ⬇ Export pill appears in the toolbar. Its popover bundles every export format in one place, MIDI File (Type 0 / Type 1), Raw Data (.csv) and Notation Sheet (PNG), and it stays open after each download, so you can grab several formats from the same recording.
Exports the recording as a Standard MIDI File importable into any DAW.
MIDI File Format (Type 0 / Type 1)
Before exporting, you can choose between two Standard MIDI File formats:
Type 0, Single Track
All MPE channels are merged into one track. Maximum compatibility, supported by every DAW and hardware device. Best choice if you simply want to re-import and play back the recording.
Type 1, Multi-Track
Each MPE channel is written to its own separate track. Ideal for post-processing in a DAW: each voice (finger) appears on its own lane, making it easy to edit individual expression curves, apply per-channel processing, or inspect specific notes in isolation.
Tempo: The actual played tempo is measured from recorded MIDI Clock pulses using a median inter-pulse calculation. This tempo is embedded as a Tempo meta-event. If no clock was received, the file defaults to 120 BPM.
Common format details: 480 PPQN · All MPE channels included · Clock and Transport bytes embedded at their exact tick positions.
The filename includes the date, time, duration, and measured BPM, e.g. mpe-insight-2026-06-20_14h30m_45s_128bpm.mid.
Export as CSV
Exports every recorded event as a table row. Columns:
| Column | Description |
|---|---|
| time_ms | Timestamp in milliseconds from recording start |
| status_hex | Raw status byte in hex (e.g. 0x90) |
| type | Message type label |
| channel | MIDI channel number (1-16) |
| data1 | First data byte (note number, controller number, etc.) |
| data2 | Second data byte (velocity, value, etc.) |
| label | Human-readable description |
| note_name | Note name for Note On/Off and Poly AT messages |
Clock pulses appear as type Clock / label MIDI Clock. Transport events appear as type Transport with labels Clock Start, Clock Continue, or Clock Stop.
Export as Lead Sheet (PNG)
After a take, open ⬇ Export in the toolbar: in the Notation Sheet section, 🎼 Generate & Download renders the whole recording as classic notation: a paginated grand staff, one system per line, stacked vertically. A short take downloads as one PNG; a long one splits automatically into several PNG pages (-p1, -p2, …) so no single image exceeds what the browser can render. The engraving follows your Grand Staff module settings (key signature, colours, chord detection), and chord symbols sit on one constant lane above the staves, just like a printed lead sheet.
Where bar lines and line breaks fall is decided by the Tempo Source:
Manual BPM
Set BPM (20-300) and time signature yourself, and choose how many bars go on each line (1-16).
MIDI Clock
Uses the tempo detected from incoming MIDI Clock at the moment recording started, bar lines phase-locked to the actual downbeat.
Free
No bar lines, lines break after a set number of seconds instead of bars. For rubato and free playing.
Performance Meter
A small ● fps pill at the right end of the toolbar shows the app's health at a glance: live FPS, frame time in milliseconds and the main-thread load, the share of the 60 fps frame budget actually in use. Green means comfortable headroom, amber is close to the ceiling, red means the app can't hold 60 fps. Click the pill for a per-module render breakdown that shows which module costs the most. FORGE reports a GPU line of its own there, because its cost sits on the graphics card rather than in the module row, and it lowers its own render scale to 75 or 50 per cent before the frame rate gives way, then climbs back when there is room. If the system falls back to software rendering, a red line says so: without a GPU everything is slow, and that is worth knowing before you blame a module. The meter can be shown or hidden with the Performance meter checkbox in Global Settings, while hidden it costs nothing.
Appearance & Theme
The entire interface colour system is adjustable in real time from the settings panel.
Interface Color
HSL picker controlling hue, saturation, and brightness of all surfaces, borders, and title bars. Below 50% brightness = Dark Mode; above = Light Mode.
Accent Color
Separate HSL picker for highlight colours, active buttons, focus rings, and title text.
Brightness & Intensity
Global brightness filter (30-100%) and saturation filter (0-100%) applied to the entire interface.
Built-in Themes
Eight presets: Midnight · Daylight · Ember · Forest · Rosé · Violet · Mono · Glacier.
Transparent Modules
Every visual module has its own Transparent BG toggle in its settings, the module keeps its content but drops its panel background. ◩ All Transparent in Global Settings temporarily shows every module transparent without touching any module's own Transparent BG setting.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl+Z | Step back to before the last destructive action (20 steps) |
| Shift+drag on a slider | Fine adjustment: the value moves one step at a time and takes real travel to get there, and centre detents pause so every value is reachable. It applies wherever you drag the value itself, the plain track and, on a Forge row with the Conductor running, the groove and the green line inside it. The two range rings and the journey ring keep their normal speed, because they place a range or a starting point rather than the value |
Supported Controllers
MPE Insight works with any class-compliant MIDI controller over standard MIDI. No custom drivers or plugins are required. An MPE controller delivers the five expression dimensions itself; with anything else, DRIFT generates them, and every module downstream sees the same MPE stream.
Any MIDI keyboard
Switch DRIFT on for per-note pressure, pitch and timbre motion
ROLI Seaboard
LinnStrument
Sensel Morph
Haken Continuum
Expressive E Osmose
Joué
Ableton Push 3
Enable MPE in Live: Push settings → enable "MPE Mode"
Ableton Push 2
Enable MPE in Live: Push settings → enable "MPE Mode"
ROLI Airwave
Gestural overlay, sends 5 air dimensions as MIDI CC per hand, not per-note MPE. Works as a modulation source alongside any keyboard.
Don't see yours? It works anyway. MPE Insight reads standard per-channel MIDI messages, not a vendor-specific protocol, so any class-compliant device is understood. The list above only says which controllers arrive with MPE already in the stream.