Parametric EQ – 8 Bands
A real EQ that refuses to normalize behind your back
- audio
- audio
- eq_report_json
- info
What it is
An eight-band parametric EQ that runs on the CPU, edits like an EQ (drag the curve or type values), and - the part that actually distinguishes it - passes its settings as an editable JSON object you can also feed from a node. That last bit is why it exists: this pack's Auto-EQ – Analyze / Propose measures your track and hands back a proposal, and this is the node that applies it. Proposal and execution are deliberately separate, so the curve you apply is one you can see and change.
The other thing it does, by not doing it, is refuse to normalize. Boost a top end and your peaks go up; this node won't quietly pull the whole thing back down to "fix" that. The report hands you the number instead, and you decide. That's the right call - hidden make-up gain is how you end up with two files at wildly different levels and no idea which stage did it.
How it works
Settings are RBJ biquads, designed per band and applied with scipy.signal.sosfilt in 64k-sample blocks with filter state carried between blocks, so a long track isn't stitched together with clicks at the seams. Band types are peak, low_shelf, high_shelf, highpass, lowpass, and notch; frequency range is 20 Hz to just under half the sample rate; gain is capped at ±12 dB per band and Q between 0.2 and 10. There's a preamp_db field (±24 dB) for the global trim you occasionally want after a big shelf.
Everything is versioned under a minimax_eq_v1 schema, which is what makes the Auto-EQ wire work: that node emits the same schema, so it drops straight in. Batch audio gets a batch form of the schema with one item per track, and if the counts don't match, the node raises rather than guessing which curve belongs to which song.
If the curve is empty and the preamp is 0 dB, the node detects unity and passes the audio through without filtering at all - so leaving it in the graph with default settings costs nothing. bypass does the same thing explicitly: input returned unchanged, no gain, no filtering, no normalization.
The inputs that matter
Three, and only one of them is interesting. audio is a normal AUDIO input; all batch items and channels are preserved. eq_settings_json is the settings object, and you'll normally never type it - connect eq_settings_json from the Auto-EQ node, or edit the curve/table in the node's UI, which writes the same JSON for you. bypass is your A/B switch, and because it disables gain too, a bypassed node is a genuinely identical signal path.
Outputs are audio, eq_report_json, and info. The report is worth reading once per session: it gives you the actual response curve it applied, the input and output peak, a suggested_headroom_db value, and an explicit hidden_normalization: false flag - an author saying out loud what most audio chains do silently. When a boosted shelf has eaten your headroom, that suggested figure is your preamp setting, or the thing you let the mastering compressor downstream deal with.
The way to use it
The workflow this pack intends is a straight line: Auto-EQ measures and proposes, Parametric EQ applies, Mastering Compressor catches the peaks and sets the loudness. Three nodes, one job each, and every stage hands you a JSON explaining what it did.
If you're building it yourself: narrow the Auto-EQ frequency window and shave max_gain_db down to 3 dB or so before you start trusting its proposals. A correction you can't hear is the one you should keep. Then push the curve around by hand in this node on top of the proposal - the enabled flag on Auto-EQ is what lets you keep the same graph and run with only your own moves.
Install and gotchas
It ships with the toolkit. Manager → search MiniMax Music Production Toolkit, or:
cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/ComfyUI-MiniMax-Music-Production-Toolkit.git
cd ComfyUI-MiniMax-Music-Production-Toolkit
python -m pip install -r requirements.txt
Restart ComfyUI and hard-refresh the browser. SciPy is the dependency that matters for the filters; the master's own preference of 44.1 kHz or 48 kHz is set elsewhere in the chain (the output-rate node), and this EQ follows whatever rate the audio arrives at.
Two failure modes to know. "EQ settings must be valid JSON" means the settings string got mangled - usually a hand-edited JSON that lost a bracket, or a connected batch proposal whose item count doesn't equal the audio batch. And more bands is not better: eight bands is plenty to ruin a track, and the fix for a dull mix is usually one shelf, not six notches. The report's suggested headroom is the only number here you should feel obliged to act on.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Audio to equalize. All batch items/channels are preserved; processing uses the CPU. | |
| eq_settings_json | STRING | {"schema":"minimax_eq_v1","preamp_db":0,"bands":[]} | Versioned EQ settings. Edit using the curve/table or connect Auto-EQ's proposal. Batch proposals must match the audio batch. |
| bypass | BOOLEAN | false | Return the input unchanged; no gain, filtering or normalization. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| eq_report_json | STRING | — |
| info | STRING | — |