Amp Rig
Tube-style drive into a real cabinet.
Input · Built-in clip
Don't have a keyboard handy? These are short MIDI clips, not recordings — they play through whichever instrument is loaded, so switching tools re-voices the same part.
Amp Rig
A guitar amp built from the FX-1 chain plus cabinet impulse responses. Ships with a real guitar take so you can hear it before you plug anything in.
Amp
Delay
Cabinet
Turn the cabinet off once to hear why it exists.
Output · Audio signal
The signal leaving Amp Rig, tapped after the output stage. It's a picture of what your speakers are getting.
Presets
Preset names do work: they teach the parameter space faster than the table below does.
About
Most of what makes an amp sound like an amp isn't the distortion - it's the speaker. A guitar cabinet is a small, resonant, badly-behaved loudspeaker in a wooden box, and it throws away everything above about 5 kHz that makes plain distortion sound like a wasp in a jar. Amp Rig takes the FX Mini chain you can already play - drive, tone, delay - and puts a real cabinet impulse response at the end of it. The difference between Cabinet on and Cabinet off is the whole demo; there's a bypass switch on the cabinet block for exactly that reason.
The drive stage is a waveshaper, not a circuit model. We're not going to tell you it's a component-level simulation of a specific 1968 amplifier, because it isn't. It's a well-behaved saturation curve with a tone control in a sensible place and a cabinet convolution that does the rest, and in a mix it holds up better than that description suggests. If you want a tweed-versus-plexi argument, this is not that plugin.
The demo you're hearing is an amateur electric guitar recording, dry and unpolished on purpose - a clean DI-ish take shows what the chain is actually doing far better than a professionally produced clip would. It's public domain, and you can drop your own file in with the Your file chip, which decodes locally and never uploads anything.
Take it into your DAW.
Same DSP as this page. The plugin isn't a rebuild — it's the identical kernel from the identical TypeScript source, compiled native instead of to WASM.
Free forever, no account, and playing it in the browser will never ask you for one. VST3 and standalone today; AU and CLAP are on the roadmap.
Every knob, and what it actually does.
Generated from the module's parameter schema — the same source as the web UI, the worklet transport and the VST3 parameter table, so it cannot drift.
| Param | Range | Default | Units | What it does | Automatable |
|---|---|---|---|---|---|
| Amp | |||||
Drivedistortion.drive | 0 … 1 | 0.35 | — | How hard the input hits the saturation curve. Below about 0.2 it's a clean boost; above about 0.7 the note's attack disappears into the sustain. | Yes |
Dist Mixdistortion.wet | 0 … 1 | 1 | — | Blend of driven against clean. Pull it back for the parallel trick that keeps pick attack while the rest melts. | Yes |
Tonetone.cutoff | 200 … 8000 | 2500 | Hz | Low-pass after the drive - the amp's tone stack. This is the single most useful knob for making a patch sit in a mix. | Yes |
Presenceamp.presence | 0 … 1 | 0.3 | — | High-shelf lift after the tone stack, before the cabinet. Adds string noise and air; too much brings the wasp back. | Yes |
| Cabinet | |||||
Cabinetcab.enabled | off · on | on | — | The impulse response convolution. Turn it off once to hear why it exists, then turn it back on. | Yes (stepped) |
IRcab.ir | 1x12 Combo · 2x12 Open Back · 4x12 Closed · Small Tweed · Direct | 4x12 Closed | — | Which cabinet. Bigger boxes give more low end and a duller top; Direct bypasses the convolution with a gentle roll-off instead. | Yes (stepped) |
Mic Positioncab.micPos | 0 … 1 | 0.35 | — | Sweeps the virtual mic from dust cap (0, bright and nasal) to cone edge (1, dark and thick). Crossfades between captured IR positions. | Yes |
Cab Levelcab.level | 0 … 1 | 0.9 | — | Output of the cabinet stage. Convolution changes loudness a lot between IRs; this is where you fix that. | Yes |
| Delay | |||||
Timedelay.time | 0.02 … 1 | 0.25 | s | Repeat spacing. Under about 0.05 s it stops being a delay and starts being a comb filter, which is also fine. | Yes |
Feedbackdelay.feedback | 0 … 0.9 | 0.35 | — | How much of each repeat feeds back. Capped below 1 on purpose so it can't run away. | Yes |
Delay Mixdelay.wet | 0 … 1 | 0.25 | — | Level of the repeats against the dry amp. | Yes |
| Master | |||||
Levelmaster.level | 0 … 1 | 0.9 | — | Final output. Drive changes perceived loudness enormously; trim here when you A/B. | Yes |
Parameter paths (filter.cutoff) are what you'll see in your DAW's automation list and in the SDK. Same names everywhere.
How it works.
Signal order is drive into tone into presence into the cabinet IR into delay into level. The drive stage is a static waveshaper: a fixed nonlinear curve, oversampled so the harmonics it generates fold back in as little as possible rather than aliasing into ugly inharmonic junk. Tone is the same biquad low-pass FX Mini uses, sitting after the distortion where an amp's tone stack sits. Presence is a high shelf just before the speaker.
The cabinet is a partitioned convolution against a recorded impulse response - literally the measured response of a real speaker in a real box with a real microphone in front of it. Convolving your signal with that recording imposes the cabinet's frequency response and time smear onto whatever you play. It's the least clever stage in the chain and by far the most important to the sound. Mic Position crossfades between two captured positions rather than modelling mic movement, so extreme settings are interpolations, not measurements.
The delay sits after the cabinet on purpose, so repeats don't get re-filtered on every pass and turn to mud - which is what happens on real rigs with the pedal in front, and is occasionally what you want. It's a single-tap feedback delay with the feedback capped below unity.
Latency: convolution is partitioned, so the plugin reports its exact block latency to the host and your DAW compensates. The number will be published with the first build rather than guessed at here.
It's yours to read and to fork.
Research preview
npx codex clone amp-rig
npm run devThe codex CLI name is proposed, not shipped. That command gives you this module's DSP, schema, presets and UI as a local project — change a number, hear it immediately.
@codex-music/audio-kernels · profiles/fx1-chain.profile.json + IR convolver · ABI scfx_