← All modules
AvailableMIDI & Modulation

Stepper

A 32-step Matrix, with ties, ratchets and a curve lane.

Engine preview

VST3

About

Stepper is the first GENERATOR in this family. Arpeggiator and Steps rearrange notes you are holding - let go and they stop. Stepper writes its own line: 32 steps, each carrying a pitch, a velocity, a gate length, a tie flag, a curve value and a ratchet count, played back on its own tempo clock whether or not a single key is down.

The model is Propellerhead Reason's Matrix Pattern Sequencer, taken deliberately rather than loosely. Matrix's shape is here in full - 32 steps, the Note, Gate and Curve lanes plus per-step Tie, 32 patterns arranged as four banks A-D of eight, a per-pattern length from 1 to 32, a Resolution divisor and a 1-5 octave range. Two things are borrowed from Redrum next door: pattern chaining across a bank range, and the flam, which arrives here as a per-step ratchet of one to eight retriggers. Key follow is RPG-8's - a held note transposes the whole pattern relative to C3 - and the scale-quantize lane is new, so a written line can be pushed into a key without editing every step.

Matrix emits CV. This repo's ports are MIDI, so the translation is explicit: the Note and Gate lanes become note-on/note-off pairs, and the Curve lane becomes a configurable CC, sent only when its value actually changes so a flat lane costs nothing on the wire.

Pattern data is not parameters, and that is a design decision rather than an omission. Four banks of eight patterns of 32 steps across seven lanes is far more than an automatable schema should carry, and Reason does not automate pattern data either - it is part of the patch. So the twenty-one globals (tempo, resolution, shuffle, gate and velocity scaling, transpose, octave, direction, pattern, length, chain, curve CC, key and scale, seed, channel) are ordinary stepper.* params that ride presets, share links and MIDI learn, while the seven step lanes live in the pattern and are edited in the grid. Two of them cross the line and are mirrored as parameters of the SELECTED pattern: its loop length, and its 32 velocities as stepper.g1 to stepper.g32 - so a host with no custom UI still has a groove it can hold, and switching pattern re-points both.

This page is a preview. The scheduling is real - every note is committed to the AudioContext clock as an absolute time, so timer jitter delays the decision and never moves the note - but the sequencer behind it is the website's reference implementation, not the compiled kernel, and no parity claim applies to it. The compiled stepper-sequencer kernel is a separate, ABI-pinned artifact; when it is wired to this page the module's behaviour becomes a matter of goldens rather than of this file.

System requirements.

The downloadable Stepper release supports the hosts and systems listed below.

  • VST3macOS · arm64

    Works in Ableton Live, Reaper, Cubase, Studio One, Bitwig and FL Studio.

Version 1.0.0

Build evidence

Every row below is a recorded build row or the recorded absence of one. Nothing here is inferred from what this module is meant to support.

Module
music.codex.stepper v1.0.0
Built at
Closure hash
bf14a996f05d…
Toolchain
  • scriptc 64acce1ae3b8…
  • moduleToolchainDist c621ffab721d…
  • pluginShellKitRuntime bca003784692…
  • faceShellGeneration 8533207ab81f…
  • uiPreservation cd28dbd7e3d6…
  • packagerVersion 3
Build result and download for each format
FormatResultDownload
Browser package (JS)
Builtweb

bundle sha256 c4431847cb18… · 233 KB

Built, but no downloadable archive was recorded.
Browser package (WASM)
Builtweb

bundle sha256 d4879c7ecc0a… · 2.0 MB

Built, but no downloadable archive was recorded.
VST3
Builtdarwin-arm64Steinberg validator + VST3 host render: passed

bundle sha256 60b1512c4efb… · 2.2 MB

CodexStepper-vst3-darwin-arm64.zip

archive sha256 b65f3df0fff9… · 2.2 MB · darwin-arm64

Audio UnitNot built

no recorded artifact row for au; native-lane-report.json is absent or records no au row for this module

Not built for macOS
CLAPNot built

no recorded artifact row for clap; native-lane-report.json is absent or records no clap row for this module

Not built for macOS, Windows or Linux
Standalone appNot built

no recorded artifact row for standalone; native-lane-report.json is absent or records no standalone row for this module

Not built for macOS, Windows or Linux

Parity

browser-js = browser-wasm = vst3 qualified against their own recorded digests. Not recorded: au, clap, standalone.

Signal graph.

Experimental

Migration fallback: approximated from parameter groups, not a runtime wiring diagram.

How it works.

The musical model is a pure core: given a pattern, a direction, a cursor and the globals, plain functions answer which step plays, at what pitch after transpose, octave, key-follow and quantize, at what velocity, and for how long. Those functions have no clock and no audio in them, which is what makes the walk shapes, the endpoint rules of the two pendulums, the downward snap of the scale mask and the reproducibility of the seeded walks checkable rather than a matter of listening.

Around that sits the house lookahead scheduler: a timer wakes every 25 ms, the sequencer emits every step whose onset falls inside the window, and each note is committed with an absolute AudioContext time. Because the time is computed rather than read off the timer, a stalled main thread delays the decision and cannot move the note. The window is widened to cover at least two and a half steps at slow resolutions, and that is not cosmetic: a tie cannot be resolved until the NEXT step is known, so one note-off is always held back, and the wider window is what guarantees it is committed while its time is still in the future.

A tie does not retrigger - its note-off is cancelled and re-armed one step later - but only into the same pitch. A sustained note cannot be bent, so a tie into a different note retriggers, which is Matrix's own behaviour rather than a shortcut. A ratchet is the opposite case: it divides the step into equal slices by integer division with the last slice absorbing the remainder, retriggers on each, and therefore ends any tie carried into it.

It hooks note handling rather than the audio graph, exactly as the rest of the family does, with one asymmetry: it only claims a keypress while Key Follow is on. Stepper does not need your hands, so swallowing keys with Key Follow off would make the page's keyboard look broken for no gain; instead the press falls through to whichever voice is mounted and you play over the pattern. It emits MIDI, not audio.

The compiled kernel is a sibling of the one behind Steps and Arpeggiator rather than an extension of it. midi-pattern-processor's four-lane transcript is pinned against a fixed 3066-byte state block and ABI 1; adding note, tie, curve and ratchet lanes and 32 pattern banks would change the state size, the configure signature and every pinned hash, which this repo only allows under an explicit reviewed version bump. So stepper-sequencer ships with its own ABI, its own profiles and its own goldens, and midi-pattern-processor is not touched.

Goes well with.

Preview

Steps

A step sequencer and arpeggiator on one grid.

PreviewNot built for macOS, Windows or Linux
Preview

Arpeggiator

Walk held notes through a rhythmic pattern.

PreviewNot built for macOS, Windows or Linux
Preview

OSC Mini

A compact subtractive synth for learning the signal path.

Preview