π¬ Spectral Processor
Surgery in the Frequency Domain β Ten Spectral Effects in One Node
- audio
- processed_audio
Normal audio processing happens sample by sample. Spectral processing is different: the audio gets transformed into the frequency domain, operated on there, and transformed back. That's how you get effects that sound like the audio's guts are being rearranged - and it's exactly what SpectralProcessor does, with ten modes. It's the most sci-fi node in the pack.
What it does
You feed in audio and get back processed_audio (plus, implicitly, whatever the FFT analysis says - the node is built on the same frame-based FFT engine as the analyzer nodes). The spectral_mode dropdown picks the operation:
- enhance / suppress - boost or cut a chosen frequency region (set by
frequency_range_low/high). - shift - move a band of frequencies up or down, the classic "spectral displacement" effect that makes things sound like a radio tuning through stations.
- morph - blend the spectrum toward something else, good for transitions and alien textures.
- gate - silence bins below a threshold, i.e., spectral noise reduction.
- compress - tame the loudest bins, spectral compression.
- chaos - scramble the spectral bins; pure digital weirdness.
- phase - mess with phase relationships between bins, which audibly smears and widens things.
- vocoder - the classic talkbox effect; use the frequency ranges as the filter banks.
- freeze - hold the current spectrum in place, producing an endless shimmering drone from any moment of the audio.
How it works
The pipeline is the standard STFT dance: audio is sliced into overlapping frames of fft_size (512β8192), windowed with window_type, FFT'd, the chosen mode operates on the magnitude/phase of each bin, then the inverse FFT and overlap-add reconstruct the time-domain signal. overlap_factor (0.25β0.95) controls the frame overlap - more overlap means smoother, more artifact-free results at a higher compute cost. The optional phase_randomization (0β1) scrambles phase on the way out, which makes things sound grainier and more "spectral" in the hazy way, and wet_dry_mix blends the processed result with the original.
intensity (0β2) is the global strength of the effect, and the frequency_range_low/high controls scope the effect to a band - crucial, because running full-spectrum chaos on everything gets old fast.
The inputs that matter
spectral_mode- the identity.freezeandshiftare the two you'll demo for friends.frequency_range_low/frequency_range_high- target a band and the effect becomes musical instead of a mess.intensity- how much of the effect you hear.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/eg0pr0xy/comfyui_noisegen.git
cd comfyui_noisegen
pip install -r requirements.txt
(Windows embedded Python: ComfyUI\python_embeded\python.exe -m pip install -r requirements.txt.) Or ComfyUI Manager β search "NoiseGen" / eg0pr0xy. No model files, no keys.
Gotchas
The pack rule applies - pip install is mandatory, scipy is imported at load and takes the whole pack with it if missing. Bigger fft_size values give finer frequency resolution but worse time resolution: on percussive material a large FFT smears transients into mush, so match the FFT size to the material (2048 is a good default for most noise). And phase_randomization at high values turns almost anything into pure texture - great for noise, wrong for anything you want to stay recognizable.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Input audio for spectral processing | |
| spectral_mode | COMBO | enhance | 10 options: enhance, suppress, shift, morph, gate, compress, +4 |
| fft_size | COMBO | 2048 | 5 options: 512, 1024, 2048, 4096, 8192 |
| overlap_factor | FLOAT | 0.750.25β0.95 | β |
| window_type | COMBO | hann | 5 options: hann, hamming, blackman, kaiser, rectangular |
| frequency_range_low | FLOAT | 10010β10000 | β |
| frequency_range_high | FLOAT | 8000100β20000 | β |
| intensity | FLOAT | 0.500β2 | β |
| amplitude | FLOAT | 0.800β2 | β |
| wet_dry_mixopt | FLOAT | 1.000β1 | β |
| phase_randomizationopt | FLOAT | 0.000β1 | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| processed_audio | AUDIO | β |