Nodes/MKRShift_Nodes/Noise Reduction Spectral
ComfyUI Node

Noise Reduction Spectral

A real spectral gate, minus the AI hype

By criskb·Created 7 months ago·Updated 5 months ago· 0
Noise Reduction Spectral
  • audio
  • audio
  • output_path
  • duration_sec
  • summary
noise_profile_sec0.50
sensitivity1.5
reduction_db-14.0
fft_size1024
output_formatauto
filename_prefixMKR_noise_reduce
subfolder
overwritefalse
filename_label

Clean the hiss without a denoiser model

The pack's other audio nodes do the fancy stuff (stems, de-essing, ducking); this one does the boring, essential job: remove constant background noise - fan hum, room tone hiss, tape noise - from a recording. MKRNoiseReductionSpectral is a classic spectral gate: it learns what the noise sounds like from a sample, then suppresses those frequencies across the whole track. No model download, no GPU, no "AI denoiser" theater. It's DSP, and it works.

It's part of MKRShift_Nodes, the utility pack by Cris K B. Everything runs in numpy, and it saves results with ffmpeg - so ffmpeg needs to be on PATH for the encode, though the noise math itself is pure Python.

How it works

The trick to spectral denoising is that noise is learned from the quiet parts. The node takes the first noise_profile_sec seconds (default 0.5) of the audio, transforms it into the frequency domain (FFT, fft_size default 1024), and builds a noise floor profile from those frames. Then it gates the whole signal: frequency bins whose energy is below sensitivity × the noise floor get attenuated by reduction_db (default −14 dB), and everything above passes. That's the whole mechanism - STFT, threshold, gate, inverse STFT. Simple, well-understood, and why it's called "spectral."

The knob that matters most is noise_profile_sec: those first half-second frames are your noise reference, so the recording needs silence/room tone at the start. Point this at a clip that starts with talking and the "noise" it learns is voice. That's the single most common mistake.

The other inputs

  • sensitivity (default 1.5) - the gate threshold multiplier. Lower = more aggressive (risks eating quiet speech); higher = safer, lets more noise through. 1.5 is a reasonable middle.
  • reduction_db (−60 to −1, default −14) - how hard the gate attenuates. −14 is subtle; −30+ is where you start hearing the "underwater" spectral artifacts.
  • fft_size - frequency resolution. 1024 is fine for speech/music; higher gives finer frequency detail but worse time resolution.
  • Standard save controls: output_format (auto/wav/mp3/flac/ogg), filename_prefix, subfolder, overwrite, optional filename_label.

Outputs

audio (the cleaned MKR_AUDIO payload, chainable into other MKR audio nodes), output_path, duration_sec, and a summary JSON that includes the actual settings used (good for comparing runs).

Install and honest expectations

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart, or install "MKRShift Nodes" via ComfyUI Manager. No pip deps, no models.

Expectation-setting: a spectral gate is not an AI denoiser. It excels at steady noise - hum, hiss, rumble - and it will never fully remove broadband hiss without also dulling the signal. If you need "remove the wind/ambulance from a street recording," spectral gating isn't that tool. But for the eternal problem of "my AI voiceover picked up the fan," give the file a half-second of silence, set noise_profile_sec to match it, and watch the hiss drop out in one pass.

CategoryMKRShift Nodes/Media/Audio/Utility

Inputs (10)

NameTypeDefaultDescription
audio*
noise_profile_secFLOAT0.500.05–10
sensitivityFLOAT1.50.5–8
reduction_dbFLOAT-14.0-60–-1
fft_sizeINT1024256–8192
output_formatCOMBOauto5 options: auto, wav, mp3, flac, ogg
filename_prefixSTRINGMKR_noise_reduce
subfolderSTRING
overwriteBOOLEANfalse
filename_labeloptSTRING

Outputs (4)

NameTypeDescription
audioMKR_AUDIO
output_pathSTRING
duration_secFLOAT
summarySTRING