OPEN SOURCE · MACOS 14.2+ · NO VIRTUAL DRIVER

System-wide
parametric EQ.
Built in a day.

macOS doesn't ship with one. So I built it. Native Swift, Core Audio Taps, dual real-time spectrum analyzer. No virtual driver. No Electron. No paywall.

Up to 31 bands 7 filter types Menu bar + CLI Hann-windowed FFT Lock-free audio thread
iQualize — DEADBEEF
Drag knob · snap · scroll gain · dbl-click reset · right-click menu
+7.0 dB
+8.0 dB
+5.0 dB
-6.0 dB
-8.0 dB
-6.0 dB
+5.0 dB
+7.0 dB
+6.0 dB
+4.0 dB
27 Hz
55 Hz
111 Hz
222 Hz
445 Hz
890 Hz
1.8 kHz
3.6 kHz
7.1 kHz
14.3 kHz
0.79 oct
0.89 oct
1.01 oct
1.17 oct
1.01 oct
1.17 oct
2.54 oct
3.02 oct
2.54 oct
1.92 oct
Bell
Bell
Bell
Bell
Bell
Bell
Bell
Bell
Bell
Bell
Interactive simulation — visual approximation of the app The real iQualize processes live system audio; this preview doesn't.
"macOS doesn't have a system-wide parametric EQ.
So I built one in a day."
Built at 04:57 in Bavaria · Listening to Opera by Ballarak
/ THE DRIVER PROBLEM

No virtual audio driver. It just works.

Other system EQs install a virtual audio device — a kernel-adjacent shim that hijacks your output. iQualize doesn't. It uses CATap, Apple's native system audio tap introduced in macOS 14.2. It exists because the alternative was a hassle to install, tiny and fiddly to use, half paywalled — and then a crash took it down anyway.

Virtual-driver EQs kernel/driver-based

Install a kernel extension or audio driver. You don't notice it — until you do.

  • ×
    Kext or driver install required. Survives across reboots, OS updates, and your patience.
  • ×
    Fights with Bluetooth. Codec negotiation, stereo collapse, the works.
  • ×
    Loses system volume keys. Output is "the driver", not your speakers.
  • ×
    Breaks DRM-protected audio. Apple Music lossless, certain streaming sources.
  • ×
    Adds latency. Extra buffer hop through the virtual device.

iQualize CATap, native

Apple's own system audio tap, used the way Apple intended.

  • Zero drivers. Drag the .app to /Applications. Done.
  • Bluetooth-friendly. AirPods, Teufel Concept E, anything CoreAudio sees.
  • Volume keys still work. The OS still owns your output device.
  • Doesn't break DRM streams. CATap reads the post-mix bus, not the source.
  • Lock-free audio thread. Slider drags don't glitch. Ever.
/ HOW TO USE IT

Three steps. Then it's just there.

01

Install & launch

Lives in your menu bar. No system extensions, no audio device changes. Launch it and it's running. Quit it and it's gone without a trace.

02

Shape your curve

Drag band nodes across the frequency response. Add up to 31 parametric bands anywhere from 20 Hz to 20 kHz. The spectrum shows you what's happening, pre and post.

03

Every app, equalized

Spotify, YouTube, Final Cut, system sounds — everything through the same curve via Core Audio Taps. One EQ for your entire Mac.

/ FEATURES

Everything a parametric EQ should be — and the things it usually isn't.

01 / EQ ENGINE

Up to 31 bands. Bell, shelf, pass, notch.

Per-band frequency, gain, and bandwidth — accurate biquad response curves rendered from Audio EQ Cookbook formulas. Q or Octave display, your call.

BELL
L SHELF
H SHELF
L PASS
H PASS
B PASS
NOTCH
02 / SPECTRUM

Real-time pre + post FFT.

2048-point Hann-windowed FFT via Accelerate vDSP, log-frequency binned, 60 fps double-buffered. Watch what you're doing.

03 / PRESETS

15 built-in + your own.

Edit a built-in and it forks — never overwrites the original. Star favorites to pin them to the top of the picker; switch from the menu bar or the EQ window.

DEADBEEFFlatBass BoostVocal ClarityLoudnessTreble BoostPodcastTechnoDeep HouseHard TechnoMinimalAmerican RapGerman RapLuzifer's Void0xDEADBEEF
04 / PRESET BROWSER

OPRA + AutoEQ import.

Search and import community headphone/IEM profiles straight from the OPRA database. Also accepts AutoEQ ParametricEQ.txt files — and presets are plain-JSON .iqpreset in and out, with batch import.

05 / DEVICE PINNING

A preset per device.

Pin a preset to an output device and it's recalled automatically whenever that device becomes the active output — including at launch. Studio curve on the DAC, loudness on the AirPods.

06 / COMMAND LINE

Script it from the terminal.

One-time install from Settings → General. Status, presets, bypass, gain — all drivable from Shortcuts, launchd jobs, or a keyboard launcher. Not running? The CLI launches it.

$iqualize status
$iqualize preset "Deep House"
$iqualize bypass toggle
$iqualize gain output -3
07 / KEYBOARD

Driven by hands, not mice.

Gain ±0.5 dB
Frequency, semitone
/ ⇧⇥
Cycle bands
⌘B
Toggle bypass
⌘Z / ⌘⇧Z
Undo / redo
⌘,
Settings
08 / LIMITER

Dynamic peak limiter.

AUPeakLimiter on the output stage prevents clipping at 0 dBFS. Boost without fear.

0 dBFS
09 / BANDS

Add. Suggest. Reorder.

+ buttons either side of the EQ — a new band copies its neighbor. Right-click for "Add Suggested Band": finds the largest frequency gap and drops one in. Move Left/Right from the same menu.

10 / RUNTIME

Lock-free, glitch-free.

Shared-memory ring buffer between the real-time IOProc and AVAudioEngine. Only changed parameters are written to the audio unit. Slider drags coalesce into single undo entries.

11 / STEREO

L · R balance, double-click to center.

Per-channel gain applied in the render callback. Centered by default, snap-to-center with a double-click reset.

12 / CONTINUITY

AirPods still hand off.

Tap ownership lives in a separate helper process, so Apple Continuity keeps working — AirPods switch between your Mac and iPhone mid-playback like iQualize isn't even there.

13 / MENU BAR

Lives in the menu bar.

Presets submenu with live checkmarks, Bypass EQ (⌘B), pin/unpin for the current output device, in-app Help. Option-click the icon to jump straight to the EQ window.

/ ARCHITECTURE

CATap in. AUPeakLimiter out. Nothing in between you didn't ask for.

The tap lives in a small helper process; the EQ lives in the app. A shared-memory ring buffer in between keeps the audio thread lock-free — no glitches on slider drags.

The signal path

Apps render audio. CATap reads the post-mix stream inside a helper process — iQualizeCapture — whose IOProc writes into a shared-memory ring buffer. The main app pulls from it and does the actual work: input gain, parametric EQ, output gain, peak limiter, out to your device.

Why two processes? A process that both holds an active tap and renders to the same output device gets treated as non-preemptible by coreaudiod — which silently breaks AirPods Continuity handoff. Splitting tap ownership from rendering keeps that path free. And if the helper ever dies, the app stops cleanly instead of leaving audio broken.

Audio is captured at the tap's native sample rate; AVAudioEngine's output node converts to whatever the device needs, so playback stays correct across device switches.

App audio (system mix)
iQualizeCapture · helper process
CATap · macOS 14.2 audio tap
IOProc → shared-memory ring buffer
iQualize · main process
AVAudioSourceNode
Input Gain ±24 dB
Parametric EQ · up to 31 bands
Output Gain ±24 dB
AUPeakLimiter
Output device
FFT
2048pt · Hann
Bands
1 — 31
Gain range
±24dB
Min macOS
14.2
/ INSTALL

Two paths. Both honest.

Download the .dmg

Grab the latest release, open the disk image, drag iQualize into Applications. That's it.

Releases on GitHub
Heads up — iQualize is unsigned. Apple charges $99 a year for a developer certificate. If macOS gets stroppy, run this once:
$xattr -dr com.apple.quarantine /Applications/iQualize.app

Or build from source

Swift Package Manager. No Xcode project. One script.

~/iqualize — zsh
$git clone https://github.com/dariuscorvus/iqualize.git
$cd iqualize
$bash install.sh
› Building iQualize…
› Codesigning with ad-hoc identity…
› Installing to /Applications/iQualize.app
› Symlinking iqualize CLI…
✓ Done. Launch it from /Applications.
$open /Applications/iQualize.app

Requirements: macOS 14.2+ (Core Audio Taps API) · System Audio Recording permission · Apple Silicon or Intel.