Nodes/comfyui-axces2000/Artifact Cleaner (Notch / Spectral Gate)
ComfyUI Node

Artifact Cleaner (Notch / Spectral Gate)

A notch filter that knows when to back off — pulling the whistle out of AI audio

By axces2000·Created 6 months ago·Updated about 9 hours ago· 12
Artifact Cleaner (Notch / Spectral Gate)
  • audio
  • AUDIO
frequencies14801
modedynamic_spectral_gate
strength_db12.0
q_factor8.0
relative_bandwidth0.020

You know the sound. An AI-generated song where everything is almost right, except there's a thin high-frequency whistle threading through the whole mix - or a faint metallic "sheen" that makes it read as synthetic the second you hear it. That's not noise, and it's not the model being bad at music. It's a narrowband artifact, often from the neural-vocoder upsampling stage, and it sits at a fixed frequency like a bent string on a guitar. Artifact Cleaner is the node that cuts that one bent string out without touching the rest of the guitar.

It's the cleanup half of a two-node act inside the comfyui-axces2000 pack, all of it aimed at the "bolted-on" audio layer ComfyUI has grown in the last couple years. Generate a track in Suno or locally with ACE-Step, pull it in with the pack's Audio Loader, and instead of accepting the artifacts as the price of doing business, notch them out. The author's own default - 14801 Hz - is a whistle he says he confirmed by ear in Suno output, stable across tracks and clean to remove. Treat that number as a starting point, not a law: his own tooltip warns it drifts as Suno's models update.

How it works: two very different surgical tools

Flip the mode dropdown and you get two philosophies of the same job.

static_notch is the blunt, honest one. For each frequency you list, it runs a narrow IIR notch filter (scipy.signal.iirnotch) applied zero-phase with filtfilt, so the cut is precise and doesn't smear the timing. Cheap, predictable, and right when the artifact is a fixed tone the whole track through - exactly the 14.8 kHz Suno whistle. q_factor (default 8, higher = sharper) controls how tight each notch is.

dynamic_spectral_gate is the default, and it's the smarter mode. In the STFT domain it builds a gain curve that dips each target band down to a floor set by strength_db, but it only applies that cut in time frames where the in-band energy clearly exceeds the local spectral envelope (it compares each bin against its frequency-neighborhood, not its own history). Translation: when a real cymbal crash or a legitimate harmonic is occupying that frequency at that moment, the gate backs off and lets the music through. That's why it's safer when real content shares the band - a static notch there would dull the mix along with the artifact. relative_bandwidth (default 0.02, meaning 2% of the center frequency) sets how wide the gate treats each target as.

The inputs that actually matter

Two of them, really. frequencies takes a comma-separated string of Hz values - wire it straight from the sibling ArtifactFrequencyAnalyzer node and you never type a number. mode is the other. strength_db (default 12, up to 40) is how deep the cut goes in both modes; start at 12 and push it only if the tone survives. q_factor and relative_bandwidth each only apply to one mode, which the tooltips say plainly. Feed it an AUDIO from any source and you get AUDIO back out - same waveform, same sample rate, so it drops into SaveAudio or PreviewAudio like any other audio node.

Installing it

Standard custom-node drill:

cd ComfyUI/custom_nodes
git clone https://github.com/axces2000/comfyui-axces2000
pip install -r comfyui-axces2000/requirements.txt

Restart ComfyUI, or search "axces2000" in ComfyUI Manager. No model downloads - this is pure DSP on the CPU, nothing to grab. One real gotcha: the README's requirements only pin torchaudio and soundfile, but both artifact nodes hard-import scipy at the top of their files. If your environment lacks scipy, the whole pack fails to register at startup. Most ComfyUI installs already have scipy from other node packs, which is why this doesn't bite everyone - but if nothing from axces2000 shows up after install, pip install scipy is the fix. Matplotlib is optional and only feeds the analyzer's plot, never the cleaner.

Troubleshooting and honest limits

Where people get burned: notching a frequency that's actually a vocal or instrument note, which guts the music - that's what dynamic_spectral_gate exists to prevent, so switch to it if a static notch leaves your track sounding hollow or comb-filtered. An empty frequencies string passes audio through unchanged, which is handy for A/B testing but confusing if you expected it to do something. And keep expectations honest: this removes narrow tonal junk. Broadband smearing, clipping distortion, or compression muddle are outside what any notch bank can fix. It's a scalpel for the AI-audio tell, not a magic "make this sound human" button.

Categoryaxces2000/audio

Inputs (6)

NameTypeDefaultDescription
audioAUDIO
frequenciesSTRING14801Comma-separated Hz values, e.g. from ArtifactFrequencyAnalyzer. 14801 Hz confirmed by ear (Sep 2026) as an audible high-frequency 'whistle' in Suno output — stable across tracks, absent from live recordings, notches cleanly without touching neighboring content. May drift with Suno model/version updates.
modeCOMBOdynamic_spectral_gate2 options: dynamic_spectral_gate, static_notch
strength_dbFLOAT12.00–40
q_factorFLOAT8.00.5–50Notch sharpness, static_notch mode only.
relative_bandwidthFLOAT0.0200.001–0.2Fraction of center frequency treated as the notch width, dynamic mode only.

Outputs (1)

NameTypeDescription
AUDIOAUDIO