Audio EQ
The parametric EQ with a graph inside the node — drag bands, hear the change
- audio
- video
- audio
- fx_spec
EQ is where mixes either come alive or turn into mud, and it's also the stage where ComfyTV stops feeling like a node pack and starts feeling like a real editor. Audio EQ embeds an actual parametric EQ graph in the node body - you drag bands on a curve, and the JSON behind them drives FFmpeg filters. No number-crunching in your head, no "is 800Hz the mud frequency" guesswork; you see the curve you're building.
You'll use it for the standard jobs: cutting the low-mid mud out of a voiceover, adding presence around 3–5kHz, high-passing a rumble that a highpass filter at 60–100Hz fixes instantly, or gently scooping the 200–400Hz boxiness out of a room recording. Because the whole pack runs inside ComfyUI, the flow is: Trim → Denoise → EQ → Dynamics → Loudness, all in one graph, and this is the stage that makes the voice actually sound good rather than just clean.
How it works
The bands input is the whole node: a JSON string, per the author's tooltip, shaped like [{"type":"peak|highpass|lowpass|lowshelf|highshelf","f":1000,"g":0,"q":1}] - but you don't type that. The node's graph UI writes it for you as you drag bands. The source maps each band type to an FFmpeg filter:
- peak -
equalizerwith frequency, Q, and gain. The surgical band. - highpass / lowpass -
highpass/lowpass, 2-pole, for rolling off rumble or hiss. - lowshelf / highshelf -
bass/treble, tilting the low or high end without a resonant peak.
Gain ranges ±24dB, frequency 20Hz–20kHz, Q 0.1–20. The audio or video input feeds the source (video uses its soundtrack), and outputs are audio plus an fx_spec (COMFYTV_FXSPEC) recording the applied filter chain for the FX Chain machinery. Internal inputs (force_run_token, project_id, parent_output_id) are frontend plumbing - ignore them.
One quirk worth knowing: the stage errors with "no active bands" if the bands JSON is empty or every band has 0dB gain. A flat EQ is a no-op, and it says so instead of silently doing nothing.
Installing ComfyTV
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Full backend restart, then ComfyTV → AudioFX; ComfyUI Manager finds "ComfyTV". Zero extra Python deps - the filters run through FFmpeg via PyAV, bundled with ComfyUI. No models.
The pack-wide install trap: on macOS / ComfyUI Desktop / multi-install machines, cd ComfyUI/custom_nodes can clone into the wrong instance - clone succeeds, stages never appear. Read the running instance's path from the startup log, clone into that instance's custom_nodes by absolute path (quote paths with spaces/parentheses), confirm ComfyTV/__init__.py is top-level, restart the backend fully.
Common issues
- "no active bands" error. You have bands but all at 0dB, or the graph UI hasn't committed a band yet. Move a band's gain off zero.
- The lowshelf/highshelf does nothing. The source only emits
bass/treblefilters when the band's gain is non-zero, and relies on FFmpeg having those filters. A 0dB shelf is silently skipped - give it actual gain. - EQ sounds phasey or harsh. Q is too high. For broad corrective moves keep Q around 0.7–1; narrow Q is for surgical notching.
- The graph UI and the audio disagree. The bands JSON is what actually runs; if the UI feels out of sync, re-run the stage to re-commit the graph.
EQ is the difference between "recorded" and "produced," and having it as a visual curve in the node is the least intimidating way to learn it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| bands | STRING | JSON [{"type":"peak|highpass|lowpass|lowshelf|highshelf","f":1000,"g":0,"q":1}] — driven by the EQ graph UI | |
| audioopt | COMFYTV_AUDIO | — | |
| videoopt | COMFYTV_VIDEO | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | COMFYTV_AUDIO | — |
| fx_spec | COMFYTV_FXSPEC | — |