Parametric EQ that sits between your system audio and your speakers.
macOS doesn't have one built in, so here we are.
Built with LLMs. Public domain. Do whatever you want with it (at your own risk).
You need Homebrew, then:
brew install blackhole-2ch portaudio python@3.13
git clone https://github.com/raaghava-p/SystemwideEQ-MacOS.git
cd SystemwideEQ-MacOS
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt && pip install -e .
python -m equaliserOne thing — PyQt6 6.8+ is broken on Apple Silicon. The requirements
file already pins it to <6.8 so you shouldn't hit this, but if you do:
pip install "PyQt6>=6.5,<6.8" "PyQt6-Qt6>=6.5,<6.8".
The app needs to intercept system audio. BlackHole makes this possible but you have to wire it up once:
- Audio MIDI Setup →
+→ Create Multi-Output Device - Check BlackHole 2ch and your speakers/headphones
- Physical device = master clock, drift correction on for BlackHole
- System Settings → Sound → Output → select the Multi-Output Device
After that, all system audio goes through BlackHole and the app can process it.
- Set BlackHole as input, your speakers as output
- Match the sample rate to Audio MIDI Setup (48 kHz is usually right)
- Start audio
- Add EQ bands — five filter types available: peaking, low shelf, high shelf, high pass, low pass
- Toggle individual bands on/off with the checkbox column
- Preamp slider gives you ±12 dB of headroom
- A/B bypass to compare
- Import AutoEQ headphone profiles (ParametricEQ.txt)
- Save presets — last session restores automatically
The spectrum analyzer overlays live frequency content on the EQ curve. Peak hold markers on the meters show recent maximums.
Troubleshooting
| Problem | Fix |
|---|---|
| No sound | System output probably isn't set to the Multi-Output Device |
| Missing device | Hit Refresh. Might need to brew install blackhole-2ch again. |
| Pops/latency | Lower buffer size or make sure sample rates match everywhere |
| Clipping | Turn down band gains or the preamp |
| cocoa plugin error | PyQt6 too new. Pin to <6.8. |
| Broken after moving folder | Venv has stale paths. Nuke it: rm -rf .venv and redo setup. |
| Permission error | Terminal needs mic access — System Settings → Privacy & Security |
Build standalone app
pip install -r requirements-dev.txt
python scripts/build_app.py py2appGives you dist/Equaliser.app. Drag it to Applications.
Limitations
- Stereo only
- Swap devices = stop and restart the stream
