VINAIstereo Manual
The reference stereo widener: a delayed copy with a left polarity flip, summed against the dry. Three controls, mono-safe by construction, watched over by a lab-grade vectorscope with phase and balance bars, and level meters for L, R, MID and SIDE. v1.0.0 · VST3 · AU.
01Overview
VINAIstereo is the widener producers build by hand from a delay and a utility, engineered as one instrument. A copy of your signal is delayed by TIME (the same time on both channels), its left side is polarity-flipped, and the result is summed against the dry. WIDTH sets how much of it you hear; the dry is the centre you keep, and it never moves.
The flip is what makes it safe: on a mono source the two wet halves are exact opposites, so the mono fold-down cancels the wet and returns the dry alone. Mono-safe is a property of the math, not a promise. On material that is already stereo a side residue remains, and that is exactly what the PHASE bar shows you. The delay is the effect, so latency is zero.
02The interface

- Vectorscope: the last 38 ms of audio drawn on a diamond graticule, dry spine in lava under the output beam in core blue. The beam has real CRT physics: where the trace slows down the phosphor glows, where it sweeps it dims. Dashed rings mark −6 and −12 dB, and the two edges of a channel light in lava when it reaches full scale.
- Readouts on the glass: WIDTH and BAL on the left, PEAK L and PEAK R on the right. WIDTH reads on the same scale as the knob: on a mono source with SPLIT off it shows exactly the knob's number, and with SPLIT engaged it shows how much was really widened. A PEAK turns lava when its channel reaches 0 dBFS.
- PHASE and BALANCE bars: two centre-zero bars in the bottom corners of the glass. PHASE is the correlation of the output from −1 to +1, with its value beside the label: blue toward mono-compatible, lava to red toward anti-phase. Until audio arrives it shows no reading instead of a false +1. BALANCE leans toward the louder channel.
- LEVELS strip: four columns, L, R, MID and SIDE, on one scale from −48 to +6 dBFS. The body is the RMS, the fainter tip reaches the peak, and segments turn red above 0 dBFS. Below them, PEAK holds the higher of the two channel peaks and S/M gives the side-to-mid ratio in dB. If MID drops while you open WIDTH, you are cancelling, not widening.
- Knob card: WIDTH, TIME and SPLIT, with writable value boxes (double-click to type) and fixed-step mouse wheel.
03Knobs & buttons
The three knobs
Width
Level of the widened layer, 0–100% in 1% steps, 20% by default, and this is your perceived width. The dry never moves: it stays at unity, so the centre you keep is never touched, and at 0% the output is the input
Time
1–100 ms of delay in whole milliseconds, identical on both channels. Short times read as tight width, long times as space
Split
20 Hz to 1 kHz. Below this frequency nothing is processed: the high-pass sits on the wet leg alone, so down there the dry passes untouched. Bottom of the travel reads OFF and the filter is stepped over, bit-exact. Default is C4, 261.6 Hz
Gestures
Type a value
Double-click any value box and type: "25", "25%", "12 ms", "261,6" and "OFF" all land on the legal grid, and a unit that belongs to another knob is refused. The words the readouts print can always be typed back
Mouse wheel
Fixed steps per detent: 5% on WIDTH, 1 ms on TIME. On SPLIT a detent is one semitone with note snap engaged, ten cents without: a fixed step in Hz would be two different controls on the same knob. Trackpad scrolling accumulates; inertia is ignored
Note snap, the S pill
The small S beside the SPLIT label locks the cut to the nearest semitone, so you can put it on the key of the track instead of on a number. It catches everything you do by hand, dragging, scrolling and typing, and the readout names the note. Host automation is never snapped: the parameter stays the master, and a project reopens exactly as you saved it
Init / Bypass
INIT returns WIDTH, TIME and SPLIT to their defaults and leaves BYPASS and the S pill as they are. BYPASS crossfades to the untouched input in 10 ms, click-free
04The vectorscope
The display is a goniometer: mono energy stands vertical on the M axis, side energy lies horizontal on the S axis, and the L and R axes run along the diagonals, matching the etched tags. The diamond is not decoration. The set of legal digital values per channel is a square, and a goniometer rotates that square by 45 degrees: the diamond edge is digital full scale itself, in every direction. Touch the upper-left edge and the left channel is at the scale limit; upper-right, the right channel.
The beam draws the last 38 ms, rebuilt from scratch every frame. There is no persistence image and nothing accumulates: the softness you see is real CRT physics, where the beam dwells the phosphor glows, where it sweeps it dims. The dry signal is the lava spine; the output is the blue beam. The difference between the two is the effect.
The scale never zooms in. The diamond is 0 dBFS and anything quieter is drawn 1:1, so size is level. When a block of audio (10.7 ms) would leave the diamond, that block alone is scaled down until it touches the edge, and the next one starts again from 1:1. There is no memory, so one loud peak never shrinks the seconds after it, and the figure never leaves the graticule. It scales the picture, never the audio.
05Under the hood
Signal flow
Audio splits into a dry path and a wet path. The wet path reads a fractional delay line at TIME milliseconds (the same tap on both channels), high-passes the tap at SPLIT, flips the left side, and is levelled by WIDTH; the dry path is never touched; the two are summed. There is no output trim, no look-ahead, and no gain staging beyond WIDTH. The delay itself is the effect, which is why the plugin reports zero latency.
- Fractional delay: a 6-point Lagrange interpolator reads the line. The tap glides through fractional positions on every TIME move, and at 44.1 kHz even a whole millisecond is 44.1 samples; a cheaper interpolator would change the top octave audibly from one position to the next. Measured ripple at 10 kHz is 0.24 dB, against 2.01 dB for linear interpolation.
- The SPLIT filter: a Linkwitz-Riley 4th-order high-pass in topology-preserving transform form, on the wet tap and nowhere else. It is deliberately not a crossover: a real crossover would run the dry through two filter branches and rotate its phase, and the dry of this plugin going straight through is the one thing that is sacred. With the filter on the wet leg alone, below the cut what is left is the dry, intact. The two channels share one set of coefficients, which is what keeps the mono cancellation exact when the filter is engaged, and the filter runs even when SPLIT is off so that engaging it never wakes a cold filter.
- Parameter smoothing: every level moves through per-sample smoothing, and the TIME glide has a slew ceiling of half a sample per sample, so the tap can glide like tape but can never stall or run backwards.
- Input scrubbing: non-finite samples are cleared at the input, so a misbehaving upstream plugin cannot latch the engine or the display.
- Bypass: a 10 ms equal-sum crossfade to the untouched input. Fully bypassed, the plugin is bit-exact.
- Metering pipe: scope, PHASE and BALANCE bars and the LEVELS strip read one lock-free FIFO fed after the bypass stage, so every display shows what actually leaves the plugin, and the audio thread never blocks on the GUI.
- Gap fence: when the host suspends processing (transport stop, track gating) and resumes, the scope window restarts from the first fresh sample. The display never splices stale audio from before the gap into the new note.
06Measured
Measured in-house on the real binaries: headless bench on the DSP kernel, pixel-level bench on the actual display component, on Apple Silicon and Intel builds.
| Latency | 0 ms / 0 samples (zero-latency) |
| Mono fold-down of the wet | Cancels below −137 dBFS, worst case across 20 TIME values |
| Bypass | Bit-exact, passthrough identical to the input |
| Block-size invariance | Bit-identical output from 1-sample to 4096-sample blocks |
| Time accuracy | 10 ms stays 10 ms at 44.1, 48, 96 and 192 kHz |
| Interpolator ripple | 0.24 dB at 10 kHz on a half-sample fraction (linear would be 2.01 dB) |
| Split slope | 24.05 dB per octave, −6.02 dB at the cut (Linkwitz-Riley 4th order) |
| Split across rates | The cut holds the same frequency within 0.019 dB from 44.1 to 192 kHz |
| Split disengaged | Bit-exact: at the bottom of the travel the cut frequency cannot change a single ulp of the output |
| Split and the dry | Bit-identical dry across the whole travel of the cut: the filter never reaches it |
| Wet below the cut | −48.2 dB at 65 Hz with the cut at C4, and −0.00 dB at 2 kHz |
| Tail | 0.33 s worst case measured, 0.35 s declared to the host |
| Scope containment | 0 pixels outside the graticule, every frame, every test program |
| Self-noise | None: silence in, silence out |
07Specifications
| Type | Reference stereo widener |
| Algorithm | Delayed copy, left polarity flip on the wet, summed against the dry · mono-safe by construction |
| Time | 1–100 ms in 1 ms steps, identical on both channels · 6-point fractional interpolation |
| Width | 0–100% in 1% steps · default 20% · moves the wet only, the dry stays at unity |
| Split | 20 Hz to 1 kHz on the wet leg only · Linkwitz-Riley 4th order, 24 dB per octave, zero latency · OFF at the bottom of the travel, bit-exact · note snap to the nearest semitone · default C4, 261.6 Hz |
| Vectorscope | 38 ms window · dwell-intensity beam · full-scale diamond graticule, 1:1 below 0 dBFS · −6 / −12 dB rings · WIDTH, BAL and PEAK L / R readouts |
| Metering | PHASE and BALANCE bars · L / R / MID / SIDE columns, RMS body and peak tip, −48 to +6 dBFS · PEAK and S/M readouts |
| Latency | Zero, because the delay is the effect |
| Formats | VST3 · AU |
| Systems | macOS 12+ (Universal) · Windows 10+ · 64-bit |
| Version | 1.0.0 |