Imperator EQ
Taps the sound your Mac sends to its current output, runs it through a 10-band equaliser and volume/balance controls, and plays the result back on that same output.
README.md
// Overview
A system-wide 10-band parametric equaliser for macOS, living in the menu bar. macOS has no built-in EQ for system output, so Imperator EQ adds one: it takes the sound apps send to your current output, runs it through an equaliser, and plays the result on that same output. No driver, no per-app setup.
10 EQ bands from 32 Hz to 16 kHz at plus or minus 12 dB each, volume boost up to 200%, left/right balance, and named presets you can save, rename, reorder and delete. The output picker is the same list as the Sound menu, and sound effects move along with it. No Dock icon, and it can open at login.
Requires macOS 14.2 or later, Apple silicon or Intel. Built and tested on macOS 27 only — older versions are expected to work but have not been verified.
Install at your own risk. The app is not notarized and carries no Apple Developer signature, so macOS cannot vouch for it. It is provided as is, with no warranty, under the MIT license.
// Install
Download the zip from
Releases,
unzip, and move Imperator EQ.app to /Applications.
The app is ad-hoc signed, with no Apple Developer ID, so Gatekeeper blocks the first launch. Right-click the app and choose Open, then confirm. If macOS still refuses, clear the quarantine flag:
xattr -dr com.apple.quarantine "/Applications/Imperator EQ.app"The app installs nothing else and never asks for an administrator password.
// Permissions
System audio recording. To process what your Mac plays, the app has to read it first, and macOS asks before it lets any app do that. The prompt appears the first time the switch in the panel is turned on. The app records nothing and keeps no audio: the sound goes through the equaliser and straight back out, and it never opens the microphone.
While the switch is on, macOS shows its recording indicator for the app in the menu bar and lists it in Control Center, because reading what the Mac plays counts as recording system audio. Turn the switch off and the indicator goes away. Denying the permission leaves the panel saying it is waiting, with a button straight to System Settings > Privacy & Security > Screen & System Audio Recording.
// Use
Click the waveform icon in the menu bar to open the panel. The switch in the header turns processing on and off. Drag the band sliders to shape the sound, or pick a preset; the sound changes while you drag. Reset returns every band to flat. The output list sets the Mac's sound output, the same setting as the Sound menu, and the EQ follows it. Open at Login starts the app with the Mac.
The panel is drawn by the app, not by NSPopover. macOS 27 draws its own menu
bar panels as plain rounded rectangles with no arrow and no open or close
animation, and NSPopover draws neither that shape nor that corner and offers
no way to set one.
// How it works
The app uses a Core Audio process tap, the API macOS 14.2 added for reading
other apps' audio. The tap sits on the current output device and takes
everything apps send to it, except the app's own sound. The app reads the tap
through a private aggregate device whose only other member is that same
output, runs each block through Apple's AUNBandEQ Audio Unit, applies volume
and balance, and writes the result back to the output.
The system output never changes: volume keys and the Sound menu work on the real device, exactly as without the app. Apps are muted only while the app reads the tap, so quitting it, turning the switch off, or a crash all return apps to playing directly at once, with nothing left behind. When the default output changes, for example when headphones connect, the app rebuilds the tap on the new device, retrying if it refuses at first. The app adds about 16 ms of latency between an app and the speaker.
// Build
bash build.shRuns a universal release build, assembles Imperator EQ.app, signs it, and
copies it to /Applications. Signing is not optional: Gatekeeper blocks an
unsigned bundle.
The build stamps the binary with the current SDK while keeping the deployment
target at macOS 14.2, because AppKit picks which generation of controls to
draw from that stamp rather than from the macOS actually running it. Signing
uses the stable Imperator Dev certificate rather than ad-hoc, since an
ad-hoc signature's designated requirement changes on every build and would
drop the system audio recording permission on each update.
// Release
Bumps Info.plist, builds, zips, commits, tags and publishes a GitHub release
with the zip attached. Tags are plain semver; the release title carries the
app name.
// Known limits
The EQ runs on the first two channels; an output with more passes the rest through at the same volume without EQ. Some outputs, like another aggregate device, cannot join an aggregate device at all, and on those the EQ does not run and the panel says so. Headsets, Bluetooth outputs, sleep and wake have not been tested yet. The output device keeps running while the switch is on even when nothing plays, which costs some battery.
// Third-party
None. The app uses Apple frameworks only.