SSP
Percussa-SSP--GRID
2.4.9-Beta
Mod

Percussa-SSP--GRID

Hype41/100

An 8-Channel Sampler player thats really fast to set up.. takes influences from BitBox Micro and Elektron devices

Percussa-SSP--GRID is a mod for the Percussa SSP, by @kuttor. Latest release 2.4.9-Beta (July 2026), 3 stars on GitHub.

forPercussa SSP·by@kuttor

Unclaimed. Is this yours? Sign in with GitHub as @kuttor to claim it.

Downloads
0
Stars
3
Forks
0
Commits
78
Last commit
Download 2.4.9-Beta

GRID.so· 7.9 MB

Custom license· kuttor/Percussa-SSP--GRID·downloads come from the creator’s GitHub releases

77
Commits
27
Releases
77 commits and 27 releases in the last year
Activity · last 12 months
27 releases
  1. 2.4.9-BetaLatest1 file

    GRID 2.4.9-beta — CHANGELOGBug fixes + one new pad mode.Fixed

    Roll bug — after long idle (~hour+), sample playback would stop entirely. Pad triggers showed the red cursor sprinting across the sample with "ROLL 1/8" persisting bottom-left. No audio. Reload preset fixed it temporarily. Root cause: rollPad_ was cleared only when the same pad's release event arrived from the SSP. If SSP dropped that release during idle (its button scanner does this when quiet), rollPad_ stayed stuck 0-7 forever. Timer kept firing retriggers at 30-160ms intervals — too fast for any audio to be heard. Three-layer fix: physical hold state tracked per pad (watchdog clears roll when button not actually held), idle-drift watchdog (>5s timer gap wipes all hold state on host resume), modal-entry clears on browse/config/popup/keyboard as belt-and-suspenders. TAPE settings lost on reload — six tape fields existed on SampleSlot since 2.4.7 but were never wired into the XML save/load path. Confirmed by tracing the code — zero references to tape in the state save block. Fixed in all three persistence paths: preset save/load, kit capture, kit apply (both bundled and standard). Old 2.4.8 patches without these fields load neutral (rate=1.0, character=0.0) instead of garbage.

    TIME settings — tester wasn't sure. Traced: TIME is saved as "stretch" attribute at line 1804. It IS persisted. If it looked wrong before, was likely the same slot XML corruption from tape's missing fields reading neighbour data. Added

    MIDI-CV pad mode — sixth PadMode value. Pad an output 2 different parameter types chosen between, GATE, TRIGGER, VELOCITY, CC-CV, PITCH... where CC-CV you choose the CC.

    Debug

    Watchdog fires log to ticker when Debug Msgs is on (ContextBrowser → System). Testers can screenshot "Roll cleared (button not held)" or "Idle drift: hold state cleared" if the bug recurs — tells us which defense caught it. Known limits (planned, not shipped)

    MIDI-CV pads don't participate in choke groups. Say the word.

    Roll doesn't pulse the MIDI-CV gate. Separate feature.

  2. 2.4.8-Beta1 file

    GRID 2.4.8-beta

    The "make MIDI actually work" release. Plus a bag of QoL wins from tester feedback on 2.4.7. MIDI

    • Per-pad default channel: Pad N receives on Channel N. New pads receive MIDI on their natural channel out of the box. Old patches with midiChannel=0 (the old OFF default that tripped up testers) can be reset via Options → Reset MIDI Settings.
    • MIDI-triggered slices now route through triggerSlice with per-voice regions, not by mutating the slot's trim. Fixes: waveform blackout, "next slicing operation slices inside the slice you just played," and slow-loop responses to incoming MIDI notes.
    • Slice tab pad audition fixed with the same per-voice region pattern. Pad buttons 1-8 in slice tab now audition slices in a sliding window (pad 1 = slice at cursor, pad 2 = next slice, etc.) instead of playing the whole sample.
    • Per-slice MIDI CC assignment. Each slice can have its own CC number for direct triggering. E3 hold bubble in slice tab → "MIDI CC" action. E3 turn cycles cursor slice's CC. E3 push bulk-assigns sequential CCs starting from cursor slice's current value. When MIDI CC is the active edit mode, slice numbers display their assigned CC underneath. Additive with ccStart — both routing paths can be used at once.
    • CC defaults moved off the mod wheel. ccStart was CC 1, which collided with every MIDI keyboard. New defaults: ccStart=16, ccEnd=17, ccStretch=18 (general-purpose controller range). ccVolume=7, ccPan=10, ccFilter=74 unchanged (standard).
    • Two independent MIDI device slots. ContextBrowser → MIDI → Pad MIDI Device (for sequencer notes that fire pads) and Global MIDI Device (for global controls like mixer faders, mute CCs). Setting one does not touch the other. Routing infra wired now; the Globals UI surface lands in 2.4.9.
    • Setup Mixer Faders one-touch action. Push it and every pad gets its natural MIDI channel + ccVolume=CC 7. Map an 8-fader controller to CC 7 on channels 1-8 → working mixer in seconds.
    • Pad Mute CC Base. A configurable base CC where (base+0)..(base+7) mute pads 1-8. Value ≥ 64 mutes, < 64 unmutes. Default base CC 24. Listens on Global MIDI Device when connected, else Pad MIDI Device.
    • Reset MIDI Settings (per-pad action) under Options. Restores pad's channel + CC map + per-slice CCs to factory defaults without touching sample, params, or slices.
    • MIDI device identifier-based matching (per TheTechnobear v260425). Device lookup is now by identifier first, name fallback. Robust against duplicate-name ports and multi-port devices. Patches save both identifier and name; identifier wins on load. Old patches with name-only saves still load via fallback path — re-select the device once and re-save to lock in the identifier.
    • MIDI device list rescans on every open. Hot-plug a device after the plugin started and it'll show up next time you open the picker. The previous "Refresh Devices" button is removed — it's automatic now.
    • MIDI device cycle off-by-one fixed. Pushing right with no device selected now lands on your first connected device. Previously stuck at "None" because index 0 was treated as the first real device.

    File Browser

    • Left arrow goes up one directory. On Smart Home headers, left arrow toggles section collapse.
    • Right arrow enters folder when cursor is on one. Files require enc1 push (prevents accidental loads via arrow nav).
    • Collapsible Smart Home sections with [+] / [-] markers. Encoder 1 push on a section header (KITS / STACKS / RECORDINGS / SAMPLES) toggles collapse. Collapse state persists for the session.
    • Smart Home section labels enlarged (13pt → 20pt) for readability.
    • Slice cache no longer resurrects cleared slices. Clear All now flushes the cache for the current file. cacheSlicesForPad writes through on zero-slice state (removes stale entries) instead of early-returning. Audition skips reload if the same file is already loaded.

    Encoders

    • Bounce filter. Drops phantom reversal pulses during fast spins. Requires 3+ same-direction deltas within a 50ms window before filtering kicks in — intentional direction changes pass through. Should eliminate the "spinning, value bounces back" jitter on SSP hardware.

    Slice Tab

    • Encoder label reflects active slicing style. "Slices: Division 32" / "Slices: Transients 12" / "Slices: Crossfade 16" depending on what's set via E2 hold bubble.
    • MIDI CC added as a 7th E3 hold-bubble action (see MIDI section above).

    Pad Management

    • Copy Pad Settings + Paste to All Pads under Options. Captures the current pad's params (mode, vol/pan/pitch/stretch, fade, filter, lofi, comp, choke, voice mode, CC map) and stamps them onto all other pads. Sample, slices, and MIDI channel are NOT copied — sample because that's why you have separate pads, channel because pasting the same channel to all 8 pads recreates OMNI chaos.

    UX Cleanup

    • Picker bubble dot indicator highlights the currently-active selection (carried forward from 2.4.7).
    • ContextBrowser MIDI restructured. Per-pad MIDI stuff (channel, CC map, reset) stays in the pad area. Device pickers, clock, mute CCs, Setup Mixer Faders moved to the GLOBAL section. Scope is now visually unambiguous.

    Patches Saved in 2.4.7 — Migration Notes

    • Pads with midiChannel=0 saved from 2.4.7 stay OFF on load (explicit value). Reset MIDI Settings under Options restores them to their natural default.
    • MIDI device name-only saves still load via the name-fallback path. Re-select the device once and re-save to write the identifier into the patch.
    • Patches with explicit ccStart=1 keep their value. New patches default to CC 16.
  3. 2.4.7-Beta1 file

    GRID 2.4.7-beta

    Slice Editor

    1. Per-voice slice region — slice audition no longer mutates pad trim, no more dark blackout after triggering a slice
    2. Red playhead fill now draws within the auditioned slice instead of from sample start
    3. Active slice highlight bumped from 0.15 to 0.32 alpha — cutout slice numbers are legible
    4. Slice numbers no longer bold — crisp at small sizes, single 1px shadow
    5. Zoom encoder push (E1) auditions the slice at cursor (was zero-crossing snap)
    6. Down arrow exits the editor (RS also exits; LS is a no-op)

    Slice Tab (grid view)

    1. Cursor reads "0/0" when no slices exist; encoder turn is a no-op until slices are created
    2. Cursor turn snaps to slice centers
    3. Slice markers shown on the pad mini-waveform
    4. Active cursor slice gets a white highlight matching the editor
    5. Red audition flash mirrored to the mini-waveform (350ms fade)
    6. Edit hold bubble: added "Export Slices to Samples" as an action

    Speech Bubbles Popups

    1. Single-encoder navigation — the anchor encoder does everything: turn scrolls rows, push enters edit mode if the row has choices, turn cycles choices, push commits
    2. Other encoders no longer interact with the bubble while it is open
    3. Any arrow (up/down/left/right) cancels the bubble without committing
    4. Tail aligned to encoder center on all four encoders (E3 was 26px off)
    5. Bubble width is adaptive to content, clamps between 260 and 700 px
    6. Bubble renders on top of every overlay including the slice editor
    7. Slice editor: hold progress bar visible at full opacity while bubble opens

    Slice Style Bubble (E2)

    1. Strength values spelled out: Low / Medium / High instead of Low / Med / High
    2. Vertical separator bar between row name and choices, wider spacing between choices

    ContextBrowser

    1. MIDI and MIDI CC merged into a single MIDI section
    2. MIDI Device row added at the top of the MIDI section, MIDI Channel below it, then a gap, then the CC table
    3. "Channel" renamed to "MIDI Channel"
    4. "Tools" section removed; Export Slices to Samples is now a Slice tab action; Clear Pad moved to Options
    5. Subheaders rendered in a lighter salmon-red to differentiate from the main pad/global headers

    Bug Fixes

    1. Audition no longer permanently darkens pad waveform
    2. Pitch edits made in the slice tab grid view now persist when entering the slice editor (cursor transfer was being clobbered on entry)
    3. Slice editor backdrop no longer fades the encoder bar — hold progress bars are clearly visible
    4. Encoder progress bar nudge on E3 fixed (was 26px off)
    5. Bubble can no longer be hidden behind the slice editor
  4. 2.4.6-Beta1 file

    GRID 2.4.6-beta — Changelog Critical Fix

    • Write New crash FIXED — Root cause: JUCE 7 incompatibility with SSP host lifecycle. Switched to JUCE 8.0.6 (matching TheTechnobear's build). Write New now works reliably after entering the module.

    Stability & Safety

    • Removed juce::Timer inheritance — SSP host drives UI via frameStart(), eliminates threading race on plugin deletion
    • Added stateLock_ mutex on getState/setState — prevents host + autosave from racing
    • SSPApi destroying_ guard — audio thread outputs silence during plugin teardown
    • Safe SampleSlot::clear() — buffers stay allocated, prevents use-after-free if audio thread is mid-read
    • getState uses malloc (not new char[]) — safer for C-style host API
    • Null checks on editor in frameStart/renderToImage

    Autosave

    • setStateInformation nuclear-clears ALL pads to factory defaults before loading — prevents preset contamination
    • autosaveEnabled_ no longer loaded from per-preset state (global pref only)
    • Reversed attribute properly set/cleared on load (was set-only)

    Pad Management

    • All raw slot.clear() replaced with initPad() — ensures full reset of reversed, MIDI, choke, etc.
    • clearAllPads resets clockDiv_, compEnabled_, midiClockEnabled_

    UI Improvements

    • SAVED indicator: green pill badge at 18pt with 2-second fade (was tiny 14pt text)
    • Dirty indicator dot enlarged (10px)
    • Encoder value enlargement: turns to 26pt for 800ms when adjusting, takes over full encoder slot
    • Browser: selected line 22pt, unselected 18pt
    • Encoder hold: red fill bar animation
    • Roll visual: red mute-style overlay with large centered "ROLL 1/8" text
    • Enc0 text clipping fixed

    Config / Settings

    • Enable Logging + View Crash Log in config (reads from Grid Logs/ on SD root)
    • Roll Speed setting (1/2 → 1/32), persists to global prefs
    • Config scroll position preserved on re-enter
    • Left/right arrows auto-enter config edit mode
    • Left/right arrow hold-repeat (400ms delay, 120ms rate)
    • exitMixer/exitCompEditor clear shift flags

    File Browser

    • browseGoUp finds the folder cursor came from
    • Mod preset serialization optimized (skip empty presets)
  5. 2.4.5-Beta1 file

    GRID 2.4.5-beta

    • Crash fix — Write New
    • Thread race between host preset save and autosave, both serializing pad state simultaneously on different threads. Added stateLock_ mutex. SSPApi getState/setState also wrapped in try-catch.
    • Roll visual
    • Pulsing cyan border on rolling pad with speed label. Enc0 shows "ROLL 1/8" persistently while holding.
    • Browse position
    • File browser remembers position on close/reopen including Smart Home. No more resetting to top.
    • Encoder hold progress
    • Browse mode enc0/1/2 holds now show fill bar animation. MOD page hold progress fixed — was being overwritten by updateEncoderDisplay on same timer tick, moved to render after.
    • Slice serialization
    • Bounds-clamped slice count in getStateInformation to prevent OOB on corrupt state.
    • Linker fix
    • paintCheatSheet/paintAbout stub implementations added.
  6. 2.4.4-Beta2.4.41 file

    GRID 2.4.4-beta Changelog Crash Fix

    • Removed JUCE timer from editor (root cause of crash on write/delete — confirmed by TheTechnobear). SSP's frameStart() now drives all UI updates. This was a threading race condition where the JUCE timer thread and SSP's render thread were both calling timerCallback() simultaneously.

    New Features

    • Gate mode: fifth pad mode — hold button to play, release to stop. Perfect for risers, transitions, and sound design where you want manual control over when a sample cuts.
    • Kit picker popup: up/down arrows now open a centered scrollable list of all kits instead of blind cycling. Autosave at the top with ACTIVE indicator on current kit. Right arrow confirms, left arrow cancels. Fast and visual.
    • Bar.Beat counter: shows in the bottom bar (next to RCL pill) when MIDI transport is running. Displays as 1.1, 1.2, 1.3, 1.4, 2.1 etc.
    • MIDI Transport toggle: Config → Performance → MIDI Transport ON/OFF. Lets you ignore MIDI start/stop/continue if you don't want external transport control.

    Fixes

    • CV pitch scaling corrected: was ±1 octave (×12), now ±5 octaves (×60) matching standard 1V/oct across the SSP's ±5V range.
    • CV pitch no longer overwrites encoder pitch — CV modulates on top via separate offset. Turn the encoder to +3st, patch in CV, they add together like every other Eurorack module.
    • MIDI channel preserved across kit switches — switching kits no longer resets your MIDI channel assignments.
    • SSPApi.cpp reverted to original (TB was right — null guards were papering over the real issue).
    • Other minor improvements and fixes
  7. 2.4.3-Beta1 file

    GRID 2.4.3-beta

    • Per-pad compressor bypass: Config → Routing → Comp Bypass (pad audio skips bus compressor entirely)
    • Sidechain Source restored to compressor config section
    • Recall point system: Left+Right arrows saves state snapshot to RAM, Up+Down restores instantly
    • Red "RCL" pill indicator in bottom bar when recall point is set
    • Autosave toggle: Config → System → Autosave (ON/OFF, default ON)
    • Autosave only runs on the Autosave kit — named kits are never auto-overwritten
    • Autosave dirty flag: only writes to disk when state actually changes
    • Save Kit action added to Config → System (opens name entry keyboard)
    • Kit switching: arrow up past first kit returns to Autosave state
    • Thread safety fix: CriticalSection added to sliceCache_ (fixes "write new" crash)
    • Hermite cubic interpolation replaces linear (cleaner pitched playback)
    • Loop boundary crossfade: 128-sample blend eliminates loop clicks
    • Waveform overview cache: pre-computed on load, ~1000x fewer sample reads per paint frame
    • Multi-select fix: enc0 push toggles files, navigates folders (was: exit multi-select)
    • Multi-select commit moved to enc3 push (cancel if nothing selected)
    • Keyboard name editor: enc0 push selects characters (was: left shift only)
    • Keyboard encoder scrolling: enc0 scrolls left/right with row wrapping, enc1 scrolls up/down with wrapping
    • Config browser arrow repeat: hold up/down for continuous scrolling (400ms delay, 80ms repeat)
    • macOS resource fork filtering: ._ files, .DS_Store, hidden directories excluded from file browser
    • Smart Home reordered: SAMPLES section moved to top
    • File specs text enlarged to 20pt with brighter color
    • RCL pill sized to fill bottom bar height
    • Browser font max bumped from +3 to +5
    • All popups close consistently with Down, Left Shift, or Right Shift
    • Removed unused compPrevOutL_/R_ and lastAutosaveMs_ fields (3 fewer compiler warnings)
    • Removed left shift long-press smart home holdover
  8. 2.4.2-Beta1 file

    GRID 2.4.2-beta

    • Default kit renamed to "Autosave" with automatic state persistence every ~5 seconds (lightweight XML, no WAV bundling)
    • Autosave state loads on plugin boot — always resumes where you left off
    • Kit name moved to bottom-right of encoder bar, brighter (white bold 20pt), tighter padding
    • Firmware version moved from bottom bar into Config Browser → About section
    • Up/Down arrows now immediately load kits (removed 3-second preview/commit workflow)
    • Boundary messages: "Already at first kit" / "Already at last kit" / "No saved kits"
    • Config browser: PAD header pinned at top, never scrolls away
    • Config browser: scrolling up now reveals section subheaders above the selected item
    • Config browser: row height increased 32→36, label fonts +2pt, value fonts +2pt
    • Config browser: subheaders enlarged to 20pt bold, dividers enlarged to 24pt with thicker dashes
    • Config browser: spacers added between every parameter group
    • Config browser: encoder 3 now scrolls and selects (was encoder 0), encoder 0 navigates pads
    • Config browser: Left/Right buttons only adjust values when already in edit mode
    • Renamed: Lo-Fi → Lo-Fi Emulation, Stretch → Stretch Algorithm, Reverse → Sample Reverse, Output Ch → Pad Output Channel, Send to Mix → Send to Stereo Mix, CLK Beats → Clock Beats, Enc Speed → Encoder Speed, SC Filter → Sidechain Filter, Choke Grp → Choke Group
    • Routing section moved under per-pad options (was after MIDI CC)
    • Compressor section: "Enable Compressor" + "Show Compressor" at top, followed by params
    • Added "Show Mixer" under Performance (8-pad volume fader popup)
    • Mixer popup: vertical faders with volume %, mute/playing indicators, enc0 selects pad, enc1 adjusts volume
    • Compressor editor: backdrop darkened to 96% opaque, encoder labels dim behind overlay
    • Compressor editor: ratio curve uses smooth anti-aliased path with knee at 30%, quadratic blend
    • Compressor editor: ratio minimum clamped to 1.5:1
    • Compressor editor: attack icon is now mirrored release (rising slope, purple)
    • Compressor editor: low cut icon uses horizontal cutoff line (like threshold), moves with Hz
    • Compressor editor: full parameter names (Threshold, Ratio, Attack, Release, Makeup, Mix, SC Filter, Low Cut)
    • Compressor editor: values 24pt on active row, labels 16pt
    • Compressor scope: tightened dB range from -60..0 to -36..0 for better signal visibility
    • Compressor scope: threshold line now solid 3px orange with "Threshold -12dB" label at 14pt
    • Compressor scope: GR envelope hangs below threshold line (visually connected)
    • Removed left shift long-press smart home holdover from file browser
  9. 2.4.0-Beta1 file

    GRID 2.4.0-beta MOD tab (replaces OPTIONS):

    • 3 independent step modulation slots per pad (Mod A/B/C)
    • 7 targets: Velocity, Pitch, Start, End, Filter, Pan, Stretch
    • 5 actions: Increase, Decrease, Ping/Pong, Random, Sample/Hold
    • 16-step pattern advances on every trigger, wraps at 16
    • Mod editor popup: hold encoder 1.5s to open. Pixel art strength/action/preset icons, 2×8 red step grid
    • 2×4 block selection matches SSP physical button layout. Left/right arrows toggle blocks
    • 10 presets per mod slot. Auto-save on editor close. Enc3 cycles presets
    • Full state save/restore including presets

    Crash fix (2.3.1):

    • deleteSliceRegion race condition: loading guard prevents audio/paint thread access during buffer splice
    • WSOLA grain position clamped after offset search
    • navPts[130] → navPts[260]: stack overflow at >65 slices
    • Paint functions guard against isLoading() state
    • State save slice count snapshot prevents mid-iteration race

    New features:

    • Compressor GR visualization: two-bar overlay (signal + GR) with threshold line. Always visible when enabled
    • Program Change kit switching: enable in config browser, use MIDI PC messages or a configurable CC
    • Browser font size: adjustable -3 to +3 in config browser. Affects all text in file and config browsers
    • Tab wrapping: left arrow on PADS → MOD, right arrow on MOD → PADS
    • Choke Group, Reverse, Normalize moved from OPTIONS to config browser

    Known issues:

    • Mod presets not yet saved in .kit files (state save works)
    • Mod amounts are additive per-trigger, no auto-reset to base value
    • Kit quick-change order not yet implemented
  10. 2.3.0-Beta1 file

    GRID 2.3.0-beta New features:

    • Buchla-style LPG filter type with vactrol envelope modeling. Cutoff becomes Strike, Resonance becomes Decay. Successive triggers lengthen decay (memory effect). 6dB/oct one-pole coupled with VCA.
    • WSOLA time stretch algorithm with cross-correlation grain alignment. Replaces fixed OLA. Per-pad selectable in config browser (OLA/WSOLA). Default WSOLA.
    • Pitch quantize mode. Push pitch encoder to toggle free/quantized. Display shows note names (C4, D#3). Encoder steps in whole semitones.
    • Compressor gain reduction visualization. Two-bar overlay on each pad (signal + GR) with threshold line. Toggle via Show GR in config browser. Always visible on all pads when enabled.
    • Transient detection sensitivity tiers: Low, Med, High. Replaces raw percentage.

    Bug fixes:

    • Config browser off-by-one: adjusting LoFi or other parameters no longer modifies the wrong row.
  11. 2.2.0-Beta1 file

    GRID v2.2.0-beta Changelog

    Crash Fix

    • Atomic loading guard prevents race condition during preset switch, sample load, and pad clear
    • Audio thread skips processing while buffers are being swapped
    • Addresses crash reports from ahabzutun, wavejockey, and Handsonicsuki

    Slice Editor

    • 128 slices (was 64)
    • Auto-slice options expanded: 8, 16, 24, 32, 48, 64, 128, Transient
    • Transient detection rewrite: local window threshold replaces global EMA (no more front-biased onsets)
    • Transient sensitivity exposed in config browser (5-100%)
    • 16-level undo stack
    • Audition no longer wrecks pad positions on exit
    • Loading new sample or clearing pad clears all slices

    Voice Engine

    • Voice stealing with crossfade tail (eliminates pops/clicks at slice boundaries)
    • Crossfade length increased to 64 samples (~1.3ms)

    Browser UX v2

    • Enc 0: navigate files (turn), load/enter (push), close browser (hold)
    • Enc 1: back (push), smart home (hold)
    • Enc 2: navigate pads (turn), audition (push), toggle auto-preview (hold)
    • Enc 3: cycle file operations (turn), execute (push)
    • Auto-preview mode: samples play as you scroll
    • Duration display shows "m" for samples over 60 seconds
    • Slice Combine added to multi-select menu

    Fixes

    • MIDI CC slice: Note On uses CC-selected slice instead of overriding from note number
    • Filter cutoff preserved when changing filter type
    • ENHANCE renamed to NORMALIZE
    • Right Shift exits slice editor (was wired to delete)
    • Slice CV works (sliceMode auto-enables when slices exist)
    • CC Start renamed to CC Slice
    • Version string: 2.2.0-beta
  12. 2.1.0-Beta1 file

    GRID v2.1.0-beta Changelog

    Bus Compressor — DSP Upgrade

    • Switched from feed-forward to feedback topology (SSL/Neve-style)
    • Dual-time-constant auto-release (fast transient recovery, slow sustain)
    • Soft knee (6dB default, adjustable 0-12dB)
    • Sidechain HPF (switchable 0/60/80/120/150Hz)
    • Sidechain source: bus feedback or any pad (config browser)
    • Subtle output saturation with adjustable drive

    Per-Pad Output Routing (NEW)

    • 10 outputs: stereo mix (L/R) + 8 mono pad outs
    • Config browser per-pad: Output Channel, Send to Mix
    • Multiple pads can share outputs

    Slice Editor

    • 16-level undo stack (was single undo)
    • Audition no longer wrecks pad positions on exit
    • Loading new sample or clearing pad clears all slices
    • Clear all: set AUTO to OFF, push encoder 2

    Fixes

    • Right Shift exits slice editor (was wired to delete)
    • Slice CV works (sliceMode auto-enables when slices exist)
    • CC Start renamed to CC Slice
    • Version string: 2.1.0-beta
  13. 2.0.0-Beta1 file

    GRID v2.0.0-beta SLICE EDITOR

    1. Accessed via WARP tab enc 3 push
    2. 64 slice points per pad
    3. Auto-slice: 8, 16, 24, 32 equal divisions
    4. Transient detection: energy-based onset finder with zero-crossing snap
    5. Per-slice pitch offset in semitones
    6. Zoomable waveform with overview mini-map
    7. Cursor momentum (slow = precise, fast = fast)
    8. Arrow keys navigate slices with wrapping
    9. Left shift = audition, right shift = exit
    10. Up arrow -- undo slices (16 levels)
    11. down arrow -- deletes slice region and the audio in-between and stitches it together music concrete style.

    SLICE CV

    1. Start CV / End CV replaced with Slice CV 1 / Slice CV 2
    2. Each CV assigned to a pad in config browser
    3. CV selects slice on trigger (-5V to +5V)
    4. MIDI CC and note number also select slices
    5. Per-slice pitch applied on all trigger paths

    FILTERS

    1. Filters reworked
    2. Bass compensation on LPF, gain boost on BPF

    PERFORMANCE

    1. Solo mode (double-tap right shift)
    2. Mute fade 0-500ms configurable
    3. MIDI rewritten with MidiMessageCollector for sample-accurate timing

    OTHER

    Pitch moved to SAMPLE tab Enc 3 nudge fix for physical alignment

    BREAKING

    1. Start CV and End CV inputs renamed to Slice CV 1 and Slice CV 2
    2. CV no longer sets start/end positions continuously
    3. Repatch required if using old Start/End CV
  14. 0.1.9.2-Beta1 file

    0.1.9.2 changelog:

    1. Added Lo-Fi per-pad sampler emulation in Config Browser
    2. Lo-Fi modes: OFF, 8-Bit, 12-Bit, SP-1200 (12-bit + 26kHz ZOH), MPC-60 (12-bit µ-law companded + 40kHz ZOH)
    3. Moved Pitch from WARP tab to SAMPLE tab (enc 3)
    4. WARP tab now: TIME (enc 1), CLK M/D (enc 2)
    5. Start/End CV now responds to full ±5V range (-5V = 0%, 0V = 50%, +5V = 100%)
  15. 0.1.9.1-Beta1 file

    Changelog 0.1.9.1-beta

    1. Performance auditing
    2. Added FILTER tab (8 tabs total)
    3. Filter types: OFF, LPF, HPF, BPF, NOTCH, FORMANT, MS-20
    4. Per-pad cutoff (20Hz–20kHz) and resonance (0–100%)
    5. Cutoff display shows strength percentage and Hz
    6. 0% = no filtering for all filter types
    7. Switching filter type resets cutoff to 0%
    8. FORMANT filter: 3 parallel BPFs morphing through vowel shapes A→E→I→O→U
    9. MS-20 filter: tanh saturation in feedback path
    10. Filter CV bus (input 24, last available slot)
    11. Filter CV: 0V = 0% strength, 1V = 100% strength, respects per-pad filter direction
    12. CC 74 for filter cutoff (exponential mapping)
    13. CC Filter added to per-pad CC map in Config Browser
    14. Global encoder speed setting in Config Browser (1.0x–3.0x)
    15. Retrigger guard reduced from 512 to 64 samples (10.7ms → 1.3ms)
    16. Sample-accurate CV triggering
    17. Start/End CV sampled at trigger instant instead of block end
    18. Pan calculation cached
    19. CC pan snaps to center within deadzone
    20. CC stretch snaps to 1.0x within deadzone
    21. CLK:BAR renamed to CLK:1SHOT
    22. Per-pad CLK Beats setting in Config Browser (1, 2, 4, 8, 16 beats)
    23. Fixed sample rate compensation (was self-referencing)
    24. Browser back from root subfolders goes to Smart Home
    25. Fixed leftShiftHeld_ stuck state across mode exits
    26. Clear pad restricted to OVERVIEW/OPTIONS pages
    27. Preset/kit name shown in encoder bar
    28. Version number in bottom-right corner
  16. 0.1.9.0-Beta1 file

    GRID 0.1.9.0-beta — "The Performance Update"

    1. What's up. This is the big one. 0.1.8.2 gave you a sampler that worked. 0.1.9 gives you a performance instrument.

    2. Config Browser (LS+RS)

    3. Hit left shift and right shift at the same time. A panel slides in from the right. This is your settings cockpit. It's contextual — whatever pad you're on, you see that pad's settings at the top. Hit pad buttons 1-8 to switch context without leaving. Per-pad CC remapping is here. Don't like CC 7 for volume? Change it to whatever your controller sends. Left/right arrows change values. Up/down scrolls. Push encoder to toggle edit mode. The global section sits below a centered divider — Mute Mode, Queue Bars, Preset Switch, Debug Msgs, and Reboot Plugin. Queue Bars greys out when you're in Immediate mode because... you don't need it. It's still editable though because I'm not your dad.

    4. Performance Muting (3 Modes)

    5. This is why people will use GRID live. Config browser has a Mute Mode setting with three options:

    6. Immediate — what you had before. Hold right shift, press a pad, it mutes. Done.

    7. On Release — hold right shift, set up your entire mute scene. Pads you're about to mute show "► MUTE" in red with orange borders. Pads you're about to unmute show "▶ UNMUTE" in green. Release right shift and everything flips at once. Clean transitions. No more staggered one-at-a-time nonsense.

    8. On Bar — same staging as On Release, but when you release shift, nothing happens yet. The mutes queue up and fire on the next bar boundary. You set how many bars ahead in the config (1 to 4). Ticker tells you "Mutes queued: 2 bars" and then "Mutes applied" when they land. Works on both MIDI clock and CV clock. Beat counting is real — 24 PPQN on MIDI, rising edges on CV, 4 beats per bar.

    9. Bar-pending pads keep their orange borders and status text even after you let go of shift. So you can release, take a breath, and watch them flip on the downbeat. That's Octatrack territory.

    10. Smart Home

    11. Open the file browser and you get a structured landing page now. Not just a dump of whatever folder you were in last. Sectioned with config-browser-style dividers:

    12. KITS — your saved kits folder

    13. STACKS — your saved stacks folder

    14. RECORDINGS — your recordings

    15. SAMPLES — everything else in the sample root

    16. Hold left shift for 2 seconds anywhere in the browser to snap back to Smart Home. The browser won't let you escape above the sample root either — go-back at root sends you to Smart Home instead of wandering into the Linux filesystem.

    17. Multi-Select

    18. Push left shift in the browser to enter multi-select mode. Now left shift on a file toggles selection — numbered red circles 1-8 appear. Left shift on a folder navigates into it so you can pick files from different directories. Push encoder 0 when you're done. Popup appears:

    19. Create Kit — loads your selections into pads 1-8, opens the keyboard to name it

    20. Create Stack — saves as layered stack file, opens the keyboard to name it

    21. Delete Selected — confirmation popup lists every file, "Yes, delete all" or Cancel

    22. Cancel — nevermind

    23. On-Screen Keyboard

    24. When you create a kit or stack, you get a full keyboard. Three rows of characters: A-M, N-Z, 0-9 plus underscore and backspace. Bottom row has two big buttons: GENERATE and SAVE. Arrow keys navigate the grid, left shift types. GENERATE fills in a random name from a pool of 576 combinations — things like "cosmic_drift" and "quantum_pulse" and "turbo_moog". 4 to 12 characters, no spaces. The name becomes the filename. Right shift cancels.

    25. Popup Modal System

    26. Octatrack-style centered dialog. Dark overlay, rounded box, red title, option list with selection indicator. Used everywhere now — multi-select actions, delete confirmation, kit/stack creation. Left shift selects, left arrow cancels, up/down scrolls. Blocks all other input when active.

    27. Kits

    28. .kit XML files saved to /samples/kits/. A kit is 8 pad slots — each stores the sample path, volume, pan, start/end points, pitch, stretch, mode, choke group, reverse state, and MIDI channel. Load a kit and it rebuilds your entire instrument. Kit files are portable — paths are relative to the sample root.

    29. Stacks

    30. .stack XML files saved to /samples/stacks/. A stack is multiple samples assigned to one pad — round-robin, random, or velocity split. Created from multi-select in the browser. Stack layer config shows up in the config browser when a pad has a stack loaded.

    31. Preset Browsing

    32. Up/down arrows on the main page scroll through your saved kits. Ticker shows "Kit: cosmic_drift (2/5)" as you browse. Three-second timeout reverts if you don't commit. Left shift loads the kit. No kits saved? Ticker tells you. Up/down never moves pads anymore — that's buttons 1-8 only.

    33. Other Stuff

    34. Debug Msgs toggle in config — shows CC numbers, unmatched MIDI notes, all the diagnostic stuff

    35. Reboot Plugin button — closes and reopens MIDI, stops all pads, resets clock. Emergency reset.

    36. Ticker rewritten — types in from the right with ease-out deceleration, holds, fades. 5 seconds. Stays clear of the tab labels.

    37. Per-pad CC maps saved with presets — your CC remapping persists

    38. Cursor in keyboard is a pipe now, not an underscore, because that was confusing everyone including me

    39. Firmware string says 0.1.9-beta

    What's Next (1.0.0)

    • Background thread for WAV/stack loading
    • SSPShell refactor
    • Phase vocoder
    • Performance latency optimization
    • The stuff that makes it ship-ready

    Shoutouts to wavejockey and Handsonicsuki for relentless testing. And to TheTechnobear for the architecture patterns that make this possible. — kuttor

  17. 0.1.8.1-Beta1 file

    GRID 0.1.8.1-beta

    • Fixed MIDI: switched to JUCE 7 for SSP ALSA compatibility
    • MIDI pitch working: note 60 (C3) = no shift, each semitone up/down shifts pitch
    • MIDI velocity scales pad volume per hit
    • Start/End CV accepts 0V as valid (was incorrectly rejected)
    • Left/Right arrows now switch tabs instead of navigating pads
    • Right shift is pure mute mode — hold for mute, release exits, no page switching
    • Choke and reverse symbols enlarged for readability
    • Choke triangle with letter inside, semi-transparent white, bottom right of pad
    • Reverse arrow enlarged to 22pt, matching style
    • Filename display slightly larger (16pt) and semi-transparent
    • Context bar no longer overlaps BPM pill
    • MIDI clock only selectable when device is connected
    • MIDI clock auto-disables on device disconnect
    • Improved internal MIDI device filter (case-insensitive)
    • Removed unused diagnostic display code
  18. 1.8.0-Beta0.1.8-Beta1 file

    GRID 0.1.8-beta

    1. MIDI tab: direct USB MIDI device access, no factory MIDI module needed
    2. Per-pad MIDI channel assignment (OFF, 1-16, OMNI)
    3. MIDI device selection with encoder scrolling
    4. Note On triggers pad, velocity scales volume, note number shifts pitch
    5. Default CC map: CC1=Start, CC2=End, CC7=Volume, CC10=Pan, CC11=Stretch
    6. MIDI clock support (24 PPQN), overrides CV clock when enabled
    7. OPTIONS tab: choke groups (None, A through H)
    8. Choke groups stop other pads in same group on trigger (open/closed hi-hat)
    9. Choke groups work for CV triggers, MIDI triggers, and button triggers
    10. Reverse: flips sample buffer in place, toggle on/off per pad
    11. Enhance: one-shot normalization to 0.95 peak per pad
    12. Choke group letter indicator on pads (amber, top right)
    13. Reverse arrow indicator on pads (blue, bottom right)
    14. Context bar shows CHK, REV, MIDI status
    15. 7 tabs total: PADS, SAMPLE, PLAY, WARP, FADE, MIDI, OPTIONS
    16. All new params saved/loaded with presets
  19. 0.1.7.2-Beta1 file

    GRID 0.1.7.2-beta

    • Added clock division setting on WARP page enc 3 (/1, /2, /4, /8)
    • Fixed BPM detection reading 300 instead of 120 when using STE step clock
    • Mode change (ONE-SHOT/LOOP/CLK) now resets time stretch to 1.0x
    • Shift+button mute restored — hold right shift, buttons toggle mutes
    • Colored borders in mute mode (red = muted, green = unmuted)
    • Release right shift without toggling = page forward (no conflict)
    • Added shared Start CV and End CV inputs (sample-and-hold on trigger)
    • 23 inputs total (25 channels with outputs, under 32-channel JUCE limit)
  20. 0.1.7.1-Beta1 file

    GRID 0.1.7.1-beta

    1. Added shared Start CV input (sample-and-hold on trigger)
    2. Added shared End CV input (sample-and-hold on trigger)
    3. All CV inputs guarded with isInputEnabled — unconnected buses no longer read garbage
    4. Fixed pads emptying when triggered by external sequencer
    5. Fixed end position not restoring correctly on preset load
    6. Right shift reverted to page-forward only
    7. Mute simplified to push-vol on PLAY page (removed shift+button dual function)
    8. Reduced from 37 to 23 inputs (25 total channels, under JUCE's 32-channel hard limit)
    9. Discovered root cause of clock crash: JUCE AudioBuffer preallocatedChannelSpace[32]