A glitch / granulator audio plugin (VST3 / AU) built with JUCE. Automation-first: every control is a real, host-automatable parameter — no step sequencer, no GUI-only state. Anything that affects the sound can be drawn as an automation lane.
Free and open source (GPLv3). Prebuilt Windows VST3 and unsigned macOS AU + VST3 are produced by CI on every push — grab them from the Actions artifacts (or a Release).
input -> Drive -> Granular(+Width) -> Trigger(chop/Stutter) -> ROT -> Tone -> Space -> MIX -> KILL -> Output
A single assignable Motion source (LFO / envelope follower) modulates one destination on top of its base value. Held MIDI notes trigger performance actions, and the editor shows a live output meter + peak-history scope.
Asynchronous granulator over a 5 s circular capture buffer.
| Param | Meaning |
|---|---|
SIZE |
grain length (small = metallic/buzzy, large = smeared) |
SCATTER |
grain position spray around the playhead |
PITCH / P.RAND |
grain pitch shift + per-grain random spread |
DENSITY |
grain overlap / count |
REVERSE |
probability a grain plays backwards |
WIDTH |
stereo spray of per-grain pan (0 = centred) |
Sample-accurate, host-transport-locked rhythmic chopper (no grid/sequencer).
| Param | Meaning |
|---|---|
RATE |
tempo-synced division (1/4 … 1/32, incl. triplet/dotted) |
CHANCE |
probability a step is chopped (0% = transparent) |
CHAOS |
randomizes gate duty + adds ratchet stutters |
STUTTER |
fired steps capture a slice and roll/repeat it (2–8 rolls) |
| Param | Meaning |
|---|---|
TONE |
morphing filter: <50% lowpass down, >50% highpass up, ~50% neutral |
SPACE / DECAY |
reverb send amount + size |
DRIVE |
soft saturation at the input |
OUTPUT |
final output trim (dB) |
| Param | Meaning |
|---|---|
SOURCE |
Sine / Triangle / Saw / Square / Random, or Envelope follower |
RATE / DEPTH |
LFO speed (or envelope response) + amount |
DEST |
destination: Off / Rot / Tone / Mix / Size / Density / Chance / Space |
Held notes override the matching action while pressed:
C1 = Freeze, D1 = Kill, E1 = Stutter.
One knob (0–100%) degrades the whole sound coherently: sample-rate decimation + bit-depth reduction + extra grain chaos. The grain-chaos contribution is additive on top of the base granular params, so automating ROT and a sub-parameter never fight.
| Param | Meaning |
|---|---|
FREEZE |
momentary — hold the buffer and granulate it indefinitely |
KILL |
momentary — instant output mute for fills |
MIX |
global dry/wet |
Ships with factory presets (Init, Smear Wash, Granular Cloud, Glitch Roll,
Bitcrush Stutter, Frozen Pad, Reverse Tides, Total Rot). User presets save to
<user app data>/Mantis Vex/BITROT/Presets as APVTS-state XML and recall by
name from the preset bar (< / > step, SAVE stores the current state).
Requires CMake ≥ 3.22. JUCE is used automatically: if a local checkout is found
(via JUCE_DIR), it's used; otherwise JUCE 8.0.6 is fetched from GitHub.
# Windows (VS 2022)
cmake -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
# macOS / Linux
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config ReleaseBuilds VST3 + Standalone everywhere, plus AU on macOS. Plugin metadata
(company name, manufacturer/plugin codes) lives in CMakeLists.txt.
The macOS binaries are not code-signed or notarized. After copying
BITROT.component / BITROT.vst3 into ~/Library/Audio/Plug-Ins/Components
and .../VST3, clear the quarantine flag so the OS will load them:
xattr -dr com.apple.quarantine ~/Library/Audio/Plug-Ins/Components/BITROT.component
xattr -dr com.apple.quarantine ~/Library/Audio/Plug-Ins/VST3/BITROT.vst3GPLv3 (see LICENSE). BITROT links JUCE under its open-source terms, which is
why the project is GPL-licensed.