Nodes/GlitchNodes/Frequency Modulation WIP | GlitchNodes
ComfyUI Node

Frequency Modulation WIP | GlitchNodes

FM radio, but for your image

By pxl-pshr·Created 2 years ago·Updated 3 months ago· 73
Frequency Modulation WIP | GlitchNodes
  • image
  • image
carrier_frequency10.00
bandwidth10.0
quantization0
colorspace
first_channel_onlyfalse
lowpass1_ontrue
lowpass2_ontrue
lowpass3_ontrue
lowpass1_cutoff0.25
lowpass2_cutoff0.10
lowpass3_cutoff0.05
negatefalse
blend_mode

FrequencyModulation treats your image like a broadcast signal: it modulates the pixel data onto a carrier wave, runs it through low-pass filters, and demodulates it back - the visual equivalent of picking up a station through static. It's one of the two nodes in GlitchNodes that aren't even listed in the pack README (ASCII is the other), and its display name says it plainly: WIP. Which is to say: expect rough edges, but the effect is genuinely unlike anything else in the pack - wavy, radio-static distortions that ripple through the whole frame.

The math is straight out of a signals textbook. The image is phase-modulated onto a cosine carrier (carrier_frequency sets the wave), then the demodulated result passes through up to three cascaded low-pass filters with independent cutoffs (lowpass1_cutoff, lowpass2_cutoff, lowpass3_cutoff, each 0.01–1.0). Lower cutoffs = more aggressive smoothing = more visible smear. There's also a bandwidth control for how much of the spectrum survives. It runs in RGB or YUV colorspace - YUV is worth trying because modulating luma separately from chroma gives you that distinct broadcast-decay color bleeding.

The inputs that matter

  • carrier_frequency (0.01–100, default 10) - the wave everything rides on. Low values give big, slow undulations; high values get into fine moiré territory.
  • bandwidth (0.1–100, default 10) - how much frequency content passes through.
  • lowpass1/2/3_on and their cutoffs - the filter stack. Defaults (0.25, 0.1, 0.05) already produce a strong effect; turn filters off if you want the raw modulated mess.
  • quantization (0–255, default 0) - bit-depth reduction on the way through; 0 is off.
  • negate - inverts the signal phase, which flips the artifact pattern.
  • blend_mode - NONE, ADD, SUBTRACT, MULTIPLY, SCREEN, or OVERLAY. This blends the modulated result back with the original - the single most useful control for keeping the output usable. SCREEN and OVERLAY let you keep the image recognizable while the static plays over it.
  • first_channel_only - process just the first channel and leave the rest alone.

Output is image (IMAGE) → PreviewImage/SaveImage.

Installing it

One pack install covers it: ComfyUI Manager → Install Custom Nodes → search "GlitchNodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/pxl-pshr/GlitchNodes
# restart ComfyUI

Dependencies are the standard GlitchNodes set - numpy, torch, Pillow, opencv-python, scipy. No models to fetch.

Gotchas

Where people get burned: everything at default can flatten your image into a smear, because three stacked low-pass filters are a lot of filtering. Before you decide it's broken, drop bandwidth, raise the cutoffs, or switch blend_mode off NONE to a blend that preserves the original. And remember it's WIP - the node's own README entry doesn't exist, and the pack's global disclaimer is that anything may "break or even error." Tinker in small steps, keep the original wired to a PreviewImage alongside it, and you'll be fine.

CategoryGlitchNodes

Inputs (14)

NameTypeDefaultDescription
imageIMAGE
carrier_frequencyFLOAT10.000.01–100
bandwidthFLOAT10.00.1–100
quantizationINT00–255
colorspaceCOMBO2 options: RGB, YUV
first_channel_onlyBOOLEANfalse
lowpass1_onBOOLEANtrue
lowpass2_onBOOLEANtrue
lowpass3_onBOOLEANtrue
lowpass1_cutoffFLOAT0.250.01–1
lowpass2_cutoffFLOAT0.100.01–1
lowpass3_cutoffFLOAT0.050.01–1
negateBOOLEANfalse
blend_modeCOMBO6 options: NONE, ADD, SUBTRACT, MULTIPLY, SCREEN, OVERLAY

Outputs (1)

NameTypeDescription
imageIMAGE