Corruptor | GlitchNodes
Wavelet corruption you can actually steer
- image
- image
Corruptor is what happens when a glitch node tries to be art-directed instead of random. Instead of throwing bytes around, it decomposes your image into wavelet coefficients, mangles those, and rebuilds it - which produces corruption that has structure and direction rather than pure noise. If you want your glitch to look like "signal degradation" instead of "I smashed the file", this is the node.
Mechanically it's a custom wavelet transform implemented in the node itself (no PyWavelets dependency - the README doesn't mention it and the source doesn't use it). The image is split into approximation and detail coefficients, and scaling_factor_in and scaling_factor_out drive how aggressively those coefficients are quantized/destroyed before reconstruction. That's the clever inversion: for this node, lower scaling values mean more extreme corruption, higher values mean subtler artifacts. Start around the defaults (80) and nudge down toward 10–30 to see what it can actually do.
The inputs that matter
- scaling_factor_in / scaling_factor_out (0–1000, default 80) - the two corruption-intensity knobs. Think of
inas the initial pass andoutas how it's re-amplified; the pair is how you dial from "slight static" to "beyond recognition." - noise_strength (0–100) and noise_distribution (
normal,uniform,salt_pepper) - random distortion layered on top. Salt-and-pepper gives those classic white/black sparkles. - color_space -
RGB,HSV,LAB, orYUV. This is the fun one: corrupting in HSV means the hue channel wraps around, giving you rainbow bleed; LAB gives skin-tone-friendly weirdness; YUV looks like broadcast signal decay. Same corruption, totally different flavor. - channels_combined - when on, all channels corrupt as one stream; when off, each channel is mangled independently, which makes the artifacts look channel-split.
- wavelet_floor_mode (
regular,absolute,threshold) and wavelet_padding (edge,constant,reflect,symmetric) - the advanced signal-processing controls. Threshold mode useswavelet_threshold(default 0.5) to decide what survives. Most people never touch these; they exist because wavelet corruption genuinely responds to them.
seed is required (not optional like in Pixel8Bit), so reproducible runs are the default. Output is image (IMAGE) → PreviewImage/SaveImage. Single images or batches both work.
Installing it
Standard GlitchNodes install: ComfyUI Manager → search "GlitchNodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/pxl-pshr/GlitchNodes
# restart ComfyUI
It needs numpy, torch, Pillow, opencv-python, scipy - Manager grabs them; no model files.
Gotchas
The inverted scaling semantics (lower = more corruption) trips up almost everyone on first use - set scaling_factor_in to 10 and you'll believe it. Also, batch runs can be slow because every frame goes through a full forward+inverse wavelet transform per channel; test on one frame. And the pack's README owns up to it: "highly experimental and may break or even error." When Corruptor breaks, it usually just errors out on a specific batch - isolate the frame and retry.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| scaling_factor_in | FLOAT | 80.00.1–1000 | — |
| scaling_factor_out | FLOAT | 80.00–1000 | — |
| noise_strength | FLOAT | 10.00–100 | — |
| color_space | COMBO | 4 options: RGB, HSV, LAB, YUV | |
| channels_combined | BOOLEAN | true | — |
| wavelet_floor_mode | COMBO | regular | 3 options: regular, absolute, threshold |
| wavelet_padding | COMBO | edge | 4 options: edge, constant, reflect, symmetric |
| seed | INT | 00–18446744073709550000 | — |
| wavelet_thresholdopt | FLOAT | 0.500–10 | — |
| noise_distributionopt | COMBO | normal | 3 options: normal, uniform, salt_pepper |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |