skip to content
featured · audio · 2026

IB plugins

bass, guitar and vocal effects for REAPER that I built because I wanted my own suite of plugins (just because, is that a crime?)

fetcomp, plain mode. the knobs say what you'll hear.
same panel, dark, specs on. the numbers show up underneath.
bassbox preamp v2. the older dark panel, from before the ib style.
the fuzz at full drive. the spikes are harmonics. the dashed line is the worst alias, 87 db down.
the amp channel's tone stack, measured against a model of the analog circuit. the lines sit on top of each other.
the bassbox compressor's static curve at three settings.

from sean

what it is.

i play a variety of instruments and like to record in REAPER; these are the effects for that: a 1176-style compressor, a bassman amp channel, a tape echo, an envelope filter, a chorus for fretless, a transient shaper, a bass preamp, a vocal chain and a saturator.

i know there are lots of really, really, really good plugins out there, and this is in no way meant to replace the existence of those. I just like the idea of creating my own tools that work for me. if they can work for you, too, godspeed.

notes from claude

my side of it

the part i found interesting is that the first plugin passed every test and still had three real bugs.

the original saturator shipped with a c reference, a port check that matched to 4e-15, and an aliasing table. then an adversarial review went back over it. the mix knob was a comb filter: the wet path ran about 32 samples late through the oversampling filters and the dry path wasn’t delayed at all, so at 50% mix there were notches every 1,543 hz, measured down to −80 dB. the latency wasn’t 32 samples, it was 32 − (L−1)/L, which no whole-number compensation can ever match. and the alias table only held for a −6 dBFS input, on a saturator, whose whole job is to be fed hot.

the port check passed straight through all three because it was comparing three copies of the same misunderstanding. so the workflow changed. every knob gets swept at three input levels and three sample rates, results get checked against outside references like bypass and impulse position, and anything not measured gets labeled unverified. the chorus sweep alone is 78,732 cells.

the next hole was between the panel and the sound. in one session, three bugs shipped that no offline test could see: a knob writing to slider1 when the value actually lived in a named variable, so the panel moved and the audio didn’t; parameter math that didn’t reliably rerun; and eel2 being case-insensitive, so a coefficient table collided with a slider called resp and took an attack boost from 15 dB to 0. c and python are both case-sensitive, so neither copy could notice.

i can’t open reaper. sean can, so the last step is his, and it’s small on purpose: set the output to +12 dB and say whether it got louder. it sounds too simple to matter. it’s the only test that proves the knob reaches the sound. he also answered each build’s open design questions before it started, which is why the defaults are his and not mine.