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, DRIFT supplies the per-note expression.
Requirements
Operating system: Windows 10 (version 1803 or later) or Windows 11. WebView2 is required and is pre-installed on all modern Windows systems.
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
Enter your license key in the activation screen. The key is in your purchase confirmation email. Format: XXXX-XXXX-XXXX-XXXX.
-
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 all standard MPE messages: Note On/Off, Poly Aftertouch, Channel Pressure, Pitch Bend, CC74 (Timbre/Brightness), Mod Wheel, Program Change, and MIDI Clock.
MIDI Routing from a DAW
To analyse MIDI that is already playing inside your DAW, you can use a virtual MIDI loopback driver such as loopMIDI (Windows, free) to route MIDI from the DAW into MPE Insight without any additional hardware.
-
1
Install loopMIDI
Download and install loopMIDI from tobias-erichsen.de. Create a new virtual port (e.g. "MPE Insight In").
-
2
Route your DAW to the virtual port
In your DAW, set the MIDI output of the relevant track or instrument to the loopMIDI virtual port you created.
-
3
Select it as input in MPE Insight
Open the MIDI device list in MPE Insight and activate the virtual loopMIDI port.
Make sure to disable MIDI Input for the loopMIDI 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 loopMIDI port; MPE Insight reads from it without sending anything back.
MIDI Output
A dedicated output port with three independent send modes:
Keyboard Play Mode
Click or touch the Keyboard module to send real MPE notes. X-position controls Pitch Bend, Y-position controls Pressure or CC74.
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
MPE Insight detects incoming MIDI Clock signals (0xF8) and displays the current tempo in BPM in the toolbar. The display greys out when no clock signal is received.
MIDI Clock events are included in recordings and embedded as a Tempo meta-event in exported MIDI files, using the actual measured tempo, not a fixed 120 BPM placeholder.
Modules
Keyboard
A piano display of 88, 61 or 49 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 Grid (one lane per MPE channel). 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.
Settings: Eight visual designs (Classic, Glass, Neon, Minimal, Dark, Fingerboard, Motion, Pixel Grid) with per-design colours (Fingerboard stripe, Motion wave pair, Pixel Grid unlit/lit LED) · 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) · Transparent BG. The Pitch Bend ring reads the instrument's real bend range automatically (RPN 0), the same 48-semitone MPE default until an instrument reports otherwise.
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 Score Source, which turns a picture, a drawing or plain text into a note rain, no keys needed.
Score Source: 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, Vines and Stars (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 · hand split (a separate gradient per hand from a split point) · note texture fills (noise, lines, diamond, glass, outline or a custom image) · pitch-bend shift with a bend range that is Auto by default, following what the instrument reports through RPN 0 (the MPE standard of 48 semitones until it says otherwise), with fixed values available as a display zoom for making small bends legible · 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 (sparks, ripple, fountain, firework, flames, geyser, rain, lightning, vortex …) · 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). Two display modes: Classic (two vertical sliders) and Radial (circular dial). Both sliders are colour-configurable. The wheel itself always shows the raw pitch-bend position (full deflection is full deflection, whatever the instrument's real bend range), so its own Pitch Bend Range setting (¼-48 semitones, default 48) is a display zoom rather than a calibration value, it only decides how far that swing travels across the slider.
Expression Overview
One module, four 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 Mode selector switches between two time-based views (Lines, 3D Box) that plot every source over a configurable window, and two current-moment views (Radar, Landscape 3D) 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.
Pitch Bend always reads in real semitones (e.g. +2.00 st), automatically scaled to whichever channel's reported bend range (RPN 0) is contributing the largest swing, no manual range setting needed.
Settings: Mode · sources (add / remove / recolour, up to 10, Radar and Landscape 3D need at least 3) · Time Window (5-30 s, Lines / 3D Box) · 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, both respect the module's MIDI channel filter (the master channel 1 always passes). Transparent BG is available here too.
Two things an instrument says about itself get their own line here, because they change how every module draws: Bend Range (RPN 0) and MPE Zone (the MPE Configuration Message). A controller that is not set to the MPE default of 48 semitones per note is drawn at its real deflection from that moment on, instead of at an assumed one. Many controllers announce this only when they power up or when their zone changes, so the line appears on connect rather than while you play.
Grand Staff
Four display modes share one engraving engine, switch with the Mode buttons 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, and Weave leaves notation behind for a harmonic field.
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 (Contour), 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) 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.
Settings: Mode (Now / Time / Flow / Weave) · key signature (all major and minor keys) · note name labels · Pitch Bend Hook · chord detection with label colour · 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 · 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-two 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). In Scenes, Tonewheel is a pitch-clock dial where notes ignite on the ring and drift back into a depth tunnel.
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 and follows what the instrument reports through RPN 0 (the MPE standard of 48 semitones until it says otherwise); fixed values stay available as a display zoom.
Aura Presets
50 built-in presets covering all twenty-two styles. Presets set the style, colour pair, segment count, signal routing, and background colour simultaneously. Custom configurations can be saved in the five per-instance Aura Snapshot slots.
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 · strobe · feedback trails · Retro Pixel VHS · zoom · rotation · tunnel warp · camera shake, each effect independently switchable between off, MPE-driven and a constant value.
Global & mapping: Sensitivity sets how strongly your playing drives the shader, Motion Speed the overall animation rate, and Size the radius of the disc the MPE effects play inside. Pitch → Position decides where a note lands on the image: Circle, Horizontal, Vertical, Color key (nearest matching colour) or Hue key. A Depth Preview toggle shows the estimated depth-map thumbnail.
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: Parallax (Depth, Motion), Heat shimmer, Flow and Chroma (Strength, Motion), Kaleidoscope (Segments, Motion), Infinity Spiral (Twist, Rings, Motion), Glitch (Strength, Rate, each strike tears inside its note's disc), Mosaic (Blocks, pressure makes them chunkier), False Color (Mix, Solarize, Hue, pitch bend can spin the palette live), Normal Light (Strength, colour, plus a diffuse Fill), Strobe (Intensity, Speed, colour, plus a Backlight mode that fires the God-Ray pass instead of a flat flash) and Feedback Trails (Decay).
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. A full rig of controls is available: Truck X/Y (real parallax pan), Dolly (in/out), Yaw, Tilt and Roll (rotation), FOV (telephoto ↔ wide), Lens (pincushion ↔ barrel/fisheye) and camera-motion Blur. MPE Amt sets how far playing performs the move (press = fly to the pose, release = fly home), and Reset Pose returns the framing to neutral. 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 as a seamlessly looping Custom move preset.
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. Motion Speed scales how fast and how far every move travels; the manual sliders below stay live as a trim on top of the preset.
Camera & post-process: Alongside the Virtual Camera, simpler whole-frame transforms are available: Zoom, Rotate (speed and direction), Tunnel warp and Shake. Three 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 slow rolling tracking bar), 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 and a Duotone tint with its own colour. 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. Intensity is a window: it grants the Conductor a share of each knob's full travel, centred on your setting, at 100% the Conductor owns the knob. Cycle sets the pace, from a lazy ~5-minute sweep down to 0.4 s (the readout switches to BPM at musical rates), or hand the timing to Silence: the drift holds still while you play and re-rolls in every pause. Each of the 33 targets, effects, Living World, camera, even the Camera Move preset, shows a live bar in the panel: the notch is your slider value, the band is the range the Conductor may use, the dot is what is rendered right now. The drift breathes with your playing energy, and wilder camera moves only enter the pool as that energy rises.
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.
Modulation: Four independent per-voice LFOs, one per MPE dimension, Pitch, Timbre (CC74), Pressure and Pan (CC10), each with its own shape, depth and rate, and its own colour in the voice-lane display. Eight shapes are available: Drift (organic), Sine, Triangle, Saw Up, Saw Down, Square, S&H Random and Static (per note). Because every voice runs its own LFO phase, MPE's 15 member channels never move in lockstep, giving a chorused, organic feel even from a single sustained note. Pitch depth is in cents, up to 200 of them, so two full semitones; the others are a percentage. On a plain keyboard DRIFT generates pressure and timbre from nothing; on an MPE controller it layers on top of what you already send. All depths scale with the master Intensity.
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. 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. It runs free at its own BPM (Tempo slider) or locks to incoming MIDI Clock at a chosen division (1/4, 1/8, 1/8T …). Gate sets note length as a fraction of the step; Hold keeps the pattern playing after you release the keys, with the next key press starting a new chord.
MPE Output: DRIFT sends to the enabled MIDI outputs. 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, at zero added latency. 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.
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 modulation depth slider carries a tick in its parameter colour.
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 keys) everywhere pitch maps to position, Keyboard, Cascade, Aura and Grand Staff. Smaller ranges mean bigger keys, useful on small screens or with a smaller controller.
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, reorderable list (↑/↓, always at least 5 rows shown). Export or import the whole list at once as a "playlist" file, e.g. to build a setlist for a gig and move it to another computer.
Aura Snapshots (5 slots)
Saves only Aura configuration and its channel filter override.
Module Snapshots (5 slots 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.
All snapshot slots support: Save · Load · Delete · Export as .json · Import from .json. Global Snapshots additionally support Move Up/Down and export/import of the entire list as one .json "playlist" file.
Presets and Snapshots now live under two compact tabs in every module's settings panel, instead of two stacked sections, one click switches between them.
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.
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.
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, downloaded as a single PNG. 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. 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 | Undo last destructive action (20 steps) |
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.