Circuit modelled gain stages, from subtle preamplifier saturation to a scooped high gain sound, and the rest of a guitar rig behind them: a pedal in front, a power stage, a speaker that loads it, a cabinet and up to two microphones. CLAP and VST3 on Linux, Windows and macOS, and an Audio Unit (v2) on macOS as well; built with nice-plug, with a vizia panel.
Nothing here is a filter shaped to sound like an amplifier. Every circuit is a netlist — resistors, capacitors, inductors, valves, transistors, diodes, op-amps, transformers — solved by modified nodal analysis, with Newton–Raphson wherever a part is not linear. The sound comes out of the topology, so a capacitor in the gain leg makes the mid-hump because that is what it does in the hardware, not because someone drew the curve.
PEDAL -> CIRCUIT (preamp) -> POWER AMP <-> SPEAKER LOAD -> CONE -> CABINET -> MIC A / MIC B -> OUTPUT
Each stage is chosen on its own. A pedal can sit in front of any circuit, any circuit can drive any power stage, and any power stage can drive any speaker in any cabinet. The arrow between the power amp and the speaker goes both ways: the speaker's impedance is part of the power stage's own netlist, so its resonance and rising voice-coil impedance change what the valves, the output transformer and the negative feedback do. It is not an EQ after the fact.
Every new stage defaults to what the plugin did before it existed — no pedal, Matched power stage, Legacy cabinet — so old sessions and presets load and sound as they did.
Six numbered bands in the order the signal goes through them, with an arrow at the foot of each pointing into the next. Each band opens and closes from its header row — number, name and chevron — and the window grows and shrinks to fit what is open: a fresh panel opens with the input alone, and the session remembers which are open. 780 wide; 306 tall with only the input open, 968 with all six. The button in the strip scales it from 50 % to 200 %, in nine steps (the wheel over it steps through them too) — it is drawn rather than pictured, so it is sharp at any of them. The model lists are dropdowns, and the wheel over a closed one steps through it, which is the quickest way to hear what is in it.
| 1 Input | Trim, meter, noise reduction, pedal with its own knobs, named as its box names them, and the wah ahead of it | The meter reads against the level the circuits were voiced at. Its zero is where the rest of the panel means what it says. |
| 2 Circuit | Topology or modelled circuit, clipping, amplifier, iron, power amp, mains; the blackface amplifiers' input jack, the bright switch (the JC-120's and the SVT's Ultra Hi too), and a circuit's own low and mid switches of two to four positions (the SVT's BASS and MIDRANGE SELECT, the German 76's low cut and "3 kHz") | What does the work. Clipping applies to the diode circuits, the amplifier choice to the preamplifier channels, iron to everything. Lists that do not apply grey out rather than vanish. |
| 3 Drive | Drive and master, named as the circuit names them (on a pedal, its drive and level), presence, and the Cali IIC+'s five-band graphic | All the way up is the sound the circuit is named for. Down from there only cleans up. |
| 4 Tone | Stack, bass, mid, treble; reverb, speed, intensity, chorus | A passive stack, so it only ever cuts. A modelled amplifier's own stack takes these knobs, and so do the Metal Zone's three bands; a pedal's single tone control (TONE, or the Rodent's FILTER) has a knob of its own beside them, as do the Metal Zone's swept middle and the Heavy Metal's Colour Mix pair. The second row is the blackface amplifiers' reverb and tremolo, the VT-40's reverb, and the Jazz 120's chorus. |
| 5 Cabinet | Cabinet, speaker, mic A, mic B, placement, pan, blend, polarity, time | Legacy keeps the old baked cabinet filter; any other cabinet switches to the physical path. |
| 6 Output | Mix, level; dry from, dry route | The dry path is delayed to match, so mixing is a mix and not a comb filter. The dry signal is a DI, taken where real ones are: the input (a DI box, and the default), after the pedal (a DI pedal's balanced output, the SansAmp's XLR), or after the circuit, ahead of the power stage (preamp: an amplifier's direct out, as the GK 800RB's is). Mix blends it against the amplifier; Split L/R puts the amplifier alone on the left and the DI alone on the right, for recording them to separate tracks (one mono chain while split). See docs/DI.md. |
Bypass is the host's: the plugin reports a bypass parameter, so the DAW's own bypass switch and automation lane drive it.
Noise reduction is an optional gentle input expander, switched Off/On in the Input section. It defaults to Off, including in older sessions and factory presets. Start with the threshold at -60 dBFS and raise it only enough to reduce noise between notes. The threshold measures the signal after input trim; the input meter keeps its existing nominal-level reference. Both stereo channels share one detector so the louder side keeps both open. Below the soft knee it expands 2:1, with at most 40 dB attenuation, a fast opening and a slow release. Switching it adds no latency. It precedes the pedal and amp, preserving their reverb and cabinet decays; it does not remove hum or hiss underneath a sustained note.
The wah sits ahead of the pedal -- guitar, wah, pedal, circuit -- so that a wah and a drive can be used together. Black Wah is the Cry Baby GCB-95 with its input buffer, Chrome Wah the Vox V847 without one, whose 69.5 k input loads a pickup as the original does. Both are the whole circuit solved, the treadle being the pot's two halves moved at audio rate. There is no pedal input on a plugin, so the treadle is a parameter: Manual puts it where the Treadle knob is -- automate it, or link an expression pedal's MIDI controller to it in the host (REAPER's MIDI learn or parameter modulation) and play it live; leave it still for a cocked wah. Auto leaves it resting where the Treadle knob is and pushes it toward the toe as the strings are hit, an envelope filter -- the knob doing what an auto-wah's Manual knob does -- with Sense for how hard that takes: at its middle, a guitar whose peaks reach the input meter's zero opens it fully on a firm pick. Off removes it. A wah cuts a guitar's fundamentals well below its peak, as ElectroSmash's curves show, so on a clean amplifier it is quieter than without it; the two presets that use one are trimmed for that.
| Circuit | What it is | Measured at full drive |
|---|---|---|
| Clean | One valve stage barely working | 3 % distortion, almost all second harmonic |
| Crunch | Two stages, the second driven by the first | 30 % |
| High Gain | Three stages, all clipping on every note | 48 % |
| Overdrive | Diodes across the feedback resistor | 30 % (silicon), and it cleans up when hit harder |
| Distortion | Diodes across the signal to ground | 42 % (silicon), a ceiling the output stops at |
| Console | A step-up transformer into a discrete stage | 3 %, almost all second harmonic with a valve |
| Studio | An op-amp on a studio rail | 0.00 % across the band — see below |
Measured on a guitar's 0.122 V, except the Clean stage, the Console and the
Studio, which are fed the level that gives them their intended figure (about a
volt for the Clean stage); src/calibration.rs records each one, and
examples/calibrate.rs regenerates it.
The two clipper families are not a matter of degree. In the loop, the diodes lower the gain, so the output never stops following the input — which is why an overdrive on a hot signal barely does anything. To ground, they are a ceiling: past it the waveform is squared off and the harmonics fill out to the top of the band.
Particular circuits, built part by part from their schematics. Each has a
research log in docs/models recording the revision, the
sources, where they disagree and what was approximated.
| Circuit | Built from | Power stage when Matched |
|---|---|---|
| Green 808 | A 1970s green overdrive pedal: input buffer, clipping amp, tone and level, output buffer | none |
| Ram Fuzz | A 1973 four-transistor fuzz | none |
| Cali IIC+ | A 1980s Californian lead channel: six triodes through its lead return and recovery stage, its own stack and five-band graphic | Cali 6L6 |
| American 5150 | A 1990s high-gain lead channel: six triodes, one run cold, into its own tone stack | American 6L6 High-Gain |
| British 73 | A transformer-coupled class-A microphone preamplifier and line driver | none (its line driver stays) |
| American 312 | A console microphone preamplifier card: input transformer, one discrete op-amp, output transformer | none |
| British 4K E | A 1980s console channel's microphone input: a 1:10 transformer into two op-amps around one gain pot | none |
| Tube 610 | A 1960s valve console channel: four triodes in two feedback loops, a transformer at each end | none |
| British 47 | A late-50s British studio valve amplifier: a pentode and a paralleled triode between a 1:7 and a 7:1 transformer, two feedback loops, its gain a three-position switch on the Drive knob | none |
| German 76 | A late-50s German broadcast microphone amplifier: two two-valve amplifiers, each in its own loop, between a 1:30 and a 9:1 transformer; its gain a twelve-step switch on the Drive knob (3 to 76 dB), its low cut and "3 kHz" on the panel's switches | none |
| American Twin | A 1960s blackface clean channel with spring reverb and optical tremolo | American 6L6 Clean |
| American Deluxe | The smaller blackface combo's vibrato channel: the same design with spring reverb and optical tremolo, no middle control, into two 6V6s on a valve rectifier | American Deluxe 6V6 |
| American Deluxe Normal | The same amplifier through its normal channel: no bright capacitor, no reverb, no tremolo | American Deluxe 6V6 |
| Brit 800 | An early-80s British 100 W master-volume lead preamp: four triodes, a cathode follower into its own stack | Brit EL34 |
| Brit 2205 | The boost channel of a mid-80s British 50 W two-channel head: a diode-biased second stage and a diode clipper, then the stack, the master and a make-up stage | Brit 2205 EL34 |
| Brit Plexi | A late-60s British 100 W lead amp with no master: the bright channel's three triodes into its own stack, so the Volume decides how hard the power valves work | Brit Plexi EL34 |
| Brit AC30 | A 60s British 30 W combo: a top-boost valve into a stack with no middle control, then self-biased power valves with no feedback loop at all | AC30 EL84 |
| Brit DR103 | A British 100 W head built for headroom: five triodes, a master volume, and an inverter the driver holds still so it cannot shift its bias | DR103 EL34 |
| Cali Rectifier | A 90s American two-channel head, red channel: five triodes with one run cold on 39 k, which is where its bottom end is squared off; its presence is in the preamplifier | Recto 6L6 (or Recto 6L6 Tube) |
| Jazz 120 | A transistor 2x12 combo's first channel, with its bucket-brigade chorus | its own transistor power amplifier, which comes with it |
| Green 9 | The green overdrive with the later pedal's output resistors | none |
| Rodent | A hard-clipping distortion whose slow op-amp runs out of gain-bandwidth before it runs out of gain | none |
| Round Fuzz | Two germanium transistors and a feedback resistor | none |
| Yellow Dist | One slow op-amp and a pair of germanium diodes to ground | none |
| Heavy Metal | A gated distortion: two germanium diodes in series with the signal, and three gyrators | none |
| Metal Zone | Two gain stages and seven filters, with a three-band equaliser whose middle sweeps | none |
| Orange Dist | A transistor that clips first and a diode pair that clips what is left, with the bass cut before either and a scoop after | none |
| Treble Boost | One germanium transistor behind a 5 nF capacitor; its one knob is a volume after a fixed gain | none |
| Brit Plexi Bass | The Brit Plexi's late-60s bass sibling of the same drawing set: V1's halves on one cathode, nothing throwing the bottom away, an unbypassed second stage, a 250 pF / 56 k stack and no master | Brit Plexi Bass EL34 |
| Brit 45 | The mid-60s British 45 W head its maker started with: two ECC83 channels on one cathode, the bright one's 100 pF across its volume, an unbypassed gain stage into a follower, a 270 pF / 56 k stack and no master | Brit 45 KT66 |
| Brum 100 | A late-60s Midlands 100 W head, Marshall-like and not a Marshall: split V1 cathodes, a 270 pF / 56 k / 22 k stack and no master, into four EL34s on 600 V | Brum EL34 |
| Oregon T | An early-70s American 150 W head: a tweed-style preamp with a master, into four 6550s in ultra-linear | Oregon 6550 |
| American SVT | A 70s American 300 W bass head's first channel: a James stack, a midrange whose toroid resonance sits inside a two-stage feedback loop, its three-way midrange frequency and Bass Cut / Ultra Lo switches, and Ultra Hi on the Bright switch | American 6550 |
| American VT-40 | An early-70s American 4x10 combo with that head's tone section inside it: a 12AX7 input (its Sensitivity switch built in the middle), the two inputs mixed on one plate, the same James stack and midrange loop in a single 6K11 compactron with its three-way midrange frequency (300 Hz, 800 Hz, 3 kHz), a valve-driven spring reverb on the Reverb knob, a bootstrapped follower, and Ultra Hi on the Bright switch | American 7027A |
| American V-4B | Its 100 W bass-head sibling: the same tone section and midrange loop, no reverb, Ultra Lo on the low switch (a ladder ahead of the volume, a bypassed cathode and a capacitor on the mixer: the bottom kept, the rest taken away) and Ultra Hi on the Bright switch | American V-4B 7027A |
| Gold Drive | An overdrive whose germanium-clipped path is summed with two clean ones | none |
| Brit Drive | Two op-amp stages into red LEDs, then a bass, middle and treble stack | none |
| Clean Boost | One op-amp, one knob, up to 26 dB | none |
| Bass Driver | A bass preamp and DI in a pedal: two drive stages into a zener pair, two low-passes, a blend with the dry bass, an active mid (500 / 1000 Hz shift), bass (80 / 40 Hz shift) and treble | none |
| American 800RB | An 80s American solid-state bass head: an op-amp input stage with -10 dB, Lo Cut and Hi Boost, a mid contour notch, four active bands (bass, low mid, high mid, treble) and a JFET boost on the level knob | American SS 800 |
| Orange Phase | A 70s phaser: four JFET all-pass stages swept by a one-op-amp oscillator, summed with the dry; Speed on the drive knob, and the block logo's feedback resistor on the tone knob as a switch (down script, up block) | none |
| Blue Chorus | A late-70s chorus: pre-emphasis, a three-pole filter into a bucket-brigade delay swept by a triangle oscillator, the same filter out, mixed half and half with the dry through the de-emphasis; Rate on the drive knob, Depth on the tone knob | none |
| Modern 33 | A modern metal boost: one transistor and one op-amp as a single stage on a 33 V rail, 22 dB in the middle of the band and the low strings held back, clean far past a guitar's level; one knob, its level | none |
| Modern Purple | A modern high-gain pedal: six op-amp stages, a diode clipper in a feedback loop and red LEDs to ground, a passive bass and treble, an active middle; the Aggression toggle (off, Blue, Red) changes the gain stage's gain and how much bass reaches it, not the clipping | none |
Every pedal is also a circuit. The eighteen in the pedal slot can each be selected on their own, with nothing behind them — which is how a pedal into a desk was always recorded, and how an HM-2 into an MT-2 becomes expressible: one in the slot, the other as the circuit. Selected as the circuit, a pedal keeps its knobs and their names: its drive and level on the Drive section's first two, its tone controls in the Tone section. The list is grouped under PEDALS, AMPLIFIERS and MICROPHONE PREAMPS, because it now holds three different kinds of thing.
Display names are generic on purpose. Which hardware each one was built from is in What each name is below, and in the research logs alongside the stable ids saved sessions use.
A microphone preamplifier is not a guitar preamplifier turned down. A guitar preamplifier is supposed to run out of room — that is where the sound is — and these are built so that they do not, so everything interesting happens in the last few decibels before they do, or in the transformer rather than the gain stage.
The amplifier list picks what does the work on those channels: a valve, a JFET, or an op-amp. A JFET follows a square law, and a square law has only a second-order term, so it makes second harmonic and essentially nothing else until it runs out of room. An op-amp with enough loop gain contributes nothing of its own at all — measured, 0.00 % across the whole band at every gain setting.
The iron list puts an output transformer after any circuit here, and it is the part of this plugin that a waveshaper cannot be. What saturates in a transformer is the flux, and flux is the integral of voltage — so the same signal makes far more of it low down. Measured on a core at twelve volts:
| 30 Hz | 120 Hz | 500 Hz |
|---|---|---|
| 68 % | 4 % | 0.00 % |
No curve applied to the samples behaves that way. It is why the studio channel, which has no character whatever of its own, reads 13.97 % at 40 Hz with iron on it and 0.000 % without. The core is symmetric, so it makes odd harmonics where a single-ended valve stage makes even ones.
Three materials, and they are not one another turned up: nickel is the only one that colours a quiet signal and the softest when pushed, steel stays out of the way then arrives hard and goes furthest, amorphous is still clean at eight volts where steel is at 40 %.
Silicon, germanium and LED are selectable wherever there are diodes. They differ by forward voltage, which is the whole reason anyone swaps them: measured, germanium is already bending at 20 mV where an LED has not started, and the LED overtakes it when driven hard.
Green 808, Ram Fuzz, Green 9 (the 808 with the later pedal's output resistors), Rodent (a hard-clipping distortion whose slow op-amp runs out of gain-bandwidth and slew rate, as the original's does), Round Fuzz (two germanium transistors), Yellow Dist (one slow op-amp and a pair of germanium diodes to ground), Heavy Metal (a gated distortion with two tone controls), Metal Zone (two gain stages and seven filters, with a three-band equaliser whose middle sweeps), Orange Dist (a transistor booster that clips before the op-amp and diodes do, with the bass cut ahead of both), Treble Boost (one germanium transistor behind a 5 nF capacitor, whose single knob is the slot's level -- its drive knob is greyed, because it has no drive), Gold Drive (a germanium-clipped gain stage summed with two clean paths, and a treble shelf), Brit Drive (two op-amp stages into red LEDs and a three-knob stack), Clean Boost (one op-amp and one knob, its gain: the level knob is greyed), Bass Driver (a bass preamp and DI: drive, presence, bass, mid, treble, blend and level -- seven knobs, five of them in the tone row -- its two shift switches on the panel's low and mid switches when it is the circuit), Orange Phase (a phaser whose oscillator is solved with the rest of it: Speed on the drive knob, the script / block switch on the tone knob, no level) and Blue Chorus (a bucket-brigade chorus: everything either side of the delay solved, Rate on the drive knob, Depth on the tone knob, no level), Modern 33 (a boost whose one knob is its level: the drive knob is greyed) and Modern Purple (gain, bass, mid, treble, the Aggression toggle on a fourth tone knob in thirds, and volume; it holds the chain at the host rate, as the Metal Zone does), each with the knobs that pedal actually has, in front of whichever circuit is selected — so a Green 808 into the American Twin keeps both sets of controls. The pedal is its own netlist, solved before the circuit it feeds, so a pedal can also sit in front of itself.
A pedal's knobs are the ones that pedal has, named the way its box names them (overdrive, sustain, distortion, fuzz; level, volume, output): most have three, the Heavy Metal has two tone controls (its Colour Mix pair), the Metal Zone has four including a swept mid, and the panel grows a knob for each. The Heavy Metal is also the only gated distortion here -- two germanium diodes sit in series with the signal rather than across it, so quiet playing is held back entirely and the pedal cuts off rather than fading.
The slot is level matched the way the circuit list is. Each pedal's Level knob at noon is unity through that pedal — its own measured position, a little above half on most of them, because the level control of a pedal is an attenuator after a stage with gain (the Orange Dist's is a third of the way up its linear track, because it has a great deal of gain in front of it). So switching pedals with the knobs where they are moves the level by a few decibels rather than by ten, and what is left is the pedals being different pedals: a fuzz at half its drive really does make more than a clean boost does. And the pedal is fed a guitar whatever follows it, while the circuit behind it is fed the level it was calibrated at — a guitar for the amplifiers, up to a volt for the clean stage and the consoles — so a pedal in front of the clean circuit sounds like a pedal rather than like a fault.
Nominal, 90 %, 80 % or 70 %. A valve amplifier's supplies all come from one transformer, so running it from a variac brings every rail down together: the valves have less room, the bias follows them, and the amplifier goes soft and compressed at a setting where it used to be loud and clean. It is a selection rather than a knob because that is what it was — how the rig was wired, not something anyone swept while playing. The Brown '78 and Brown '84 presets run at 70 %, because the engineer who recorded those records says the amplifier ran at 80 to 85 volts; Blizzard '80 runs at 80 %, the nearest setting to the 90 volts that player is reported to have used.
| Choice | What it is |
|---|---|
| Matched | The selected amplifier's own power stage; none for pedals, topologies and the studio preamplifiers. The Jazz 120's transistor amplifier and the British 73's line driver come with them and are not in this list |
| Bypass | No power stage: phase inverter, output valves, feedback and output transformer all skipped |
| Cali 6L6 | Two 6L6s, long-tailed-pair inverter, a light loop with the presence in series with it |
| American 6L6 Clean | Four 6L6s with a 12AT7 inverter and light feedback — the clean one |
| American 6L6 High-Gain | Four 6L6s, with the feedback through a resonance network and the presence off it |
| Brit EL34 | Four EL34s from a 1981 British 100 W master-volume drawing; the Brit 800's own |
| Brit Plexi EL34 | Four EL34s from a 1970 drawing of the non-master head: no master, four times the 2203's feedback, a 5 k presence whose track is the bottom of the inverter's tail; the Brit Plexi's own |
| Brit 2205 EL34 | Two EL34s from a 1988 drawing of the 50 W two-channel head: its own low-leak inverter, feedback from the 4 Ω tap; the Brit 2205's own |
| AC30 EL84 | Four EL84s sharing a 50 ohm cathode resistor, no feedback loop, and a cut control across the inverter; the Brit AC30's own |
| DR103 EL34 | Four EL34s on 22 k grid stoppers and a tight loop; the inverter's grids held by a follower on its own divider, and the Hiwatt's presence loop back to the last preamp valve, which behind the Brit DR103 is built into this stage; the Brit DR103's own |
| Recto 6L6 | Four 6L6s on a cold -51 V bias from the manufacturer's own drawing, with no feedback loop, as in the red channel's Modern mode; the Cali Rectifier's own |
| Recto 6L6 Tube | The same stage with its rectifier switch on valve: two 5U4GB, so the rail sits lower and sags under a chord |
| American Deluxe 6V6 | Two 6V6s behind a 12AT7 inverter on a GZ34 valve rectifier, with the AB763's light feedback and no presence; the American Deluxe's own |
| Brit Plexi Bass EL34 | The Brit Plexi EL34 with the 1992's .1 uF couplings into the output valves, where the 1959 has .022: the corner moves from 33 Hz to 7 Hz; the Brit Plexi Bass's own |
| Brit 45 KT66 | Two KT66s, one a side, behind a GZ34 valve rectifier, the 1959's inverter and presence, 27 k of feedback from the 16 ohm tap; the Brit 45's own |
| Brum EL34 | Four EL34s on 600 V and -54 V, as the trace prints them, with 10 k grid stoppers, 470 ohm screens and a 3.3 k presence whose track is the inverter's tail; the Brum 100's own |
| Oregon 6550 | Four 6550s in ultra-linear -- each side's screens on a tap of its own half of the primary -- behind a 12AX7 long-tailed pair, with 22 k of feedback from the 16 ohm tap and a reverse-log presence; the Oregon T's own |
| American SS 800 | Transistors, 300 W: an op-amp driving a common-base stage and a VAS, three complementary pairs a side on unregulated +-85 V rails that sag under a held note, with current limiters; the American 800RB's own |
| American 6550 | Six 6550s held by two direct-coupled cathode followers -- the output grids are driven into grid current with no coupling capacitor of their own to charge -- behind a 12BH7 gain stage a side and a cathodyne, on 660 V with the drivers on the screens' sagging rail; the American SVT's own |
| American 7027A | Two 7027As, one a side, on 594 V with 589 V screens and -65 V of bias, behind a 12AX7 gain stage that carries the loop on its cathode and a floating paraphase inverter, whose second half is fed from a divider between the two plates; 4.7 k from the 8 ohm tap; the American VT-40's own |
| American V-4B 7027A | Four 7027As, two a side, on 545 V behind the same gain stage and floating paraphase, .001 uF across the loop's 4.7 k; the American V-4B's own |
A power stage is a complete netlist: master, inverter, bias, grid coupling, output valves with their screen supplies, a centre-tapped transformer with a nonlinear core, and the feedback loop around all of it. Choosing one behind a different circuit is level matched against that circuit's own, so trying combinations does not mean chasing the fader.
Presence turns the power stage's own presence control -- the one in its feedback loop -- and on the AC30 EL84 its Cut control instead, which is what that amplifier has in the same place. Half way is where the stage has always rested, so it changes nothing until it is moved; on most stages that is also the pot's own half, so a player's "presence 7" is 70 %. It is greyed where the stage has nothing there: the American 6L6 Clean and Deluxe 6V6 (an AB763 has no presence), the transistor stages, and Bypass. The DR103 EL34's is the Hiwatt's own, a loop from the feedback node back to the last preamp valve, which is why that power stage now begins at that valve. The Cali 6L6's is a rheostat in series with its loop, as the Mark IIC+'s is: turned up it takes treble out of the feedback first and some of everything else after, so the whole stage loosens a little as the top comes up. The Recto stages have no loop -- in the red channel's Modern mode the Dual Rectifier lifts it -- so there the knob turns the Cali Rectifier's own presence, a treble shunt in its preamplifier, whatever power stage is behind it; behind any other circuit the Recto stages grey it.
Cabinet: Legacy (the old resistor load and Combo/Stack filter, the default), Bypass (the driver on an open baffle), or one of fourteen cabinets with real dimensions and driver layouts: Brit 1960 4x12, Cali Oversized 4x12, Brit Closed 4x12, Brit Green 4x12, Brit V30 4x12, Oversized 4x12, American Open 2x12, American Open 1x12, Closed 1x12, Closed 2x12, Jazz Open 2x12, American Closed 4x12, the American 8x10 -- eight tens in four sealed chambers of two, the American SVT's own box, whose standing waves are a chamber's while its sealed air is the whole cabinet's -- and the American 4x10, the American 800RB's own: four tens in a vented box, its two ports tuned to 42 Hz and radiating from the baffle, behind the cabinet's 18 dB/oct crossover, with a horn above them for the treble the crossover takes from the tens. The Horn knob, at the end of the microphone row, is the cabinet's attenuator; a close microphone on a ten hears little of the horn, as in a room.
Bypass there means no box, not no speaker: the driver still radiates, on an open baffle, and a microphone still picks it up, which is why it does not sound like Legacy with its filter off. The way past the acoustic path is the speaker row's own Bypass, and that is bit-identical to Legacy/Off (a test says so).
Speaker: Matched (the cabinet's own driver), Bypass (the power stage's output, a DI), or Brit V30, Brit Green 25, Brit T75, American Vintage 12, American Vintage 10, American Ceramic, American Alnico, Jazz 12, Brit K85, American Bass 10, Cast Bass 10. Each is a Thiele–Small electrical and mechanical model with a lossy voice coil, fitted to the manufacturer's impedance and response data where it is published and estimated where it is not, and its impedance is solved inside the power stage. A closed box stiffens the suspension in that same solve, so a 4x12 moves the resonance the valves see.
Microphones: eleven profiles — dynamic, ribbon, condenser, valve condenser and FET condenser — each with its own polar pattern, proximity effect, response and off-axis loss. Mic A is always there (its Bypass is an ideal omni); mic B can be off. Each has position (centre to edge of the cone), distance and angle, placed in three dimensions against every driver in the cabinet: close up the nearest cone dominates, further back the array adds up at low frequencies and beams at high ones, an open back cancels its own bass, and two microphones at different distances comb-filter unless time is set to Aligned. B polarity inverts mic B, and blend mixes the two.
Each microphone also has a pan, which is how one cabinet becomes a stereo image: put A and B on opposite sides and the two capsules land in different places in the mix rather than being summed. Centre means the whole signal on both sides, which is what a mono source on a stereo bus has always done here, so leaving both pans centred changes nothing at all. The pans apply where one amplifier feeds both outputs -- a mono guitar on a stereo track. A genuinely stereo input is already two independent amplifiers, and each keeps its own side.
The models, the equations and what each number is based on are in
SPEAKER_MODEL.md, CABINET_MODEL.md
and MICROPHONE_MODEL.md.
The panel's names are generic; the hardware behind them is not. This is the whole mapping, with the research log for each — the log is where the revision, the sources, the places they disagree and everything approximated are written down. Every model is built from published drawings and data sheets, part by part; a name in the right-hand column is a statement about what was measured against, not a claim of any connection with the manufacturer. All trademarks belong to their owners, who have neither endorsed nor been involved in this.
Circuits — the ones marked generic are designed topologies with no hardware behind them at all.
| Panel | Modelled from | Log |
|---|---|---|
| Clean / Crunch / High Gain | generic: one, two and three cascaded ECC83 stages | — |
| Overdrive / Distortion | generic: diodes in the feedback loop, and diodes to ground | — |
| Console / Studio | generic: a step-up transformer into a discrete stage; an op-amp on studio rails | — |
| Green 808 | Ibanez TS808 Tube Screamer (JRC4558D, 1N4148 pair, BC549 buffers) | green_808.md |
| Ram Fuzz | Electro-Harmonix Big Muff Pi, 1973 Ram's Head | big_muff.md |
| Cali IIC+ | Mesa/Boogie Mark IIC+ lead channel, 60 W | cali_iic_plus.md |
| American 5150 | Peavey EVH 5150, the original (1992), lead channel | american_5150.md |
| American Twin | Fender Twin Reverb AB763 (blackface), vibrato channel | american_twin.md |
| American Deluxe | Fender Deluxe Reverb AB763 (blackface), vibrato channel | american_deluxe.md |
| American Deluxe Normal | the same amplifier through its Normal channel: no bright cap, no reverb, no tremolo | american_deluxe.md |
| Brit 800 | Marshall JCM800 2203 100 W, 1981 drawing | brit_800.md |
| Brit 2205 | Marshall JCM800 2205 50 W, boost channel, later circuit, 1987/88 drawings | brit_2205.md |
| Brit Plexi | Marshall 1959 Super Lead 100 W, bright channel, 1970 drawing | brit_plexi.md |
| Brit AC30 | Vox AC30/6 Top Boost, brilliant channel | brit_ac30.md |
| Brit DR103 | Hiwatt DR103 Custom 100, brilliant channel, Issue 4 | brit_dr103.md |
| Cali Rectifier | Mesa/Boogie Dual Rectifier, two-channel Rev F, red channel modern | cali_rectifier.md |
| Jazz 120 | Roland JC-120 Jazz Chorus, CH-1 and its MN3007 chorus, the JC-120UT/JT of Sep. 2000 | jazz_120.md |
| British 73 | DIY Recording Equipment 73P v1.1 (a 1073-style 500-series card) | project-local drawings |
| American 312 | API 312 microphone preamplifier card (2622, 2520, 2503) | american_312.md |
| British 4K E | SSL SL 4000 E channel amp, 82E01 microphone amplifier | british_4k_e.md |
| Tube 610 | Universal Audio 610-A modular console preamplifier | tube_610.md |
| British 47 | EMI REDD.47 line amplifier, drawing REDD.47/C1 (1959) and description REDD.M47 | british_47.md |
| German 76 | Telefunken/TAB V76/80 microphone amplifier, IRT drawing S 1176 and Braunbuch description (1959) | german_76.md |
| Brit Plexi Bass | Marshall JMP 1992 Super Bass 100 W, Unicord drawing 70-13-11, July 1970 | brit_plexi_bass.md |
| Brit 45 | Marshall JTM45 of 1965, the lead head, from Marshall's period drawing and voltage chart and its CAD JTM45 diagram | brit_jtm45.md |
| Brum 100 | Laney Supergroup 100 Mk I, a 1969 build, from a traced drawing | brum_100.md |
| Oregon T | Sunn Model T, drawing D-1029 A, 1973, BRITE channel | oregon_t.md |
| American SVT | Ampeg SVT (6550), "SVT PREAMP" D 591719 rev D, 1975, channel 1, NORMAL input | american_svt.md |
| American VT-40 | Ampeg VT-40, schematic DWG 06500 rev B (4-71) with its 1971 service section's parts lists, transformer data and A.C. voltage readings, channel one, BRIGHT input | american_vt40.md |
| American V-4B | Ampeg V-4B, schematic DWG 06700 rev A (5-71), channel one | american_vt40.md |
| American 800RB | Gallien-Krueger 800RB, preamp 406-0045-C, 1991 | american_800rb.md |
| Green 9, Rodent, Round Fuzz, Yellow Dist, Heavy Metal, Metal Zone, Orange Dist, Treble Boost, Gold Drive, Brit Drive, Clean Boost, Bass Driver, Orange Phase, Blue Chorus, Modern 33, Modern Purple | the pedals above, selectable as circuits in their own right | as listed under Pedals |
Pedals (the slot in front of whatever is selected)
| Panel | Modelled from | Log |
|---|---|---|
| Green 808 | Ibanez TS808 Tube Screamer | green_808.md |
| Green 9 | Ibanez TS9 — the 808 with its output resistors | green_9.md |
| Ram Fuzz | Electro-Harmonix Big Muff Pi, 1973 Ram's Head | big_muff.md |
| Rodent | Pro Co RAT, the LM308 revision | rodent.md |
| Yellow Dist | MXR Distortion+, the 741 version | yellow_dist.md |
| Round Fuzz | Arbiter Fuzz Face, germanium (1966–68) | round_fuzz.md |
| Heavy Metal | Boss HM-2 Heavy Metal, the Japanese original | heavy_metal.md |
| Metal Zone | Boss MT-2 Metal Zone | metal_zone.md |
| Orange Dist | Boss DS-1 Distortion, the TA7136P original (before the 1994 DS-1A) | orange_dist.md |
| Treble Boost | Dallas Rangemaster Treble Booster, the stock OC44 unit | treble_boost.md |
| Gold Drive | Klon Centaur, from ElectroSmash's analysis (the board was potted; no Klon drawing exists) | gold_drive.md |
| Brit Drive | Marshall The Guv'nor, the original (1988-92), from ElectroSmash's analysis | brit_drive.md |
| Clean Boost | MXR M-133 MicroAmp, from ElectroSmash's analysis | clean_boost.md |
| Bass Driver | Tech 21 SansAmp Bass Driver DI, V2, from a trace of a real unit (kanengomibako, 2022) | bass_driver.md |
| Orange Phase | MXR Phase 90, script logo (1974-77), from ElectroSmash's trace, with the block logo's R28 switchable | orange_phase.md |
| Blue Chorus | Boss CE-2, from Boss's CE-2/CE-2B Service Notes, first edition, February 1987 | blue_chorus.md |
| Modern 33 | Fortin 33, from PedalPCB's trace of a genuine unit (the TC Electronic Integrated Preamp's front end) | modern_33.md |
| Modern Purple | Revv G3, the original (not the G3 V2), from PedalPCB's trace of a genuine unit | modern_purple.md |
Wahs (their own slot, ahead of the pedal)
| Panel | Modelled from | Log |
|---|---|---|
| Black Wah | Dunlop Cry Baby GCB-95, the buffered board (rev F, 1991 on), from ElectroSmash's trace | wahs.md |
| Chrome Wah | Vox V847, from ElectroSmash's trace (Thomas Organ's 1967 V846 drawing still to be checked against) | wahs.md |
Power stages
| Panel | Modelled from | Log |
|---|---|---|
| Cali 6L6 | Mark IIC+ 60 W: ECC83 inverter, two 6L6GC, the loop and series presence as the RP10/FINAL redraws draw them | cali_iic_plus.md |
| American 6L6 Clean | Twin Reverb AB763: ECC81 inverter, four 6L6GC, 820 Ω feedback | american_twin.md |
| American 6L6 High-Gain | 5150: ECC83 inverter, four 6L6GC, 39 k feedback through the resonance network (it rests at noon; no knob) | american_5150.md |
| Brit EL34 | JCM800 2203: four EL34 at −42 V, feedback from the 4 Ω tap | brit_el34.md |
| Brit Plexi EL34 | 1959 Super Lead: the same iron with no master, 47 k feedback | brit_plexi.md |
| Brit 2205 EL34 | JCM800 2205: two EL34 at −36 V, 330 k / 120 k inverter leaks, Hammond 1750N replacement-iron data | brit_2205.md |
| AC30 EL84 | AC30 Top Boost: four cathode-biased EL84, no feedback loop, cut control, GZ34 rectifier | brit_ac30.md |
| DR103 EL34 | Hiwatt DR103: four EL34, inverter direct-coupled to its driver | brit_dr103.md |
| (matched to Jazz 120) | Roland JC-120: 60 W complementary transistor amplifier, 2SC4386/2SA1671, bootstrapped VAS | jazz_120.md |
| American Deluxe 6V6 | Deluxe Reverb AB763: 12AT7 inverter, two 6V6GT, GZ34 rectifier | american_deluxe.md |
| Recto 6L6 / Recto 6L6 Tube | Dual Rectifier: four 6L6 on the silicon setting, or two 5U4GB valve rectifiers; the loop lifted, as in RD NORM | cali_rectifier.md |
| Brit Plexi Bass EL34 | 1992 Super Bass: the 1959's stage of the same drawing set with .1 uF output couplings | brit_plexi_bass.md |
| Brit 45 KT66 | JTM45, 1965: two KT66 (fitted to Marconi's sheet), a GZ34, 27 k from the 16 ohm tap, -48 V of bias derived from its own supply | brit_jtm45.md |
| Brum EL34 | Laney Supergroup 100 Mk I: four EL34 on 600 V, 3.3 k presence on the tail | brum_100.md |
| Oregon 6550 | Sunn Model T: four 6550 ultra-linear (GE 6550-A fit), 22 k feedback from 16 ohm, chart-fitted supply | oregon_t.md |
| American 6550 | Ampeg SVT "SVT POWER AMP SCHEMATIC" D 591720 rev H: six 6550, 12BH7 (RCA fit) gain stages and followers, a cathodyne, 47 k from 4 ohm; idle at the calibration procedure's 24 mA a valve | american_svt.md |
| American 7027A | Ampeg VT-40, DWG 06500 rev B: two 7027A (fitted to RCA's sheet), a 12AU7 floating paraphase, 4.7 k from 8 ohm, Ampeg's own 6 k output transformer | american_vt40.md |
| American V-4B 7027A | Ampeg V-4B, DWG 06700 rev A: four 7027A, the VT-40's paraphase, 4.7 k from 8 ohm; its transformer estimated (no data located) | american_vt40.md |
| American SS 800 | Gallien-Krueger 800RB's 300 W amplifier, 406-0044-B, 1991: LF353, MJ15023 VAS, three MJ15022 / MJ15023 pairs on +-85 V; bias at GK's 15 mA a device | american_800rb.md |
Cabinets, speakers and microphones — dimensions from the manufacturers, Thiele–Small parameters and response curves from data sheets where they are published and estimated where they are not (cabinets.md, speakers.md, microphones.md).
| Cabinet | Modelled from | Speaker | Modelled from |
|---|---|---|---|
| Brit 1960 4x12 | Marshall 1960A, angled | Brit V30 | Celestion Vintage 30 |
| Brit Closed 4x12 | Marshall 1960B, straight | Brit Green 25 | Celestion G12M-25 Greenback |
| Brit Green 4x12 | Marshall 1960AX | Brit T75 | Celestion G12T-75 |
| Brit V30 4x12 | Marshall 1960AV | American Vintage 12 | Jensen P12R |
| Cali Oversized 4x12 | Mesa/Boogie Rectifier Standard | American Vintage 10 | Jensen P10R |
| American Open 2x12 | Fender Twin Reverb combo | American Ceramic | Jensen C12N |
| American Open 1x12 | Fender '65 Deluxe Reverb | American Alnico | Jensen P12N |
| Closed 1x12 | Marshall 1912 | Jazz 12 | Roland 30-103D (the JC-120's) |
| Closed 2x12 | Marshall 1936 | Brit K85 | Celestion G12K-85 (from G12K-100 data) |
| Jazz Open 2x12 | Roland JC-120 combo | American Bass 10 | Eminence Legend B810, 32 ohm (the SVT 8x10's replacement ten) |
| American Closed 4x12 | Peavey 412M, late 1980s | Cast Bass 10 | Gallien-Krueger P10/200, 32 ohm, Eminence-built (its 410RBH's ten; estimated past 32 ohm, 200 W, 43 Hz) |
| American 8x10 | Ampeg SVT-810E, four sealed chambers of two | ||
| American 4x10 | Gallien-Krueger 410RBH (RBH series, 1999 manual), vented, with its horn | ||
| Oversized 4x12 | generic | ||
| Combo / Stack (Legacy) | generic filters, kept for old sessions |
| Microphone | Modelled from | Microphone | Modelled from |
|---|---|---|---|
| Dynamic 57 | Shure SM57 | Ribbon 38 | Coles 4038 |
| Dynamic 421 | Sennheiser MD 421 II | Condenser 87 | Neumann U 87 Ai |
| Dynamic 906 | Sennheiser e 906 | Condenser 414 | AKG C414 |
| Dynamic 409 | Sennheiser MD 409 U3 | Tube Condenser 67 | Neumann U 67 |
| Ribbon 121 | Royer R-121 | FET Condenser 47 | Neumann U 47 fet |
| Ribbon 160 | beyerdynamic M 160 |
Everything else on the panel — Diode, Amplifier, Iron, Tone, Mains — is generic:
a material or a device type rather than a particular product.
docs/MODEL_INVENTORY.md carries the same mapping
with the stable ids saved sessions use, and what is approximated in each.
One channel at 48 kHz, as a fraction of the time available, with each preset set up exactly as it ships — pedal, power stage, cabinet and microphones included. Measured on 2026-09-16; the solver has become faster since (compiled elimination kernels, and the heaviest chains split across two threads), so these are upper bounds until they are measured again.
| Studio Preamp | Valve Colour | Blues Crunch | Scooped Metal | British 73 Pre | Plexi Crunch | Brit Crunch | Blackface Clean | Blackout '80 | Experienced '67 | Ultra Rhythm | Boutique Lead | Texas Storm '83 | Puppet Master '86 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3.0 % | 4.7 % | 9.3 % | 13.7 % | 17.9 % | 20.2 % | 20.3 % | 20.8 % | 20.8 % | 22.2 % | 30.6 % | 31.5 % | 33.0 % | 37.7 % |
The heaviest is Puppet Master '86 at 38 %: the Cali IIC+'s six triodes and graphic, a
speaker-loaded power stage and two microphones. The microphone preamplifiers are among
the cheapest: 2.2 to 13 % in a run on 2026-10-01, the four-valve German 76 at 12 %.
Measured with cargo run --release --example presetcost.
Swapping the Legacy cabinet for a physical one moves an amplifier's cost by a
few points either way. On the same settings, the Cali IIC+ went from 20 to
22.6 % and the Twin from 15 to 17 %, while the 5150 dropped from 33 to 30 %
because its power stage needs fewer passes into a real speaker. The cabinet and
microphone stage itself costs about half a percent with one microphone and
three quarters with two (examples/acousticcost.rs).
The Quality control is part of the sound rather than only of the cost, and the presets set it. Measured against an eight times reference at 3 kHz, a diode clipper to ground aliases 31 dB down at two times and 71 at four, so the clipper presets ask for four; a three stage valve cascade is already 55 dB down at two, and it is the cascade that costs anything, so paying for four there buys nothing audible.
The modelled circuits are the ones that alias most -- a cold-clipped high-gain
channel at 48 kHz puts 18.6 % of its fundamental back as hash that is not the
note -- and they are also the most expensive to solve. They follow the control
as far as 2x, which takes about two thirds of that away for about double
the work, and stop there: at four times every one of them costs more than the
time there is, which is a DAW missing its deadline rather than a cleaner sound.
So does a chain with a power stage in it, the voice's own or one chosen in
its place behind a topology: the power stage runs inside the oversampler and is
the heaviest solve there is. Behind the High Gain topology the American 6550
stage folds back 7 % at two times and 1.9 % at eight, but at eight it costs more
than a whole callback on its own; behind Crunch or Distortion two times is
already within a fraction of a percent of eight. A topology without a power
stage still follows the control all the way.
The row shows the factors it can deliver and lights the one in use. Every
shipped preset on a modelled circuit asks for host rate, and so does a fresh
instance: the control defaults to host rate rather than to two, because the
most expensive amplifier in the catalogue does not fit a 64-sample callback at
two and an amplifier should not start somewhere its own presets never put it.
Turning it up is a choice with a cost, and the panel is where that choice is
made. Measured with cargo run --release --example oversampling, and the cost
side with cargo run --release --example stutter.
The circuits are solved, so their cost varies from sample to sample: a clip transition can take ten times the Newton passes of the samples round it. A host callback that runs past its deadline is a dropout for the whole session, so the plugin does not solve on the host's thread. Its DSP runs on a worker of its own 128 samples behind the host (2.667 ms at 48 kHz, 2.902 ms at 44.1), and the host callback only hands over the input and takes output the worker finished earlier: a few microseconds instead of a few hundred. The delay is real and reported, so the host lines parallel tracks up; it is also what you hear when you monitor through the plugin, on top of the 0-66 samples the oversampling adds (none at host rate, where every modelled preset ships).
The worker produces the same audio as before, to the bit, 128 samples later. A solver spike costs the worker time it has rather than the host time it lacks; if the worker is ever later than the reservoir, the late samples are concealed and skipped -- a short fade, counted -- rather than played late, so the latency never grows. What the reservoir cannot do is make a chain that needs more than the period on average fit: it absorbs spikes, not overload. With a host buffer longer than the reservoir, part of each callback's output is made from that same callback's input, so the callback waits for that part alone -- half its work at 256 samples, three quarters at 512 -- and the worker does the rest behind it.
128 is the smallest depth that never ran dry in any measurement, the JC-120's
hardest playing with sixteen instances included.
GAINSTAGEFX_RESERVOIR=<samples> in the host's environment sets another depth
when an instance is created: 64 halves the latency and, measured, conceals a
rare millisecond of the JC-120 under heavy load; 0 runs on the host thread as
before. How it works, and what it measured:
docs/reservoir.md, with
cargo run --release --example reservoir.
Eighty-two, in twelve groups shown quietest first so the list reads as a
range: Studio, Preamp, Crunch, High Gain, Overdrive, Distortion, Amplifier, and
five groups of chains aimed at particular records — Classic Rock,
Psychedelic / Lead, Alternative, Metal / Heavy and Blues. The Studio group holds the console and microphone-preamplifier
sounds, with the cabinet off throughout — a guitar speaker in front of a
microphone preamplifier makes no sense at all, and a test enforces it. The
whole catalogue is level matched, and a test holds it to that; cargo run --release --example presetlevel prints where each one sits.
Each one is a full set of panel positions — loading one and looking at the panel
tells you how the sound is made. Every guitar sound comes out of a physical cabinet,
speaker and microphone setup; the old baked cabinet filter is still there for older
sessions, but no shipped preset uses it. The record-inspired presets are built only
from parts the plugin actually has; which parts of each rig are documented and
which are approximated is written down in PRESETS.md.
Save your own with the button beside the name; they go to
~/.config/gainstagefx/presets on Linux and macOS ($XDG_CONFIG_HOME first,
where it is set), and to
%APPDATA%\GainStageFx\Presets on Windows, as readable JSON, and appear under
their own Saved heading at the foot of the list. Only those can be deleted — saving
under a shipped preset's name writes a new file beside it rather than replacing
it, so the shipped one never becomes unreachable. A dot next to the name means
the panel has been moved since the preset was loaded; move the control back and
the dot goes, because that state is compared rather than remembered.
Loading a preset goes out as ordinary parameter gestures, so it lands in a DAW's automation lanes and undoes in one step like any other edit. Saved presets store stable model ids as well as positions.
Built archives for Linux, macOS and Windows are attached to each
release, built from the
tag by GitHub Actions. Download the one for your platform and run the installer
inside it — install.sh, Install.command or install.exe. The macOS archive
carries universal (Apple Silicon and Intel) CLAP, VST3 and Audio Unit plugins,
ad-hoc signed but not notarized; Install.command clears the quarantine flag.
README.txt in the archive covers installing by hand.
cargo xtask bundle gainstagefx --release # CLAP and VST3 in target/bundled
cargo test --release # the measurements
cargo run --release --features standalone # the panel without a DAW
./install.sh # into ~/.clap and ~/.vst3 (Linux)On macOS, cargo xtask bundle-universal gainstagefx --release builds universal
bundles, and bash tools/package_au2.sh GainStageFx then wraps the same binary
as an Audio Unit (target/bundled/GainStageFx.component), which is what the
release workflow does. The workflow then opens the Audio Unit's editor with
audio running, the three ways a host can (tools/au_editor_smoke.m): its Cocoa
view in process, through Apple's v2 bridge, and out of process in
AUHostingService, the way Logic Pro and GarageBand load it.
The source-tree installer uses jq to read Cargo's configured target directory.
It builds the release-lto profile and installs both formats, each in a
BurningTreeC folder. Use
./install.sh --no-build to install the bundles already built in that target
directory. CLAP_PATH and VST3_PATH can each override one destination directory;
search-path lists are rejected. Restart the DAW after updating a loaded plugin.
Every claim in this README that has a number in it is checked by a test that
measures it. cargo test --release runs 610 of them, at 44.1, 48,
88.2, 96 and 192 kHz where the rate matters, and the audio path is tested not
to allocate.
src/dsp is the engine and knows nothing about audio plugins:
netlist— circuits as named nodes, validated before use. A dangling node or an unreachable output is aFault, not a silent wrong answer. Parts a control moves (pots, and a speaker's electrical equivalent) are adjustable without rebuilding the circuit.ac— stamps the matrix with complex admittances and solves per frequency. Exact, in microseconds, no audio involved. Refuses to run on a circuit containing a device, because a device has no single frequency response.time— trapezoidal companion models, Newton–Raphson with junction voltage limiting, and a separate DC matrix for the operating point with capacitors open and inductors shorted. Linear parts of a circuit are reduced out once, so each sample only solves what is actually nonlinear, and the small systems that remain are solved by elimination code compiled for each circuit's pattern and pivot order (examples/kernels.rs). A sample whose solve will not settle is handed to a copy of the circuit at twice the rate: two half steps there, then the full step again from their answer, so a failed solve no longer leaves a guess in the audio.device— the nonlinear parts: Koren triodes, pentodes with screen dependence, Shockley diodes, bipolar and JFET transistors, an op-amp, and a transformer core whose flux integrates. Parts that impose a voltage rather than a conductance get a branch unknown of their own.partition— the reductionstimeuses: the linear part of a circuit eliminated once, and the reduced systems' pivot plans, each replayed by the kernel compiled for it.measure— bin-aligned probe tones with phase continuous across the settle boundary.- the effects and utilities around the circuits: the spring reverb, the optical tremolo, the bucket-brigade chorus, the noise reduction and the oversampler.
src/circuits holds the netlists: the topologies, the pedals, the preamplifier
channels and power, which builds every power stage with either a resistor or a
speaker as its load. src/acoustics holds the speaker profiles, the cabinets,
the microphones and the stage that places them. src/voice.rs wires the chain
together, and splits a heavy one across two threads: the second half of each
block is handed to a worker while the first is solved, and a shadow copy of the
power stage can solve ahead where that pays.
The two solvers overlap deliberately. On a linear network they must agree, and
tests/agreement.rs is the only real check either of them has.
More: docs/MODEL_INVENTORY.md and
IMPLEMENTATION_PROGRESS.md are current;
ARCHITECTURE.md, DSP.md and
MODELS.md are an audit of 2026-09-14 and have drifted since --
read them for the reasoning, and the code for the facts.
The discipline here is that a number nothing can disagree with is not a measurement. Several times the thing that turned out to be wrong was the measurement, and several times it was me:
- A linear network read 2.6 % distortion because the probe tone's phase restarted between settling and capture. Nothing was wrong with the circuit.
- A gain control moved the Clean voice 6 dB end to end, on the reasoning that a gain control sets how much local feedback each stage keeps. It does not: a cathode bypass is bounded by the cathode resistor. It is a volume pot now, and the range is 80 dB.
- A linear rheostat cannot sweep evenly in decibels — for a span of 48 it put 18 of its 30 dB into the first quarter of the travel and 2 into the last. The track has to be shaped for the span it covers.
- The oversampler handed the circuit four samples for every one the host sent while the circuit still solved with the host's timestep, putting every corner frequency four times too high. It cost the overdrive 11 dB and the valve voices almost nothing, so nothing but the clipper would have shown it.
- An operating point converged, satisfied its own tolerance, and was wrong, because the matrix was stale. Kirchhoff caught it; convergence could not.
Device::advancesat on the trait uncalled from the beginning and nothing noticed, because every device until the transformer core was memoryless. The core integrates, and unadvanced its flux never accumulated past one sample: it drew a hundred-thousandth of the current it should have and read 0.00 % at every frequency, level and material.- A channel's gain control sat between the gain stage and the output transformer, which looks like a reasonable place for it. A pot's wiper impedance is highest in the middle of its travel, and a transformer colours according to what feeds it, so the channel measured 18 % distortion at half gain and 5 % at full — the knob inverted the character as it crossed the middle.
- The overdrive pedal's tone control fell more than three decibels short of what its own drawing gives, because two resistors had been swapped on the strength of a reference file this repository never had. Three independent sources agreed on the original values, and the tone reach is now a test.
- The first speaker load made a feedback power stage oscillate at 96 and 192 kHz: a pure inductance for the voice coil turned the feedback into a resonator above the band. A lossy coil fitted to the measured impedance, and the output transformer's own winding capacitance, fixed it. Every power stage is now driven into clipping into three speakers at the lowest and highest rates in a test.
- The Californian amplifier's graphic equaliser was wired as five tracks from the signal to ground with a fixed make-up after it. It could cut twelve decibels and boost less than three, so every V came out as a dip in the middle with nothing added at the ends. Both drawings put the tracks between the two inputs of a feedback amplifier; built that way it cuts and boosts by the same amount, and centred it is flat.
- The Californian lead channel stopped at its lead output and handed that straight to the equaliser, which left out the two triodes both of its drawings send the lead signal back through. One of them clips on every note. With them, the channel measures 61 % distortion at a guitar's level instead of 39 %, and a preset aimed at a famously saturated record stopped sounding clean.
- A power stage's master stayed where another circuit had left it, so the Twin on its own matched power stage came out 27 dB down with only the reverb audible. A test now switches the Twin's power stage behind three other circuits and back.
Licensed under either of the MIT License or the Apache License, Version 2.0, at your option. Unless you say otherwise, a contribution you submit for inclusion is licensed the same way, without any additional terms or conditions.
Releases up to and including v0.41.0 were published under GPL-3.0-or-later, and copies of those releases remain under it. The plugin was GPL because the VST3 bindings it once linked were; Steinberg's VST3 SDK is MIT licensed now, and every crate the plugin links today is permissive (or MPL-2.0, which applies only to that crate's own files).
Every crate it links is listed with its own licence and copyright notice in
THIRD-PARTY-NOTICES.md; regenerate that with
python3 tools/third-party-notices.py.
VST is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries. CLAP is a trademark of its respective owners. Neither this project nor its authors are affiliated with or endorsed by them.
