FL Image Pixelator
Pixelation with edge detection and audio pulse
- image
- mask
- IMAGE
Pixelation sounds like the most basic effect in the world - shrink, blow back up, done. FL_ImagePixelator does more than that, and the extra is where it earns a spot in Fill-Nodes' VFX drawer. It runs the blocky downsampling with a morphological-gradient edge detector (via Kornia) so edges read differently from flat areas, and it can pulse the pixelation strength in time with audio. That last part is the giveaway that this node was built for music videos, not for censoring bars.
If you just want a clean retro pixel look on a still, it does that fine. If you want the blocks to breathe with a kick drum across a sequence, that's the actual reason it exists.
How it works
The base operation shrinks the image by scale_factor and scales it back, giving you chunky pixels. The kernel_size controls the morphological gradient step that shapes how edges get treated during that process. Then comes the reactive layer: feed it an envelope_json (an audio envelope produced by Fill-Nodes' audio-reactive nodes) and set modulation, and the pixelation intensity is driven per-frame by the envelope - bigger blocks on the loud parts, finer on the quiet parts. blend_intensity controls how strongly the effect mixes back against the original, and mask lets you confine it to part of the frame.
Output is a single IMAGE (or image batch, if you fed a sequence). Wire it into your video combine or straight to a preview.
The inputs that matter
image- the frame or batch to pixelate. The only required input.scale_factor- the big one. 0.01 to 0.2; lower means smaller, denser blocks are removed, higher means chunkier pixelation. This is your "how blocky" dial.kernel_size- the edge-gradient kernel. Small keeps edges tight; larger softens.modulation+envelope_json- the audio-reactive pair. Leaveenvelope_jsonempty andmodulationat 0 for a plain static pixelate; supply an envelope to make it dance.blend_intensity- 0 to 2, how hard the pixelated result blends over the source.maskandinvert- restrict the effect to a region, and flip which side of the mask it applies to.
Installing it
Ships with the Fill-Nodes pack. ComfyUI Manager: search ComfyUI_Fill-Nodes, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
then restart. This node depends on Kornia for the edge-detection math, which the pack installs on first load - if the console churns installing torch-adjacent libraries, that's expected. The big "Machine Delusions" banner at startup is just the pack's splash, not a problem.
Where people get tripped up
- Without
envelope_jsonit's just a pixelator. All the audio-reactive magic needs an envelope from the pack's audio nodes (the BPM analyzer → reactive-envelope chain). If you plugged in an image and nothing pulses, that's why - you haven't given it anything to react to. scale_factoris inverted from intuition for some people. It's a downscale ratio, so small values touch fine detail and large values give big chunky blocks. Sweep it a couple of steps to get a feel before committing.- Kornia is a real dependency. If the node fails to load, check that Kornia installed cleanly - it's the most likely culprit, and a version clash with another pack's torch requirements is the classic ComfyUI dependency-hell scenario.
- On a sequence, keep your frame count consistent with the envelope. The reactive modulation is per-frame, so if your image batch and your audio envelope disagree on length, the pulse will drift against the beat.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| envelope_jsonopt | STRING | — | |
| blend_intensityopt | FLOAT | 1.000–2 | — |
| invertopt | BOOLEAN | false | — |
| maskopt | IMAGE | — | |
| scale_factoropt | FLOAT | 0.050.01–0.2 | — |
| kernel_sizeopt | INT | 3 | — |
| modulationopt | FLOAT | 0.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |