Nodes/CRT-Nodes/Parametric EQ (CRT)
ComfyUI Node

Parametric EQ (CRT)

An eight-band parametric EQ, right inside your node graph

By PGCRT·Created 2 years ago·Updated 25 days ago· 148
Parametric EQ (CRT)
  • audio
  • AUDIO
◄sample_rate44100►
◄output_gain0.0►
◄bypassfalse►
◄band_1_enabledtrue►
◄band_1_type▾►
◄band_1_frequency1000.00►
◄band_1_gain0.00►
◄band_1_q1.00►
◄band_2_enabledtrue►
◄band_2_type▾►
◄band_2_frequency1000.00►
◄band_2_gain0.00►
◄band_2_q1.00►
◄band_3_enabledtrue►
◄band_3_type▾►
◄band_3_frequency1000.00►
◄band_3_gain0.00►
◄band_3_q1.00►
◄band_4_enabledtrue►
◄band_4_type▾►
◄band_4_frequency1000.00►
◄band_4_gain0.00►
◄band_4_q1.00►
◄band_5_enabledtrue►
◄band_5_type▾►
◄band_5_frequency1000.00►
◄band_5_gain0.00►
◄band_5_q1.00►
◄band_6_enabledtrue►
◄band_6_type▾►
◄band_6_frequency1000.00►
◄band_6_gain0.00►
◄band_6_q1.00►
◄band_7_enabledtrue►
◄band_7_type▾►
◄band_7_frequency1000.00►
◄band_7_gain0.00►
◄band_7_q1.00►
◄band_8_enabledtrue►
◄band_8_type▾►
◄band_8_frequency1000.00►
◄band_8_gain0.00►
◄band_8_q1.00►

Most AI-generated audio - voiceovers, synth vocals, extracted video soundtracks - comes out of the box with the same problems: boxy low-mids, sibilant highs, a rumble floor you can feel more than hear. Fixing that means an EQ, and the Parametric EQ (CRT) is a real one, not a toy: eight fully-configurable bands with proper filter math, all inside a ComfyUI node.

It sits in the CRT-Nodes audio category alongside the Tube Compressor, the Mono to Stereo converter, and the audio preview - a rare thing in ComfyUI, which is still mostly image-first. If you've got an audio branch at all, this is the node that makes it sound intentional.

How it works

Under the hood it builds eight EQBand filters from hand-designed biquad coefficients - each band's frequency, gain, and Q get turned into filter coefficients in Python, and the audio is processed with scipy's fast lfilter. No heavyweight DSP library, no GPU needed, just real filter math per channel. Each band is individually switchable and has five controls:

  • type - bell, low_pass, high_pass, low_shelf, high_shelf, band_pass, or notch
  • frequency (20 Hz – 20 kHz)
  • gain (−30 to +30 dB)
  • q (0.1–100) - how narrow or wide the band is
  • enabled - kill a band without deleting its settings

The node rebuilds its filter chain when the sample rate changes, which is a detail that matters: feed it a 48 kHz clip after running at 44.1 kHz and you'll still get correct filters instead of subtly wrong ones. There's also a global output_gain (make-up gain after the filters) and a bypass switch so you can A/B the processed audio against the source instantly.

Inputs that matter

  • audio - the AUDIO tensor to process.
  • sample_rate - default 44100; match it to your clip's actual rate.
  • output_gain - pull it down if the summed bands push you into clipping.
  • bypass - the A/B toggle; leave it off in production, keep it handy while tuning.
  • band_1 through band_8 - each with the five controls above. For a beginner: start with one or two bands, not all eight.

The moves that actually help

  • Kill the rumble: band with high_pass at ~80–100 Hz on a vocal.
  • Tame sibilance: a bell around 6–8 kHz with negative gain.
  • De-box vocals: negative bell around 250–400 Hz.
  • Polish the top end: gentle high_shelf boost above 10 kHz.

If you only ever touch one or two bands, you're still ahead of 90% of AI audio.

Install and gotchas

Pack-level: ComfyUI Manager → search CRT-Nodes → install and restart, or clone into custom_nodes. This node specifically leans on scipy, which is in the pack's requirements.txt (and almost always already present in a stock ComfyUI install) - if the audio category errors on load, pip install -r requirements.txt is the usual fix, and the pack will skip the audio nodes rather than crash ComfyUI.

The real-world gotcha is clipping: stacking boosts across several bands can push a 0dBFS track over. Watch output_gain, or run your audio through the Tube Compressor afterward. And remember the sample rate - if your EQ sounds like it's tuned to the wrong track, check that sample_rate matches the clip.

CategoryCRT/Audio

Inputs (44)

NameTypeDefaultDescription
audioAUDIO—
sample_rateINT441008000–192000—
output_gainFLOAT0.0-30–30—
bypassBOOLEANfalse—
band_1_enabledBOOLEANtrue—
band_1_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_1_frequencyFLOAT1000.0020–20000—
band_1_gainFLOAT0.00-30–30—
band_1_qFLOAT1.000.1–100—
band_2_enabledBOOLEANtrue—
band_2_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_2_frequencyFLOAT1000.0020–20000—
band_2_gainFLOAT0.00-30–30—
band_2_qFLOAT1.000.1–100—
band_3_enabledBOOLEANtrue—
band_3_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_3_frequencyFLOAT1000.0020–20000—
band_3_gainFLOAT0.00-30–30—
band_3_qFLOAT1.000.1–100—
band_4_enabledBOOLEANtrue—
band_4_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_4_frequencyFLOAT1000.0020–20000—
band_4_gainFLOAT0.00-30–30—
band_4_qFLOAT1.000.1–100—
band_5_enabledBOOLEANtrue—
band_5_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_5_frequencyFLOAT1000.0020–20000—
band_5_gainFLOAT0.00-30–30—
band_5_qFLOAT1.000.1–100—
band_6_enabledBOOLEANtrue—
band_6_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_6_frequencyFLOAT1000.0020–20000—
band_6_gainFLOAT0.00-30–30—
band_6_qFLOAT1.000.1–100—
band_7_enabledBOOLEANtrue—
band_7_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_7_frequencyFLOAT1000.0020–20000—
band_7_gainFLOAT0.00-30–30—
band_7_qFLOAT1.000.1–100—
band_8_enabledBOOLEANtrue—
band_8_typeCOMBO7 options: bell, low_pass, high_pass, low_shel, high_shel, band_pass, +1
band_8_frequencyFLOAT1000.0020–20000—
band_8_gainFLOAT0.00-30–30—
band_8_qFLOAT1.000.1–100—

Outputs (1)

NameTypeDescription
AUDIOAUDIO—