A collection of audio effect plugins (VST3, CLAP, standalone) built with nih-plug in Rust.
A lightweight gain utility with cross-instance group linking. Multiple instances can be assigned to the same group (1-16), and changing gain on any grouped instance applies that change to all others.
- 16 groups with Absolute (identical values) and Relative (delta-based) link modes
- Invert toggle for mirrored gain movement (ducking, sidechain-style workflows)
- In-process shared state with cumulative canonical delta sync (lock-free atomics, zero overhead)
- CPU-rendered GUI with rotary dial (tiny-skia + softbuffer), freely resizable
- ~0.62 MB RSS and 0.03% CPU per instance (200 instances grouped @ 6.3% CPU, 123 MB total)
- Inspired by BlueCat's Gain Suite
A lightweight loudness meter with integrated gain utility, purpose-built for clip-to-zero workflows. Designed to run 100+ instances per project without significant CPU or memory impact.
- dB and LUFS modes with per-mode gain/reference and gain-match buttons
- Peak max, true peak (ITU-R BS.1770-4), RMS, EBU R128 (integrated, short-term, momentary, LRA)
- CPU-rendered GUI (tiny-skia + softbuffer), freely resizable -- no GPU drivers loaded
- SIMD-optimized metering (
f32x16) - ~1.8 MB RSS and 0.05% CPU per instance (300 instances @ 15% CPU, 560 MB total)
- Inspired by TBProAudio dpMeter
A multichannel real-time oscilloscope with beat sync. Multiple instances share audio data through a global store, allowing one window to display waveforms from up to 16 tracks simultaneously.
- Three display modes: Vertical (stacked), Overlay (superimposed), Sum (mixed)
- Three draw styles: Line, Filled, Both
- Beat sync mode with bar/beat grid alignment (1/4, 1/2, 1, 2, 4 bars)
- Free-running mode with adjustable timebase (1ms - 10s)
- dB-scaled amplitude mapping with configurable range
- 16 track groups with per-track solo/mute and color assignment
- Cursor tooltip on hover shows time (or bar position in beat-sync) plus a color-coded dB reading per track; in Vertical mode the tooltip and cursor line restrict to the hovered lane
- Peak hold with 2-second hold and 20 dB/s decay
- Hold mode for phase alignment (shows last complete bar, swaps at boundary)
- SIMD-optimized ring buffer with f32x16 mipmap reduction
- Waveform renderer bypasses tiny-skia's raster pipeline — direct pixel-write column fills with half-split envelope smoothing (~52% less GUI CPU than the original path-based rasterizer)
- CPU-rendered GUI with amber phosphor terminal theme (tiny-skia + softbuffer), freely resizable
- 16 instances @ 2% CPU headless (0.13% per instance)
- Per-track solo/mute/color controls with DAW track name via CLAP track-info
- Inspired by PsyScope and RusovDmitriy/oscilloscope
A detail-preserving spectral saturator. Uses FFT-based spectral analysis to preserve quiet frequency components through the clipping process, producing textured flat-top clipping instead of featureless flat tops.
- Independent Gain (input boost) and Threshold (clip ceiling) controls
- Detail knob preserves quiet harmonics through clipped regions via per-bin spectral magnitude saturation
- Knee crossfades between hard clip (0%) and soft tanh saturation (100%)
- Clip-aware detail blend — only affects clipped portions, unclipped material is unchanged
- CPU-rendered GUI (tiny-skia + softbuffer), freely resizable
- ~0.82 MB RSS and 0.14% CPU per instance (100 instances @ 13.7% CPU, 82 MB total)
- Inspired by Newfangled Audio Saturate
A six-band parallel multiband saturator inspired by Wavesfactory Spectre. Each band's EQ boost is computed against dry as a difference, then run through a per-band saturation algorithm — so a band at 0 dB contributes silence and gain effectively becomes the per-band drive.
- 1 low-shelf + 4 peaks + 1 high-shelf, each with frequency / gain / Q controls
- Six saturation algorithms per band: Tube, Tape, Diode, Digital, Class B, Wavefold
- Per-band Stereo / Mid / Side routing applied to the diff before saturation
- Linear-phase polyphase oversampling: Off / 4× / 8× / 16×
- Global de-emphasis subtracts the linear EQ boost so only saturation harmonics remain audible
- CPU-rendered GUI with EQ curve display + live spectrum analyzer overlay (tiny-skia + softbuffer), freely resizable
- Inspired by Wavesfactory Spectre
A low-latency wideband peak limiter for track-level use. Feed-forward topology with lookahead and dual-stage transient/dynamics handling.
- Individual attack, release, knee, and transient controls
- 7 built-in character presets (Transparent, Aggressive, Punchy, Smooth, Safe, Vocal, Loud)
- Optional ISP (true peak targeting via ITU-R BS.1770-4)
- Gain Link mode for auditioning limiting without loudness change
- CPU-rendered GUI with input/output meters and GR readout (tiny-skia + softbuffer), freely resizable
- ~1.0 MB RSS and 0.12% CPU per instance (50 instances @ 6.2% CPU, 50 MB total)
- Inspired by DMG Audio TrackLimit
A psychedelic spectral shifter/stretcher that transforms audio in the frequency domain using a phase vocoder. Makes familiar sounds alien -- voices from another dimension, instruments with impossible harmonic structures.
- Shift (-24 to +24 semitones) for pitch shifting without time stretching
- Stretch (0.5x to 2.0x) warps harmonic spacing for inharmonic/metallic textures
- Freeze captures the current spectrum as a sustained drone
- Feedback compounds spectral shifts for rising/falling Shepard tone effects
- Low/High frequency range limits for selective processing
- Scrolling spectral waterfall display with psychedelic color palette
- CPU-rendered GUI (tiny-skia + softbuffer), freely resizable
- 4096-point FFT phase vocoder with linear interpolation and phase-coherent bin remapping
A wavetable-based audio filter that uses wavetable frames as FIR filter kernels. Load any .wav or .wt wavetable file and use its spectral content to shape your audio.
- Raw Mode: Direct time-domain convolution (zero latency)
- Phaseless Mode: STFT magnitude-only filtering (no pre-ringing)
- 3D/2D wavetable visualization (click to toggle), real-time filter response with live input spectrum shadow
- CPU-rendered GUI (tiny-skia + softbuffer), freely resizable; rotary dials show DAW modulation arcs and support right-click text entry
- SIMD-optimized convolution (
f32x16) with silence fast-path — idle plugins use near-zero CPU - Inspired by Kilohearts FilterTable and EB-FreakyTable
- Rust nightly toolchain (automatically configured via
rust-toolchain.toml) - Linux system dependencies (see below)
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Ubuntu / Debian
sudo apt install libxcb1-dev libx11-xcb-dev libx11-dev libxcursor-dev \
libasound2-dev libgl-dev libjack-jackd2-dev libwayland-dev# Build all plugins (VST3 + CLAP)
cargo nih-plug bundle gain-brain --release
cargo nih-plug bundle gs-meter --release
cargo nih-plug bundle pope-scope --release
cargo nih-plug bundle satch --release
cargo nih-plug bundle six-pack --release
cargo nih-plug bundle tinylimit --release
cargo nih-plug bundle warp-zone --release
cargo nih-plug bundle wavetable-filter --release
# Standalone binaries
cargo build --bin gain-brain --release
cargo build --bin gs-meter --release
cargo build --bin pope-scope --release
cargo build --bin satch --release
cargo build --bin six-pack --release
cargo build --bin tinylimit --release
cargo build --bin warp-zone --release
cargo build --bin wavetable-filter --releaseFor local builds that exploit your CPU's SIMD (tiny-skia's AVX2 raster paths, auto-vectorized DSP code), wrap any cargo invocation with cargo xtask native. It detects AVX2+FMA+BMI2 on the build host and, when present, sets RUSTFLAGS=-C target-cpu=haswell for the child cargo process. On non-x86_64 or older x86_64 hosts it falls back to the default target-cpu.
cargo xtask native nih-plug bundle wavetable-filter --release
cargo xtask native build --release --bin gs-meterThe resulting binaries are NOT portable to pre-Haswell machines -- use plain cargo nih-plug bundle ... for distributable bundles.
The bundler outputs to target/bundled/. Copy either the .vst3 or .clap file (you only need one -- use whichever your DAW supports) to your plugin directory:
- Linux:
~/.vst3/or~/.clap/ - macOS:
~/Library/Audio/Plug-Ins/VST3/or~/Library/Audio/Plug-Ins/CLAP/ - Windows:
C:\Program Files\Common Files\VST3\orC:\Program Files\Common Files\CLAP\
tract-plugin-pack/
├── gain-brain/ # Gain utility with group linking
├── gs-meter/ # Loudness meter + gain utility
├── pope-scope/ # Multichannel real-time oscilloscope
├── satch/ # Spectral saturator with detail preservation
├── six-pack/ # Six-band parallel multiband saturator
├── tinylimit/ # Wideband peak limiter
├── warp-zone/ # Spectral shifter/stretcher
├── wavetable-filter/ # Wavetable-based filter plugin
├── nih-plug-widgets/ # Legacy vizia widgets (no longer used; kept on disk for reference, excluded from the workspace build)
├── tiny-skia-widgets/ # Shared CPU-rendered widgets, editor base scaffolding
├── docs/ # Plugin manuals
│ ├── gain-brain/
│ ├── gs-meter/
│ ├── pope-scope/
│ ├── satch/
│ ├── six-pack/
│ ├── tinylimit/
│ ├── warp-zone/
│ └── wavetable-filter/
└── xtask/ # Build tooling
cargo nextest run --workspace # All tests (461) -- parallel runner
cargo clippy --workspace # Lint checkInstall nextest via cargo install cargo-nextest --locked. Config lives in .config/nextest.toml.
- Gain Brain Manual
- GS Meter Manual
- Pope Scope Manual
- Satch Manual
- Six Pack Manual
- Tinylimit Manual
- Warp Zone Manual
- Wavetable Filter Manual
- Clip-to-Zero video series (YouTube)
- Clip-to-Zero process document (Google Docs)
GPL-3.0-or-later
Michael Dungan