SPECTORTION
Distortion that only ever lands in tune.
Every distortion box you own smears energy across the whole spectrum and leaves you to clean up afterwards. Spectortion does the opposite. You tell it which notes matter — with MIDI, or by clicking the keyboard — and it generates distortion in the time domain but only accepts it where the harmonic series of those notes actually lives. Anything that lands off the grid is yours to route, reshape, or throw away.
Then it does it again. And again. Up to sixteen times, on a continuous control, with each pass narrowing onto the partials that survived the last one. That is what makes it sound like nothing else: not a filter over a distortion, but a distortion that keeps converging on the chord.
Measured against ordinary broadband distortion on the same source at the same drive, Spectortion puts around sixty times less energy off the harmonic grid after eight passes — and the gap widens with every pass instead of closing.
Push it and you get metallic blooms, resonant lattices and chord melts that stay musical. Back it off and it is the cleanest harmonic exciter you have heard, because the harmonics it adds are the only ones the note was ever going to have.
Contents
- Installing
- Five-minute start
- How it works
- The interface
- Control reference
- Post FX
- Latency modes
- Presets
- Recipes
- CPU
- Specifications
1. Installing
Windows — run the installer, or build from source
and double-click Packaging\Windows\build_and_install.bat.
The VST3 goes to
C:\Program Files\Common Files\VST3\Spectortion.vst3. Note
that a VST3 is a folder, not a single file.
macOS — run the .pkg. VST3 goes to
/Library/Audio/Plug-Ins/VST3, the Audio Unit to
/Library/Audio/Plug-Ins/Components.
Rescan plug-ins in your DAW afterwards. The presets - the factory pack and your own - live in:
- Windows —
Documents\Spectortion\Presetsby default. The installer asks for the folder and installs the factory presets there; Spectortion reads whichever folder you chose. - macOS —
~/Documents/Spectortion/Presets
Presets saved by an earlier version
(%APPDATA%\Spectortion\Presets) are copied into the new folder by
the installer; the old folder is left as it was.
2. Five-minute start
- Put Spectortion on a sustained source — a pad, a bass, a guitar, a vocal.
- Give it notes. Either send it MIDI from the part that is playing, or click the keys along the bottom, or press LEARN and let it listen (see §5). With no notes selected and All Distort at 0 the plug-in is silent by design: nothing is harmonically valid, so nothing is accepted.
- Turn Drive up until you hear it working, then Iterations up to 4–6.
- Turn Delta (top bar) up to 100 %. Now you hear only what Spectortion is adding — nothing else. This is the fastest way to learn what any control does. Bring it back to 0 when you have it placed.
- Use Mix to sit the original underneath the effect. Leave 0 dB engaged.
- If it is too much in one part of the spectrum, Mix is the wrong control — it turns the whole thing down and combs against the input while it does it. Try Spectral Interpolation on the EXPERIMENTAL tab instead, which pulls chosen frequencies part-way back through the process. See §5.
If it ever sounds wrong, the two things to check first are Latency Mode (Realtime is time-domain and immediate; Hybrid and Spectral Phase Align (HQ) report real latency that your DAW must compensate) and Master Filter, which will mute everything at 100% if no notes are selected.
3. How it works
Sample by sample, the engine runs this loop, once per iteration:
x(i+1) = x(i) + Influence · ( AllDistort · d(i) + (1 − AllDistort) · Accept( d(i) ) )
d(i) = waveshape( x(i) ) − x(i)
dis the change the waveshaper makes.Acceptis a bank of resonators, one on every harmonic of every selected note, each as wide as Harmonic Width says and narrowing pass by pass as Focus says: it keeps the part of the change that lands on the chord and lets the rest go.- Iterations is continuous. At 4.5 the engine computes pass 4 and pass 5 and crossfades between them, so the control automates smoothly.
- It runs in every latency mode, the same code with the same budget for a given Engine, so the same settings give the same distortion — attack and all — whichever mode renders them.
This is not EQ → distortion → EQ. The harmonic acceptance happens inside every iteration, which is why more passes converge on the chord instead of blurring it.
In Hybrid and Spectral Phase Align (HQ) a spectral stage follows the loop. It is where the controls only a spectrum can realise live: how the mask is painted (Emphasis, Snap, Overlap Rule and the Mask Key), where the rejected residual goes, the Experimental page's spectral stages, and in Spectral Phase Align (HQ) the input's own phase. At their defaults it changes nothing, and Hybrid is Realtime one frame later.
Two details that matter in use:
- The loop is level-preserving. A waveshaper with unity small-signal slope necessarily attenuates loud material, so a naive loop loses level with every pass. Here the level is restored continuously, so the loop redistributes energy rather than removing it. Turning All Distort up does not turn the volume down.
- Drive is referenced to a nominal −12 dBFS. A given Drive setting bites the same amount on quiet and loud material, so Shape stays audible everywhere.
4. The interface
Tabs — eight, under the top bar. The first six are in signal order; the last two, MODULATION and ROUTING, are about all of them.
AUTO comes first because it decides what everything after it acts on: it listens to the incoming audio and turns what it hears into the notes the plug-in targets. Off by default, and off it changes nothing. SPECTORTION is the spectral engine and most of this manual describes it. FX is the effects chain; see section 6. ARP steps the note selection. EXPERIMENTAL holds the unfinished spectral stages and the Harmonic Sculptor. SIDECHAIN is the envelope follower and everywhere it can go. MODULATION moves any control over time; ROUTING changes the order the modules run in.
The top bar stays put on every page, so presets, A/B and the latency read-out are always reachable, and so does the keyboard strip at the bottom — the notes the plug-in is acting on are context for every page, not a feature of one.
The tab buttons light up when something inside them is running, so a stage that is quietly rewriting your note selection is visible from whichever page you happen to be on.
Top bar — the preset display (the category above the preset's name; click it for the browser) with KEEP NOTES, A/B with copy, undo/redo, a live latency read-out, Input, Output and Auto gain, Delta and Mix, and settings. Engine and Latency Mode are in the System panel on the SPECTORTION tab. The settings menu also holds the Theme menu (see Theme below). Mix is a straight-line crossfade from the input (0 %) to the processed signal (100 %), and it glides to a new value over 25 ms, so dragging it is silent.
Centre — the analyser. Input trace, output trace, a glow along the bottom showing which regions are currently accepting distortion, a comb of harmonic markers whose height tracks how hard each partial is actually ringing, per-note colour tags, and an amber overlay for spectral pressure gain reduction. Toggle any layer in the settings menu.
Left column — Shape, System, Safety.
Right column — Harmonic Targeting, Master Filter, Iteration / Focus, Spectral Pressure, Residual, Conflict and Phase. Panels collapse; the advanced ones start collapsed.
The SPECTORTION tab keeps a faint accent wash and edge while another tab is open, so the way back to the main page is always visible.
Theme — Settings -> Theme:
Themes: matched background and accent pairs - Spectortion (default), Glacier, Infrared, Neon Noir, Toxic, Solar Graphite.
Accent and Background: each colour on its own - a list of swatches and a Custom... picker. The default is exactly the factory look (graphite
#0A0C10, violet#B42FF5); Reset to default theme returns to it.The theme is yours, not the session's: every open instance changes with it at once, and every new one opens in it.
View — the view button at the right of the top bar switches between the compact view (the default: it fits a laptop screen and shows more of the controls) and the full-size one. The choice is saved with the session.
Tab lamps — a tab's name lights in the accent colour while something on it is running where you cannot see it: AUTO, ARP, SIDECHAIN, MODULATION, FX (FX on and at least one effect switched on) and ROUTING (a changed order or a switched-off module); EXPERIMENTAL lights amber.
Bottom row — the eight MACROS at the left, in two rows of four (see Macros), then Drive, Iterations, All Distort, Focus, Pressure, Dry, Wet, the 0 dB limit toggle and the Output mode.
Note strip — the keyboard, the selected-note read-out, note source and priority, and the LATCH / ROOT / CHORD / LEARN / CLEAR buttons. The notes AUTO is picking are drawn on the keyboard too, as outlined keys with a light wash; the AUTO switch beside the button group is AUTO itself, on every page: on, AUTO listens to the audio and its notes join the ones you draw and play; off, they leave the selection at once (it also stops the Experimental Auto Harmony). It is the same switch as on the AUTO tab. The old LOCK button is now KEEP NOTES, in the top bar beside the preset browser: it governs what loading a preset does, and that decision is made while looking at the browser rather than at the keyboard.
Every control has a tooltip explaining exactly what it does: rest the pointer on a control for a moment and it appears. Each control waits on its own, so moving across the panel does not set them off. Settings → Show tooltips switches them off (and on again) for every instance. Hold Shift while dragging any knob for fine adjustment, double-click to reset it.
5. Control reference
Output
Two knobs in the top bar, in signal order:
DELTA MIX
after the engine last thing in the plug-in
how much of the input the balance against
is subtracted from it the untouched input
| Control | What it does |
|---|---|
| Delta | Subtracts the untouched input from the plug-in's output, by degrees. At 0 % you hear the effect; at 100 % what is left is exactly what the plug-in added and nothing else. The input is subtracted sample for sample, delayed by the same figure the host is told, so with the engine transparent it is silence to the last bit — in every latency mode. Halfway is the effect with half the original taken back out, which is a sound rather than a diagnostic. The best diagnostic tool in the plug-in: set a sound at Delta 100, then bring it back to 0. |
| Mix | The balance against the untouched input, and the last word on how much of the plug-in reaches the output. At 0 % you hear the input, whatever Delta says. Mix still applies to a delta, so turning it down from a full delta brings the original back. Mix always runs in OUTPUT at the very end, wherever ROUTING puts the DELTA modules. The knob is shaped: the wet share is 1 − (1 − knob)², so the dry and the processed sound balance at about 30 %, three quarters is wet at 50 %, and the effect builds evenly across the travel instead of arriving in the last tenth. 0 % and 100 % are exact. |
| 0 dB | Nothing leaves above 0 dBFS, whatever the rest of the plug-in is doing. SAFETY, the very last stage, holds the output at your Ceiling and never above 0 dBFS, with this switch on or off. The switch is kept for host automation. |
| Input / Output Gain | Trim before the engine, and on the wet side of MIX. Output Gain trims what MIX blends in against the dry signal, so MIX is the last word: at MIX 0 % Output Gain has no effect and you hear the input. It is applied after Delta, so a quiet delta can be brought up to something audible without changing the subtraction it came from, and AUTO GAIN does not cancel it. Input Gain is cancelled out of the subtraction, so raising it does not leak a copy of the original into a delta. |
| Auto Gain | Measures the processed signal against the latency-aligned input and matches the level, so you can audition Drive without level bias. It sits just before MIX, on the processed side: nothing inside the chain clips any more, so the engine and the effects may run far above full scale, and Auto Gain brings what they made back to the input's loudness - and its peaks under the Ceiling, as it always has - before it is mixed. What MIX's sum and Mono Bass do to the peaks after it is held by SAFETY at the very end (see Safety). It works over 120 ms, and slews rather than stepping at block boundaries. The measurement runs on a fixed ~10 ms grid, so it is the same at any buffer size. A rest - nothing in and nothing out - of under 120 ms is held; after a longer one the measurement starts again from nothing, so every hit after a real rest is treated the same way. From there a lift is faded in over 120 ms - nothing is turned up before there is evidence for it - but a reduction is applied from the first ~10 ms measurement, taken whole on the first block, and for the first 0.3 s a fast (20 ms) reading may lower the gain further while the chain's level is still building. A tail - a reverb, a delay's repeats, anything still sounding after the input stops or falls more than 10 dB under its recent level - holds the measurement, so it plays out at the gain its passage earned instead of being matched against the silence going in. A delta is corrected too — bringing the difference up to the input's level is what makes a quiet one audible at all. It is one knob, third in the top bar's Input / Output group: 100 % is the full match, 50 % half the correction in decibels, 0 % off - exactly the output without Auto Gain. 0 % by default; the experimental presets and the heavily driven ones turn it up. The measurement keeps running at every setting, so turning the knob up answers at once, and a move of it glides over 50 ms instead of stepping. |
Dry Level and Wet Level are gone, and Output Mode with them. A level either duplicates Mix or fights it, and Delta stopped being a mode when the difference moved to the end of the chain and became a knob. Sessions saved with any of the three still load: the old levels are folded into Mix on load, and the retired IDs stay in the parameter layout so no automation lane breaks.
Distortion
| Control | What it does |
|---|---|
| Drive | How hard the waveshaper is pushed, referenced to a nominal signal level. At minimum the nonlinearity is faded out completely, so Drive 1 is genuinely clean. |
| Iterations | How many times the distort-and-accept loop runs, 0 to 16, continuous. |
| Iterative Influence | How much of each pass's accepted change is committed. Below 100% each pass only nudges the spectrum, which softens the convergence. |
| Pass Blend | Blends between using the first-pass mask for every pass and using the narrowed per-pass mask. At 0 Focus has no effect. |
| Shape | Soft Clip, Tanh, Hard Clip, Fold, Asym Clip, Sine Shaper. All normalised to unity small-signal slope, so choosing one changes the character, not the level. Hard Clip and Fold have thresholds and need more Drive before they engage. |
| Shape Bias / Symmetry | Push the curve off-centre to generate even-order harmonics. Symmetry drives the two halves of the waveform differently while keeping both slopes at unity. |
| Hardness | The knee of the curve: 0 % is the shape as drawn, 100 % a hard clip at the same level - from round saturation to a square edge. |
| Heat | Up to 24 dB more drive into the curve, past Drive's own travel. 0 dB changes nothing. |
| Fold | Wavefolding ahead of the curve, up to eight folds: metallic, buzzing upper harmonics. 0 % is off. |
| Crush | Quantises the shaped signal from 16 bits down to 2: stepped digital grit, still kept to the notes by the harmonic targeting. 0 % is off. |
| Oversampling | Off / 2x / 4x / 8x. The whole distortion loop runs at that multiple of the sample rate between linear-phase filters, so what the shaper folds back lands above 20 kHz. Linear phase keeps the wet in phase with the dry under MIX and DELTA; it adds the oversampling latency the sample rate needs (56 samples at 44.1 kHz, 32 at 48 kHz, about 10 at 88.2 / 96 kHz) at any factor, in every mode, which the host is told about. The filters are designed for the rate in use to one specification - flat to 20 kHz, nothing folded back below 20 kHz, -80 dB - so they are no longer than that needs. CPU scales with the factor. Use it when Drive is high and the source has energy near the top. |
Harmonic targeting
| Control | What it does |
|---|---|
| Harmonic Width | How wide, in cents, the acceptance region around each harmonic is. Narrow is surgical and rings; wide is forgiving and natural. Never falls below the analysis resolution — see §10. |
| Min / Max Harmonic | Which part of the series is targeted. Min 3 leaves the fundamental alone; Max 8 keeps it to the lower harmonics. |
| Harmonic Tilt | Spectral tilt across the series, in dB per harmonic octave. Negative keeps the action low. |
| Emphasis | Contrast between accepted and rejected regions. Sharpens the edges of the mask. |
| Density | Thins the series deterministically. At 100% every harmonic is targeted; at 0 only the fundamentals. The same setting always yields the same series — nothing here is random. |
| Harmonic Focus | Narrows every region before the loop starts, as opposed to Focus which narrows it per pass. |
| Fundamental / Upper / Even / Odd | Weighting for those parts of the series. Even at 0 gives a hollow, clarinet-like result. |
| Inharmonic Tolerance | Extra cents of width added per harmonic octave, for sources whose partials stretch — pianos, plucked strings, bells. |
| A4 Tuning | Reference pitch for every target. Preserved when you load a preset. |
Focus and convergence
| Control | What it does |
|---|---|
| Focus | Narrows the accepted regions a little more on each successive pass, so late iterations only reinforce the very centre of each partial. At 0 every pass uses the same width. |
| Convergence Curve | Shape of that narrowing over the pass index. Above 1 the narrowing arrives late and suddenly; below 1 it starts immediately. |
| Width Per Pass | A flat multiplicative narrowing on every pass, on top of Focus. |
| Harmonic Snap | Hardens the edge of the mask towards a hard gate. |
Spectral Pressure
Dynamics that act on harmonic regions, not on the broadband signal. Each note-harmonic has its own envelope.
What to expect: Pressure changes the balance of the harmonic series, not the overall level - Auto Gain holds that. Loud partials (usually the fundamentals and the first few harmonics) are pulled down, so the quieter upper series comes forward. It needs notes, from MIDI, the keyboard or AUTO; with none selected there are no regions to act on. To hear it clearly: Pressure 100 %, Ratio 4:1, Ceiling -30 dB, and watch the amber gain-reduction overlay in the analyser. Older presets and sessions that state a ceiling of -6 dB keep it.
| Control | What it does |
|---|---|
| Pressure | How much of the computed gain reduction is applied. |
| Attack / Release | How quickly a region is pulled down once it exceeds the ceiling, and how quickly it recovers. |
| Ratio | Compression ratio per region. |
| Ceiling | Region level, in dBFS, above which a region starts being held back. It is the level of one partial, not of the mix: on a track peaking around -6 dBFS the loudest partials sit near -20 dBFS and the rest well below, so -20 to -40 dB is the working range. Default -30 dB (it used to be -6 dB, where Pressure almost never engaged). |
| Per-Harmonic Limit | A tighter cap on the loudest single partial in a region, so one harmonic cannot dominate the note. |
Conflict
When two selected notes' harmonic regions land on the same bin:
Max (loudest claim wins) · Sum Normalized (they reinforce) · Priority Note · Lowest Harmonic Wins · Highest Energy Wins · Manual Balance. Collision Width sets how softly the losers bleed through; Exclusive Owner gives the bin entirely to the winner.
Residual
Every pass rejects some distortion. Instead of discarding it:
| Control | What it does |
|---|---|
| Residual Amount | How much of the rejected change is folded back into its own bin. At 100% this is equivalent to All Distort at 100%. |
| To Nearest | Routes rejected energy to the nearest harmonic centre, with that bin's phase so it reinforces rather than cancels. |
| To Fundamental | Routes it to the owning note's fundamental. |
| To Drive | Rejected energy raises the drive of the next pass. Bounded, so it cannot run away. |
| Residual Mute | Discards it entirely. Overrides the others. |
Phase
Phase Preserve keeps the original phase of processed bins · Phase Lock locks each region to its peak phase · Harmonic Coherence aligns phase across the series · Stereo Mode (Linked / Independent / Mid-Side) · Stereo Link ties detection between channels.
Node EQ — on the analyser
A parametric EQ drawn straight onto the analyser, three of it. The selector at the analyser's top right chooses which one you are editing:
- MASTER (default) — the plug-in's wet output, just before MIX (and before OUTPUT GAIN's trim of the wet side). AUTO GAIN measures the wet signal as it was before MASTER, so it does not undo it; SAFETY's ceiling is applied at the very end.
- HARMONICS — only what Spectortion adds: at the DELTA point the plug-in subtracts the latency-aligned original from its signal, EQs that difference alone and adds the original back untouched. Use it to darken the distortion without touching the source, or to cut the harmonics' mud while the bass itself stays full.
- PRE — what Spectortion is fed: at INPUT, at the head of the wet path. DELTA and HARMONICS compare against the EQ'd input, so PRE's own change is not counted as something added.
All three are before MIX: at MIX 0 % you hear the input with no EQ in it, whatever the three are set to.
The panel of the selected band stays where it was placed while you turn its knobs; it moves only when you select another band or drag the node itself.
Each keeps its own bands; switching the selector only changes which you edit. The analyser stays clean until the pointer is over it; an EQ that is not flat leaves a faint curve behind, and the other two EQs show fainter still.
Editing. Double-click empty space to add a band (up to 24 per EQ). Drag a node: sideways is frequency, up and down is gain (on a cut, notch or band pass, Q). Shift while dragging is fine. The mouse wheel on a node is Q. Double-click or alt-click a node — or press Delete — to remove it; arrow keys nudge the selected one (shift: coarse). Right-click a node for its type, slope, mode, direction, bypass and delete; right-click empty space to add a particular type. Clicking a node stacked under others selects the next one.
The selected node's editor sits along the bottom of the analyser. Its knobs are the plug-in's own: double-click the value to type one (153.4 Hz, -2.37 dB, Q 7.25, -32.0 dB), shift-drag for fine, double-click the knob to reset, and right-click to MODULATE it — the ring and the node's ghost show where the modulation has it.
Types. Bell, Low Shelf, High Shelf, Low Cut and High Cut (6, 12, 18, 24, 36, 48, 72 or 96 dB/oct — Butterworth, Q sets the corner resonance), Notch, Band Pass. Q runs from 0.05 to 60. Every section is a trapezoidal state variable filter: minimum phase, no latency, stable under any movement. The curve is computed from the very same sections, so it is the filter's real response.
Modes (bell and shelves):
- Static — a fixed curve.
- Dynamic — the band's gain moves by up to RANGE (negative cuts, positive boosts) as the level in the band's own region goes past THRESHOLD — above it, or below it (DIRECTION). The full range is reached 12 dB past the threshold. ATTACK and RELEASE time the detector. Shown by an amber ring on the node, and the live curve in amber.
- Spectral — the band's region is split into twelve overlapping sub-bands, each with its own detector: only those that are past THRESHOLD and stand out from the rest of the region are pulled down, by up to AMOUNT. SELECTIVITY goes from broad adaptive reduction (0 %) to picking out single resonances (100 %). Zero latency — a filter bank, not an FFT — so there are no frame artifacts. Shown by a dotted ring.
Detection is linked across the channels (the louder one decides), so the stereo image never wanders; the result does not depend on the host's buffer size. Every band's controls are host-automatable parameters; a preset stores only the bands in use.
Master Filter
The last thing in the wet path. It passes only frequencies that are harmonically related to the notes currently selected, and attenuates everything else — turning a noisy or inharmonic source into pure harmony.
| Control | What it does |
|---|---|
| Master Filter | Blend, 0 to 100%. At 0 it is out of the circuit. At 100% with no notes selected it mutes, which is the honest reading of "only harmonic content". |
| Master Width | How wide, in cents, each harmonic passband is. |
| Master Tilt | Tilt across the series, in dB per octave. |
| Follows Max Harmonic | When on, the filter uses the same Max Harmonic as the engine. Turn it off to let the filter pass the whole series while the engine works on a subset. |
In Hybrid and Spectral Phase Align (HQ) this is an exact per-bin gain on the output spectrum. In Realtime it is a bank of cascaded resonant band-passes — strictly zero latency, roughly 20 dB of rejection rather than 55 dB, with resonator phase response. Same control, honest realisation.
Notes
Source — Manual only, MIDI only, or Hybrid · Priority — which note wins a contested region · LATCH (off by default, never changed by a preset) keeps MIDI notes after note-off · ROOT locks a root note (right-click a key to set it) · CHORD holds the whole chord until a new one arrives · CLEAR clears the selection.
LEARN listens to the incoming audio and selects the notes it hears. It uses a harmonic product spectrum, so it finds the root of a bright timbre rather than its loudest overtone, and confidence accumulates over time — a note has to be genuinely present before it is latched, and a chord builds up over a bar or two. Turn LEARN off to freeze the selection; the notes stay on the keyboard and you can edit them by hand.
Safety
Ceiling (your own output ceiling, held by SAFETY: the very last stage of the plug-in, after MIX, Mono Bass, the duck and every fade, in bypass too. It is a peak limiter, linked across channels, that looks ahead across the host's block without adding any latency: the gain for the whole block is planned before it is played, so every reduction slopes in before its peak (6 dB per ms) and the waveform is scaled, never bent. Only a peak in a block's very first samples can't be seen coming and is met at once. After a reduction the gain holds for 30 ms - longer than a cycle of the lowest bass - and recovers over 120 ms. Nothing passes it, and it does not touch the signal while the output stays under it. Nothing in the chain clips - the chain runs as hot as it likes and Auto Gain brings the level and the wet's peaks back - so this only catches what MIX's sum and Mono Bass add. The Ceiling never goes above 0 dBFS: settings over 0 dB act as 0 dB) · Stability Clamp (maximum growth over the input's peak level at any stage of the loop — a backstop for the stages that add, such as Harmonic Even) · Anti-Explosion (caps energy growth) · Transport Reset (clear all state when the host starts playing) · Reset State (do it now).
AUTO — AUTO tab
The input choosing its own harmony. Everything else in the plug-in acts on a set of notes, and until now the only ways to get that set were to play it, draw it or press LEARN. AUTO answers the same question from the audio: the spectrum is analysed, its strongest real components become pitches, and those pitches drive the same selection your keyboard drives. A track can harmonise itself.
It does not assume the signal is monophonic and it does not assume it is tonal. It works on voices, synths, chords, drums, full mixes, noise and sound design — the last three deliberately, not merely without crashing.
AUTO works the same in every latency mode. Its analysis is separate from the audio path: in Realtime it reads a frame of its own of at least 40 ms, so a kick or a bass line is heard as clearly as in Hybrid, with no latency added. It is driven once per analysis frame rather than once per host buffer, so what it chooses does not depend on your buffer size, and with RANDOM off the same audio always gives the same choices. A frame under -100 dBFS counts as silence: AUTO holds what it had through a rest instead of reading the last whisper of a tail as notes.
The analyser at the top shows all three things you need: the spectrum the detector is looking at, a marker on every peak it found with the note it became printed above it, and a bar under each marker showing how much it believes it. A detection that was found and then rejected still shows, as a short stem — you should never have to guess why a note is not being used.
It is also where you set the detection zone, and it behaves like an EQ band:
- Drag either edge to move RANGE LOW or RANGE HIGH. Everything outside them is dimmed, because it is not looked at.
- Drag inside the band to slide the whole zone up or down the spectrum, keeping its width in octaves.
- Drag the amber line across the band up or down to set THRESHOLD. It sits on the same dB scale as the trace, measured from the loudest bin in the band, so the parts of the trace that rise above it light up: those are the frequencies loud enough to be read.
- Held notes stand as coloured columns at their pitch, as tall and as bright as the weight they are handed to the mask at: solid while the note is still heard, hollow and fading while it lives on its Hold.
- Shift while dragging for fine adjustment, and double-click anything to reset it — the same gestures the knobs use.
The zone is live whether or not AUTO is switched on, so you can set up where it will listen before you turn it loose.
Under the display, AUTO SOURCE, MUSICAL and EXPERIMENTAL share one row - the controls you reach for while listening - and DETECTION spans the width below.
AUTO SOURCE
- Mode — which algorithm turns peaks into notes. Strongest takes them as it finds them and is the general answer. Harmonic prefers peaks that agree on a series, so it locks onto tonal material. Spectral takes them literally, upper partials included, and finds harmony a pitch detector would refuse to. Root + Peaks decides on a fundamental first and builds over it. Experimental prefers the peaks that do not fit a series — the inharmonic content of drums, metal and noise.
- AUTO listens to the audio and nothing else. Its notes join what you draw and play - every note you are holding stays, and AUTO fills in around them, preferring pitches your chord has not got. Note Source on the keyboard decides the drawn and played notes; the keyboard's AUTO switch decides AUTO's.
- Amount — how much say AUTO has. At 0 it has none and costs nothing.
DETECTION
- Peaks — how many detections may become notes at once. A cap, not a target.
- Sensitivity — how clearly a bump has to stand out from what is around it before it counts as a peak at all. This is about shape.
- Threshold — how far below the loudest content of the frame a peak may sit and still be considered. This is about level.
- Confidence — how much the detector has to believe a pitch before it is allowed to become harmony. The bar under each marker is exactly this number.
- Stability — how hard it is to change its mind. Low is reactive and chaotic; high smooths the evidence over most of a second and makes a note genuinely have to beat the one it would replace. This is the control that turns the effect from a flicker into something musical. It smooths what the detector is unsure of: a clear, steady note (at least half the frame's strongest, above Confidence, reading the same for ~20 ms) is believed within a few frames whatever Stability is.
- Hold — how long a picked note lasts after the plug-in stops hearing it. A note is taken the instant it crosses the threshold, keeps sounding while it is heard, and Hold longer — after a rest just as after a change — and then goes; heard again, its Hold starts over. Short (tens of ms) follows every hit and lets go at once; long lets notes pile up into chords that ring on after the playing stops. The knob is skewed so its centre is 500 ms and the short holds reactive effects use get half the travel. After a stop the next sound is decided from its own first frames (about 20-40 ms).
- Max Notes — how many picked notes may sound at once, 1 to 16. A new note that finds them all taken pushes out the oldest, at once: Max 1 with a long Hold keeps one note until the next one cuts it off; Max 16 lets notes pile up into a chord that lasts Hold after they stop. A note that has been sounding all along may only replace one that is no longer heard, so a steady chord under Max 1 holds its strongest note and does not flicker between the others.
- Range Low / Range High — the band the detector looks in.
- Tilt (formerly Focus) — biases the choice between low-order information and upper spectral content. Down finds the notes underneath a sound; up finds the harmony hiding in its timbre. Centre is flat. It changes which real peaks are chosen and never invents one.
- Spread — the minimum distance kept between accepted peaks, from nothing at zero up to a fifth at full travel, so a tight cluster cannot fill the whole list with itself. Around the default a semitone cluster is thinned to its strongest member while every ordinary chord interval still comes through.
MUSICAL
- Quantize — Off keeps the detuning it actually heard, so the mask targets a scooped vocal or a detuned synth where it really is. Chromatic throws that away and lands on the nearest equal-tempered note. Scale snaps into the key below, using the same rules the rest of the plug-in uses. Off and Chromatic are not the same setting and the difference is audible. In Scale lets nothing outside the key through at all: detections that are not in the scale are dropped rather than moved, so only the strongest in-key notes, in every octave, become harmony.
- Scale / Key — read only when Quantize is set to Scale or In Scale.
- Peak Shift — transposes the detected harmony before it reaches the selector. +12 puts the whole thing an octave up, so the plug-in works on the octave above what it can hear.
- Mirror — reflects every note about the root, so the intervals above it become the same intervals below.
- Invert — inverts the interval each note makes with the root while leaving it in its own octave, so a stack of thirds becomes a stack of sixths in the same register. Different from Mirror, which turns the whole shape over.
EXPERIMENTAL
- Chaos — controlled instability in which detections are chosen and how heavily they are weighted. It redistributes belief between peaks that are really in the signal; it cannot invent a note, so even at 100 % the harmony is made of what is there. It wanders rather than jitters. At 0 it is exactly repeatable.
- Gravity — how strongly nearby detections collapse onto the dominant one beside them. The strongest member of a group absorbs the belief of the weaker ones, so a cluster resolves into one of the pitches that was really there rather than into an average of them. At 0 every detection stands on its own.
The defaults are the detection found the most stable on clear notes: Peaks 16, Sensitivity 100 %, Threshold 0 %, Confidence 0 %, Stability 0 %, Hold 5000 ms, Range 40 Hz - 6 kHz, Tilt 50 %, Spread 0 %, Max Notes 16. Every pack preset uses them too, except the few whose AUTO is deliberately experimental (Spectral or Experimental mode, or Chaos / Random / Gravity up). Pack presets with AUTO on set Hold and Max Notes by category: long holds for pads and spaces (3-5 s, sixteen notes), 5 s and eight notes for Otherworldly's drones, 50-200 ms and a few notes for glitch, rhythmic and distortion presets so every hit re-keys the sound at once, and accumulating holds (1-3 s, twelve notes) for the generative and experimental ones. Then take Stability down for something that chases the input, or switch to Experimental and take Confidence down for something that does not.
Sidechain source and Invert — SIDECHAIN tab
Two controls at the top of the Detector panel, which now states its own input instead of leaving it implied. The panel reads left to right in the order the signal actually travels: where it listens → how it measures → how it responds.
Source
- Side Input — the side bus, as it has always been. Needs a track routed to it in your host.
- This Track — the plug-in's own input, so it reacts to itself with no routing at all. Every destination becomes self-reactive: drive that opens on the transients, pressure that follows the part, chaos that only appears when something is playing.
- Auto — the default. Takes the side input while something is really arriving on it and this track when nothing is. A preset then behaves sensibly whether or not you have wired anything up, which is the commonest reason this section looks broken. The side bus has to go quiet for half a second before it gives up on it, so a gap between kicks cannot flip the source mid-phrase; one sample of real signal takes it straight back.
The glyph beside the control shows which routing is live — keyed off this track the line taps the main path, keyed off the bus it arrives from outside — and the status line at the top of the page names whichever source is actually in force, which matters under Auto because the setting alone does not tell you.
This Track is a key and never a path. What the detector hears is the input exactly as it arrived — before the engine, before the FX chain, before FX Iterate's loop — so nothing the plug-in produced can reach the thing deciding how the plug-in behaves. It cannot run away.
It feeds the envelope follower and the two external detector banks. It deliberately does not touch the mask key, which keeps its own Internal / Sidechain choice at the foot of the page: how loud something is and which notes it is playing are two different questions, and one control quietly answering both is how a control surface stops being trustworthy.
Invert
Beside Curve, because both are the last thing done to the envelope before anything reads it. The control signal becomes one minus the envelope, so the effect opens in the gaps instead of closing in them.
This is not the same as turning a destination knob negative, which is why both exist:
- a negative amount flips which direction a parameter travels — at rest it is untouched, and it moves the other way as the envelope opens;
- Invert flips its rest state — at rest it is moved as far as its amount allows, and it returns to where you set it as the envelope opens.
You need both to build "ducks under the kick" and "only audible in the gaps" out of the same detector. The practical consequence: with Invert on, a silent input drives every destination fully, so the section stops being inert on silence.
Arpeggiator — ARP tab
The arpeggiator plays nothing. It steps the note selection, so the harmonic window the distortion works inside walks the chord while the audio coming in carries on. Everything below follows from that.
| Control | What it does |
|---|---|
| Mode / Rate / Sync / Free Rate | The pattern and its clock, host-synced or free-running. |
| Octaves / Random | How many octaves the pattern climbs before repeating, and the chance a step leaves the pattern — drawn from a hash of the step index, so the same bar deviates the same way every time it plays. |
| Gate | How much of each step the window is held open for. The remainder is an empty selection, so the mask closes and the engine targets nothing. |
| Mix | How far the selection is toward the arpeggio. At 0 the chord is heard as played; at 100 only the note the pattern is on carries weight; between them that note stays at full weight while the rest of the chord recedes behind it. |
| Glide | The one an arpeggiator that plays notes cannot have. See below. |
| Ratchet / Chance | How many times the window closes and reopens inside one step, and the chance a given step does it. |
GLIDE is the reason to be on this page. A normal arpeggiator has to retrigger to change pitch — between two steps there is either a new voice or a portamento on one voice. Nothing is played here, so there is no voice to retrigger. Given a pitch offset instead, the whole selected series — fundamental, second, seventh, thirtieth — slides together over a source that is already sounding and never changed pitch, and lands in tune because the grid it is sliding onto is the grid the next step wants.
What you hear is a formant sweep with a harmonic shape: the resonance of a chord moving continuously through the material rather than being switched between positions. The control is the share of each step spent sliding — small values are a fast portamento at the top of every step, 100 % never stops moving.
Three things to try:
- Glide 100 %, a wide chord, Gate 100 %. The window never stops moving and never closes: one continuous sweep that keeps landing on chord tones.
- Glide 25 %, Ratchet 3. Each step snaps into place, then stutters — all filter, no attack, because there is nothing being struck.
- Glide up, Arp Mix around 40 %. The chord stays present underneath while one moving resonance travels through it.
Spectral Interpolation — EXPERIMENTAL tab
The engine turns one spectrum into another, so every frequency has two states: the one it arrived in and the one the engine put it in. This stage decides, per bin, how far between the two the output sits.
It is not another Mix, and the difference is arithmetic rather than taste. The transform is linear, so a crossfade of the two spectra is the same thing as a crossfade of the two signals: the same partial arrives twice, at two amplitudes and two phases, and where the phases disagree they cancel. That comb is what a parallel blend of any spectral processor sounds like, and it is why so many of them are only usable at the ends of the control. Here each bin's magnitude and phase are interpolated instead — magnitude in decibels, phase along the shorter of the two arcs — so there is exactly one partial in each bin at every setting and there is nothing to cancel against. Halfway really is half processed.
It is on the EXPERIMENTAL tab rather than in the top bar because a single number would be a Mix by another name. Every control here is a statement about frequency, and the average of a picture is not a control.
| Control | What it does |
|---|---|
| Back | How far every frequency in the band is pulled back toward the state it arrived in. 0 % is the engine's output — the stage is inert at its own zero, like every other stage on this page. 100 % is the spectrum as it was analysed. |
| Tilt | Slopes Back across the band, on a log-frequency scale. Negative pulls the bottom of the band further back than the top; positive the reverse. This is the control that lets a distortion come on over pitch — clean fundamentals, fully processed upper partials, and a continuous slope between them instead of a crossover. |
| Partials | How differently the notes the harmonic mask selected are treated from everything between them. Positive holds the partials forward, fully distorted, while the space between them is pulled back toward what came in — the harmonic work kept and the noise it made in the gaps lost. Negative returns the series to what it was and leaves only the residue processed. |
| Low / High | The band. Outside it nothing is pulled back and the engine's own output is what leaves. Each bound fades in over the half octave around it, because a hard edge in an interpolation amount is a hard edge in the spectrum and a hard edge in the spectrum rings. At the ends of their travel the bounds mean no bound, so a band opened all the way really does cover everything from DC to Nyquist. Dragging Low above High gives you a narrow band, not silence. |
Three things to try:
- Partials at +100 %, Back at 100 %. The series stays distorted; everything between the partials returns to what came in. This is the setting that keeps the harmonic work and loses the hash it made in the gaps.
- Tilt at −100 %, Back at 60 %. The bottom of the band comes back clean and the top stays fully driven, with a slope rather than a crossover between them.
- Low and High close together. The whole stage becomes a statement about one narrow region — one formant, one partial, the top octave — which is usually where it is most useful.
With the stage switched off, or on with Back, Tilt and Partials all at zero, the pass is skipped outright and the output is bit-identical to the plug-in without it. No effect in Realtime Zero, which has no transform and therefore no bin to interpolate inside.
6. Post FX
A chain of five effects, on its own tab, independent of the spectral engine and off by default. With the POST FX switch off the plug-in behaves exactly as it did before the chain existed.
The chain strip
The five blocks at the top of the tab are the chain, in order. Drag a block to move it. The bar underneath each one shows where that effect does its work: filled from the left for the part that happens before the spectral engine, from the right for the part that happens after.
Each enabled effect runs once per stage. There is no repeat control: running a finished block back through the same reverb tail and the same LFO phase makes it thicker and less defined, not longer. Reach for Decay, Size, Depth and Feedback instead — they are the controls that actually make an effect bigger.
The three controls every effect shares
Once you have learned one panel you have learned all five. They open with the same controls, in the same place.
ON puts the effect in or out of the chain.
DELTA is one knob across the whole dry / wet / difference axis:
0.00 ───────────────── 0.50 ───────────────── 1.00
raw wet delta
At 0 you hear the effect's input untouched. At 0.5 you hear it fully
wet. At 1 you hear wet - raw: only what the effect added,
and nothing else. The sweep is continuous, so 0.25 is half wet and 0.75
is half way into the difference.
Delta is the fastest way to set anything up. Put the gate's Delta at 1, set the threshold until you are only throwing away noise, then turn it back to 0.5.
PRE / POST decides where the effect sits relative to the spectral engine.
| Value | What happens |
|---|---|
| 0.00 | the whole effect runs before the engine |
| 0.50 | half of it runs before, half after |
| 1.00 | the whole effect runs after the engine |
At 0.5 this is a real split, not a crossfade between two results: the effect runs at half strength on the way in and again at half strength on the way out, and each stage applies its own DELTA blend against the signal that reaches it. The two stages keep separate state, so a reverb split across the engine is genuinely two rooms — one whose tail gets distorted, one that reverberates the distortion.
That is worth trying on the reverb before anything else. It is the one thing this chain does that a fixed insert order cannot.
Unison
Up to eight detuned voices, spread symmetrically about the input pitch. These are real pitch shifts, so a voice at +7 cents stays at +7 cents — it thickens rather than wobbles.
Voices how many. Even counts leave nothing at the original pitch; odd counts keep one voice centred. Detune how far the outermost voices sit, in cents: a few thickens, thirty is an ensemble. Spread pans the stack. Delay gives each successive voice a small offset, which makes the stack sound like several performances rather than one processed signal. Drift adds slow independent wander so it never locks into a static chorus.
Reverb
Size is the physical size of the space. It re-tunes the whole delay network — density, early character — without changing how long the tail lasts. Decay is the RT60 and is independent of Size, so you can have a small bright room with an impossibly long tail.
Damping is high-frequency loss on each pass around the network. It is what separates a room from a delay line: the tail darkens as it decays instead of ringing on with the same spectrum.
Pre-Delay keeps the source in front of the reverb. Width, Diffusion, Low Cut and High Cut shape the tail; low cut in particular is usually what stops a wet setting turning into mud.
Size and Pre-Delay can be moved while it plays - by hand, by automation or by a macro - without clicks: a change crosses over from the old length to the new one in 30 ms and the loop gains glide to theirs. Held still, the reverb is exactly what it was.
Delay
Time (free, in ms) or Sync with a note value, Feedback, Damping (a gentle darkening of each repeat), Width, Ping-Pong and Harmonic Only, which sends only the notes the mask selected into the delay. Low Cut and High Cut are a steeper high-pass and low-pass inside the loop: the first echo is cut and each repeat a little more, so the echoes thin out of the bass and darken like tape. At 20 Hz and 20 kHz - their defaults - they are off, and a delay that leaves them there sounds exactly as before.
EQ
The same seven-point curve as the output EQ, available anywhere in the chain. Drag a handle, or the knobs. Double-click the background to flatten it.
With DELTA at 1 you hear only the difference the curve made — a quick way to check you moved what you meant to move.
Phaser
Stages is the number of notches, not an abstract amount. Rate and Depth are the sweep; at Depth 0 the notches sit still and it becomes a fixed comb. Feedback sharpens the notches into resonant peaks, and going negative inverts the comb and changes its character entirely. Centre is where the sweep sits — put it where the material lives, since notches outside the signal do nothing. Spread offsets the two channels' sweeps symmetrically.
At DELTA 1 you get the phaser's complement: the notched-out material on its own, which is normally the half you never hear.
Spectral Gate
A multiband gate at 8, 16 or 32 bands. Its point is that a quiet band can close while its neighbour stays open, so it cleans up noise without swallowing the note.
Threshold is the level a band has to reach to stay open, Ratio is how hard it acts on bands below it, and Range is the most it will ever attenuate one. Range is a floor, not a target: -12 dB ducks the noise, -60 dB removes it.
Attack, Release and Hold are the per-band timing. Hold is the control that stops the gate chattering on material sitting right at the threshold — reach for it before you lengthen the release.
Low Bound and High Bound set where the bank starts and ends. Everything outside is handled by the outermost bands, so a fully closed gate really does go quiet rather than leaking the top and bottom of the spectrum.
Tilt and the threshold curve move the threshold across frequency. The curve does not filter anything — up is stricter, down is more forgiving. Tilt the top end down and the gate goes after hiss while leaving the body of the note alone.
Distortion
A time-domain waveshaper - the engine's six curves, with Drive, Bias, Symmetry and Tone - on whatever reaches its slot. Iterations runs the curve again on its own output, up to 16 times, each pass level-matched back to what came in, so the shape of the wave changes and the level does not.
It runs at 4x the sample rate between minimum-phase half-band filters, with anti-aliased curves (each sample is the curve's average between it and the last one, not its value at a point). What the curve makes above the audio band is filtered out instead of folding back down as inharmonic tones: at Drive 20 on a 3.5 kHz sine the aliases sit more than 40 dB under the harmonics, where they used to be 16 dB under. The level match follows the signal over about 15 ms and glides between blocks, so it does not depend on the host's buffer size.
The filters add no latency, but they delay the effect a few samples in phase. The dry side of its Mix goes through the same filters whenever some of the effect is mixed in, so a half Mix is a blend and not a comb filter; at Mix 0 the input is passed on untouched. It costs more than the other effects: roughly 1.5 % of a core per instance at one pass, 4 % at four and 14 % at sixteen (stereo, 48 kHz).
Latency
None. Every effect in this chain is zero latency by construction, so the order and the placement can both be automated without the plug-in's reported latency changing.
Modulation
The MODULATION tab (next to ROUTING, at the end of the tab bar) holds fifteen modulators and the list of everything they are assigned to. Nothing on it is heard until something is assigned: with no assignments the plug-in is, sample for sample, the plug-in without this tab.
Assigning. Right-click any knob - or an EQ band, a step of the step sequencer, an edge of the AUTO range - and choose Assign Modulation and a source. The assignment starts at +25 %. A thin ring appears just outside the knob: the faint arc is how far modulation can take the parameter, the bright arc and bead are where it is right now, and the knob itself keeps showing the value you set. Drag the ring to change the depth (Shift for fine steps); drag the knob to change the value underneath. Modulation never writes to the parameter, so host automation keeps controlling the value you set.
The same menu lists every assignment on that control, each with Edit Assignment, Change Source, Modulate Depth, Invert, Bypass, Reset Amount and Remove Assignment, and Remove All Modulation clears the control. Switches, menus and machine settings (latency, quality, tuning, Ceiling, Stability Clamp, Input Gain) cannot be modulated by these sources - a macro can drive them (below).
Sources.
| Source | What it is |
|---|---|
| LFO 1-4 | Sine, triangle, saw up/down, square, pulse, smooth random, sample & hold, or a continuous Morph through sine-triangle-saw-square. Free rate or tempo sync (8 bars to 1/64, dotted and triplet), phase, symmetry, pulse width, depth, offset, smoothing, unipolar/bipolar. Retrigger: Free, Transport (locked to the song position when synced), MIDI Note, Audio Transient. |
| ENV 1-4 | Follower (level of this track or the side input), Transient (attacks only) or ADSR (triggered by MIDI notes, by the input crossing Threshold, or by the transport). Attack, decay, sustain, release, sensitivity, threshold, curve, smoothing. |
| Random 1-2 | Sample & hold, smooth, drift or stepped values, free or synced, with smoothing, range, bias, probability and a seed. The same seed gives the same values at the same song position (or from the same reset) every time. |
| Chaos | A Lorenz attractor: continuous, bounded, repeatable from its seed. |
| Step | A 16-step sequencer: step count, glide, direction, phase, probability, free or synced. Draw the steps on the page. |
| Sidechain | In SC Page mode, exactly the envelope the SIDECHAIN tab computes. In Detector mode, its own follower on the side input, which works with the SIDECHAIN section switched off. |
| Self | A follower on this track's input as it arrives. |
| Spectral | Energy, band energy, brightness, loudest partial or spectral flux, read from the engine's own analysis - no extra FFT. |
The matrix lists every assignment: on/off, source, destination, amount (drag; Shift for fine; double-click for zero) and, behind the arrow, polarity, invert, curve and Modulate Depth. An assignment's own depth is a destination: an envelope can decide how far an LFO moves a control. Routings that would form a loop - a source ending up modulating itself, however indirectly - are refused, and the menu greys those sources out.
Assignments are saved with the session, in A/B and in user presets, and undo like any other edit. Presets from before this version load with no modulation.
Rate. Modulation is evaluated once per host block - the rate every parameter is read at - with the envelopes and followers running per sample inside it. Mix and Output Gain are ramped across the block while modulated.
Macros
Eight knobs at the bottom left of the main page, in two rows of four, each with its own colour and a name above it. A macro moves every control assigned to it at once, each by its own amount and direction - as many controls as you like, and any control of the sound: switches and menus too (a switch flips, a menu steps), the NODE EQ bands, the FX, the ROUTING page's switches and levels, the modulators' own settings and the depth of another assignment. Only the machine settings stay out of reach: latency mode, quality, BYPASS, Limit to 0 dB and Randomise's amount.
- 0 % is the preset exactly as it was saved. Every assignment is added on top of the value you set, and a macro never writes to a control - the knob keeps showing your value and the ring shows where the macro has taken it, drawn in the macro's colour.
- Assign. Right-click any control and choose Assign to Macro and a macro, or drag a macro's name onto the control. A new assignment starts by moving the control half its range towards the farther end (a switch or a menu: all the way). Change the amount in the macro's list on the MODULATION page or in the matrix.
- Rename. Double-click the name above a macro and type; Enter keeps it, Escape leaves it as it was. An empty name goes back to MACRO n.
- See what it does. Every macro has a tile on the MODULATION page. Its editor holds the macro's knob and the list of everything it drives, each with its amount - drag it, or remove it with the cross. Right-click a macro's name for the same list and Clear All Assignments.
- A macro is an ordinary parameter: it automates, it can itself be modulated (an LFO on a macro moves everything the macro moves), and it is stored with the session, A/B and every preset, with its name and its assignments. RANDOMISE leaves the macros alone.
- Init has no macros. They belong to a preset: every preset in the Spectortion pack brings eight of its own, named for what they do to it.
The pack's eight. Every pack preset's macros are made for what it is: the category decides the kind of job and the preset's name pulls them towards itself. A bass gets jobs like GROWL, SUB, FUZZ, FILTER and WOBBLE (an idle LFO set loose on a low-pass as the macro turns) and never a reverb; a compressor gets SQUEEZE, ATTACK, RELEASE and AIR - never DESTROY; a distortion gets DESTROY; an "808" gets BOOM, a "Dub" bass a DUB echo with the bass cut out of the repeats, a "Cathedral" names its space CATHEDRAL. How far they go follows the category too: a mix tool's macros stay mix moves, while the generative and experimental ones switch on the arpeggiator and the harmonic sequencer, let Auto Harmony choose the chords, and set idle random sources loose on the series. Such an idle modulator is assigned at 0 %, so it is silent until its macro opens it. A macro that would push a control past where it is safe to run stops short: Iterations at 10, a delay's feedback at 80 %, a reverb's decay at 12 s. The Sigils name theirs in runes, the Spectral Alchemy in the planetary metals, and the three MENTAL presets have eight each written for them alone.
Routing
The ROUTING tab (the last tab) is the order the plug-in's modules run in, left to right. A new instance, and every session saved before this page, runs the classic chain:
INPUT -> FX PRE -> SPECTORTION -> FX POST -> DELTA -> OUTPUT
| Module | What it is |
|---|---|
| INPUT | Where the dry signal is taken: what MIX crossfades back to, what DELTA subtracts and what Transient Preserve listens to. Anything before INPUT is part of the dry. |
| FX PRE | The FX page's effects at their share before the engine (Placement toward PRE). |
| SPECTORTION | The engine. |
| FX POST | The FX page's effects at their share after the engine, with FX Iterate's loop around them. |
| DELTA | Takes the original out of what reaches it, by the top bar's Delta, with Transient Preserve. Anything after it processes only what the modules before it added. |
| OUTPUT | MASTER EQ and Auto Gain on the wet side, Output Gain's trim and MIX against the dry INPUT took, then MONO BASS, the sidechain duck and SAFETY, the output's peak limit. Always last - MIX is the final word on the whole routing. |
| SPECTORTION 2, 3 | Added modules: the engine again, with the same settings and its own state, on whatever reaches it. Input Gain is not applied again. |
| FX 2, 3 | Added modules: the whole FX chain again - every enabled effect at its own mix, whatever its Placement - with its own state. |
| DELTA 2, 3 | Added modules: take the original out again, at their own AMOUNT (0-100 %), wherever they sit. |
Moving. Drag a card; the gap it would land in lights up, or turns red with the reason when the move is not allowed. Shift+Left and Shift+Right move the selected card, and the module panel has MOVE EARLIER and MOVE LATER. Two rules: OUTPUT always runs last, and INPUT must come before every DELTA. Anything else is allowed - effects before the input, the blend in the middle, every effect into the engine.
Adding. ADD MODULE, or right-click between two cards. SPECTORTION 2 and 3 add their latency to the plug-in's. Remove an added module from its card's menu, the module panel or the Delete key; its MIX and LEVEL are kept for when it comes back.
Switching off. Every module but INPUT and OUTPUT has an ON switch - the dot on its card, or ON in the module panel - and it fades over 10 ms, so it can be automated. An engine switched off hands on its input one reported latency later, so nothing after it moves in time. While SPECTORTION itself is off its analysis pauses, so AUTO and LEARN hold the notes they last found.
AMOUNT on DELTA 2 and 3 is how much of the original each takes out; the core DELTA uses the top bar's Delta.
MONO BASS is in OUTPUT's module panel, where the other modules have ON, with Mono below beside it (20 Hz to 2 kHz, default 100 Hz). It folds the finished output to mono below that frequency and leaves the stereo image above it alone: the side signal is high-passed there (Linkwitz-Riley, 24 dB/oct) and the mid - the kick and the bass themselves - is not filtered at all, so nothing changes in phase or level and no latency is added. Switching it is a 20 ms fade. When it is on, the OUTPUT card says so. Unlike the routing it is part of the sound, so presets store it: every preset in the pack's Bass category turns it on at 100 Hz.
MIX and LEVEL on an added module blend it against what reached it (aligned to its latency for an engine) and set its own output level. Both can be automated and modulated.
Templates. Classic; FX before input (the pre effects become part of the dry, so MIX and DELTA leave them in); Effects on the delta (DELTA before FX POST - turn Delta up and the post effects process only what Spectortion added); Spectortion twice; FX twice; Effects into the engine (FX POST ahead of SPECTORTION); Delta cascade (DELTA hands SPECTORTION 2 only what the first engine added, DELTA 2 takes the original out again before the effects).
DELTA and MIX are separate. A DELTA is a point in the chain: at its position the original - the signal INPUT took, aligned to exactly that point - is subtracted from whatever reaches it, by its amount, and the difference goes on through everything after it. So a delta can be taken more than once: the engine's difference fed to a second engine, that result's difference fed to the effects. MIX is not in the chain at all: it lives in OUTPUT, and blends the finished result of the whole routing against the dry. Input Gain is cancelled out of each subtraction only when the engine sits between INPUT and that DELTA.
Latency. The plug-in reports one engine latency for every engine in the routing; each DELTA is aligned by one engine latency for every engine between INPUT and it, and MIX by every engine after INPUT - so the host's compensation, MIX and every DELTA are exact in every routing and every Latency Mode.
Changes are click-free. A changed order is faded out, swapped in with every module's state cleared - a fresh start, the same as a transport reset - and faded back in. Switches, MIX and LEVEL ramp without clearing anything.
The routing is saved with the session and in A/B, and undoes like any other edit. Presets carry it: the order, the module switches and the added modules' MIX and LEVEL. A preset that carries a routing shows the routing rune after its name - in the top bar and in the browser - and the same rune sits at the head of this page, lit while the routing is doing anything (a changed order, or a module of the classic chain switched off). A preset without a routing puts the classic chain back. LOCK ORDER (here, or in the top bar's FREE menu) keeps the current order through preset loads; the switches and levels lock one by one from their own right-click. Loading a preset that adds an engine changes the plug-in's latency, the same as adding it by hand.
7. Latency modes
| Mode | Reported latency at 1x oversampling | Processing |
|---|---|---|
| Realtime | 0 samples | Causal time-domain distortion with harmonic resonators. Band count and iteration budget depend on Engine. |
| Hybrid | fftSize (1024 / 2048 / 4096 samples) | The causal core followed by the frame-based spectral stages. |
| Spectral Phase Align (HQ) | fftSize (2048 / 4096 / 8192 samples) | Longer-frame spectral processing with selective, input-referenced phase alignment. |
Oversampling adds the oversampling latency the sample rate needs (56 samples at 44.1 kHz, 32 at 48 kHz, about 10 at 88.2 / 96 kHz) in every mode. The existing stored mode values and parameter IDs are unchanged; projects saved with the old HQ label still load.
HQ is not a globally linear-phase nonlinear processor. Alignment depends on how much of each bin was present in the input, and phase controls may modify its reference. Partial alignment now preserves the bin magnitude instead of mixing opposite complex vectors and accidentally cancelling it. Other spectral stages can still change magnitude and transient shape.
The modes share a causal distortion core but do not promise identical attacks, phases, spectra or amplitudes. Transient Preserve blends toward the causal core around detected attacks; it is not a promise of perfect transient identity.
AUTO requires a finite observation window. Its shared input analysis is clocked independently of host-buffer boundaries and stays active when the primary effect module is off. Stereo channel powers are combined without phase cancellation. A decision applies to subsequent input samples, not retroactively to sound already processed. No new lookahead or hidden latency is introduced. Ordinary MIDI events are dispatched at their sample offsets; frame-based processing retains its inherent analysis resolution.
RESET ON PLAY remains a stopped-to-playing reset, not an unconditional reset on seeks or loop wraps. DSP and spectral CHAOS state restart, genuinely held MIDI keys remain held, and released latch history clears. The new take does not inherit the previous take's de-click tail or an automatic whole-output fade-in. Intentional live parameter transitions keep their existing smoothing.
8. Presets
One preset is compiled into the plug-in: Init, a neutral starting point - one gentle pass, targets following the keyboard. Every other sound is in the Spectortion pack (below), including the seventeen that used to be the factory bank: Clean Harmonics Classic, Subtle Harmonic Warmth, Bass Reinforce, Iterative Shine, Harmonic Glass, Master Filter Pad, Resonant Lattice, Chord Melt, Focused Crusher Classic, Metallic Bloom, Full Spectrum Rage Classic, Spectral Pressure, Top End Only, Added Layer, FX Split Room, FX Gate Clean and FX Ensemble Sweep, each in the category that fits it, with exactly the settings they had.
KEEP NOTES, in the top bar beside the browser, decides whether a preset may replace the notes you are holding. On — the default — a preset changes every sound control and leaves your selection and your root exactly where they are, so you can audition the whole bank against a chord of your own. Off, each preset brings its own notes with it: every pack preset but the mix tools (Compressors, Pure Distortion) carries a chord, drone or cluster voiced for what it is - a ninth chord for a pad, a low root for a bass, a Phrygian cluster for a glitch - in its own key, or in the key its scale lock or Auto Harmony names.
It is session state and is never written into a preset file: a preset able to switch it off would be a preset able to walk straight past it, which is the one thing it exists to prevent.
A preset stores everything: every parameter - the sound, DELTA (the top bar's and every added DELTA module's amount), the ROUTING, Latency Mode, Engine, A4 Tuning, Tuning Scale, Limit to 0 dB, Transport Reset and the mask's key source - plus the modulation and the note selection. Only BYPASS, the host's switch, stays out.
Locks decide what a load keeps. Right-click any control and choose Lock on preset load: a small padlock marks it, and from then on every preset load leaves it where it is. The top bar's FREE chip, beside KEEP NOTES, is lit while anything is locked; click it for the list - untick one to free it, or Free all - and for Lock routing order. If you always work in one Latency Mode or tuning, lock it once. Locks are session state: saved with the project, never written into a preset.
The browser. Click the preset name in the top bar and every preset opens as a tree: FACTORY with its groups, then each preset pack, then USER. The top-level groups open with their categories showing, and the path to the preset you are on is open with it selected. Click a preset to load it - the browser stays open, and the arrow keys walk the list, loading as they go, so a whole category can be auditioned without reaching for the mouse. Return, a double-click, Escape or a click outside closes it; what you opened and closed is remembered for the session. Type anywhere in the browser to search by name, category and description; the description of the selected preset is shown under the tree. Right-click a user preset to rename, delete or show it in its folder.
Favorites. Click the star at the right of any preset
in the browser (or right-click it, Add to Favorites) and it is
listed again under FAVORITES, the first group in the
tree. It is the same preset, not a copy: loading, editing and re-saving
it work from either place, and clicking the filled star again takes it
off the list. The stars are kept in favorites.txt in the
user preset folder, so every instance and every project shares them; a
renamed preset keeps its star and a deleted one loses it.
User presets are plain .spreset XML
files in the folder listed in §1, so they are easy to back up, share or
edit by hand. Every sub-folder is a category, as deep
as it goes:
Presets/Spectortion/Compressors/Bus Glue 2 to 1.spreset is
listed under SPECTORTION > Compressors. Files saved straight into the
folder are listed under USER. Saving follows the preset you are on: with
a pack preset loaded, SAVE writes into that preset's category, and
saving it under its own name overwrites it in place and keeps its
description.
IMPORT FOLDER... in the browser copies a folder of
presets - a pack - into the user folder, keeping its sub-folders; a
folder called Presets is merged into the user folder
itself. A preset that is already there is never overwritten, so
importing a pack again cannot undo edits you made to it. OPEN
FOLDER shows the user folder.
The Spectortion pack
Resources/Presets/Spectortion is a pack of 459 presets
in twenty-two categories - Harmonizers, Harmonic Worlds, Pads &
Atmospheres, Distortions, Pure Distortion, Saturation & Exciters,
Compressors, Bass, Drums, Multi-FX, Spaces, Rhythmic, Glitch &
Fracture, Generative, Generative Machines, Experimental, Spectral
Alchemy, Otherworldly, Dynamic, Self-Keyed, Sigils and Mental. Import
the Spectortion folder with IMPORT FOLDER... (or copy it
into the user folder). Every preset says in its description what it does
and where its numbers come from:
- Harmonic presets turn AUTO on in Auto + MIDI, so they work with no notes selected and still keep any you hold; detection stops at 1.5 kHz, the range of played and sung fundamentals.
- Intervals are just ratios - 3/2, 5/4, 7/4 - with their distance from equal temperament; harmonic widths are derived from the detuning they must cover (the 7th harmonic sits 31.2 ct from a tempered minor seventh).
- The FX distortions are set by THD: the drive at which a sine at a stated level reaches 1, 3, 10 or 30 % through that exact curve, bias solved for a chosen 2nd/3rd harmonic balance, folds counted.
- Compressor ratios, knees and time constants are derived (an attack of one or two cycles of the lowest frequency it must not distort, releases in note values at 120 BPM); each threshold is solved so four reference sources lose a stated median amount, and the makeup is that measured loss. Transient Preserve is off in these, since there is no transform for it to repair.
- Reverbs come from Sabine's RT60 = 0.161 V / (S a) for a stated room, delay feedback from fb = 10^(-3 t / RT60).
- Generative presets drive the modulation matrix from Bjorklund's Euclidean rhythms, the logistic map, golden-ratio and prime-period LFOs, Fibonacci, Thue-Morse and van der Corput sequences; the Generative Machines add rule 30, the Collatz sequence, the digits of pi, the Weyl sequence of the golden ratio, the Fibonacci word, the primes, the inner planets' orbital periods and the logistic map's bifurcation.
- Pure Distortion is for when you want exactly what you asked for: THD solved through the curve at a stated level, the engine transparent, nothing modulated - or the engine adding one chosen harmonic and nothing between.
- Self-Keyed presets set the SIDECHAIN page's source to This Track: the plug-in's own input moves the process, with nothing to route in the host.
- Sigils are named only in Elder Futhark runes and signs - Sowilo the sun, Kenaz the torch, Dagaz the dawn - and each description says what it is. They need a font with those glyphs, which Windows 10 and later have.
- Every Bass preset turns MONO BASS on at 100 Hz (OUTPUT module), so the low end arrives mono-compatible.
- Every preset has its eight macros (see Macros), each named for what it does to that preset and assigned to three to a dozen controls.
- Mental is three presets that use the whole machine at once - every page, every modulator, the ROUTING page's extra modules and all three NODE EQ stages - with eight macros written by hand for each: Synapse Storm, Cortex Melt and Hypnagogia.
- Every preset states every parameter. The Mental presets and some of the user-made ones carry a routing of their own (and the rune); the rest run the classic chain. Auto Gain is at 100 % only in the experimental categories and the heavily driven presets (Drive 20 and up); every other preset has it at 0 % and plays at the level it makes. Oversampling, LATCH and CHORD HOLD are the player's settings: a preset neither stores nor changes them.
Every preset in the pack was rendered on four reference signals and
checked for finite output, level, noise floor after the input stops, and
CPU. The generator is in Tools/PresetPack; see its README
to change a formula and regenerate.
Unlike a factory preset, a user preset stores every parameter explicitly rather than only what differs from the defaults — so one you saved will keep sounding the way you saved it even if a future version changes what a control starts at.
9. Recipes
Find the sound fast. Output → Delta, Drive up, Iterations 4. You are now hearing only the added material. Adjust Harmonic Width and Focus until the addition is what you want, then switch to Normal and set Dry/Wet.
Harmonic exciter. Drive 4, Iterations 1.5, Width 35 ct, Max Harmonic 24, Tilt −6 dB/oct, Dry at unity, Wet around −9 dB.
Turn noise into harmony. Master Filter 100%, Width 45 ct, All Distort 60%, Drive 10. Feed it noise, cymbals or a room recording and play chords into it.
Distortion above the mix only. EQ Mode → Pre, pull bands 1–3 down hard, push 6 and 7 up. The engine now only ever sees the top two octaves.
Bass weight without mud. Min Harmonic 1, Max 6, Width 55 ct, Tilt −8, EQ Post with the top three bands pulled down, Master Filter around 50%.
Ringing metallic lattice. Width 12 ct, Max Harmonic 64, Density 55%, Iterations 12, Focus 60%, Influence 85%, Phase Lock 40%.
10. CPU
Cost is dominated by the distortion loop: one resonator per selected partial per iteration, per sample, up to the Engine's budget. Halving Iterations halves the cost; Oversampling multiplies it by its factor. Hybrid and Spectral Phase Align (HQ) add two or three transforms per hop for the spectral stage, and one more pass of the shaper per frame when residual routing or an Experimental spectral stage is on. Engine changes the budget, the FFT size and the analysis resolution.
The Master Filter is nearly free in Hybrid and Spectral Phase Align (HQ) (it is a per-bin multiply on a transform that already exists) and noticeably more expensive in Realtime, where it is a bank of cascaded biquads.
Engine: Low uses the smallest frame, where the un-windowing correction inside the loop has the least room to work, so it retains more hop-rate residual (about −41 dB versus −67 dB at Normal). Low is the cheapest, lowest-latency mode; use Normal or High on exposed tonal material.
11. Specifications
- VST3, and Audio Unit on macOS. 64-bit only.
- Sample rates 44.1 kHz to 192 kHz; mono and stereo.
- Internal processing is 32-bit float; double-precision hosts are converted.
- No allocation, locks, or file access on the audio thread. Engine and latency mode can be changed while audio is running without a glitch, because every transform size is preallocated.
- Same input, same MIDI, same settings, same output — always. Nothing in the DSP is random, and the result does not depend on host block size.
- Harmonic Width is clamped to roughly 1.5 analysis bins. At low frequencies a few cents is far narrower than one FFT bin, and a region narrower than the bin grid would claim nothing at all. Resolution down there is set by the FFT size, not by the knob.
Copyright © 2026. See LICENSE for the holder and
terms.