ImageNoiseBinomial
The digital-static node for dithered, dotty texture
- images
- IMAGE
Binomial noise is what "digital static" looks like if you zoom in: discrete, dotty, with a clean mathematical edge to it. ImageNoiseBinomial from the Allor Plugin samples that distribution and adds it to your image. It's the sibling nobody talks about next to Gaussian and Beta, but it's the one that nails a specific look - dithered retro textures, VHS-era corruption, pixel-art dithering prep, anything where you want noise that reads as dots of color rather than smooth grain.
How it works
The noise comes from np.random.binomial(n, p), the count of successes in n coin flips each with probability p. In this node:
n(INT, default 128, max 255) sets the scale of the discrete values. The sample is divided by 255 before adding, son=255spreads over the full brightness range while smallnproduces coarser, chunkier jumps.p(FLOAT, default 0.5) biases how often a "success" lands. At 0.5 the noise is symmetric and evenly spread; moveptoward 0 or 1 and the values pile up at one end, skewing the character of the noise.
The result is added to the image (or subtracted with invert), clamped, and written back to whichever channels you pick. The same channels dropdown as every Allor noise node applies - rgb, rgba, rg, rb, ra, gb, ga, ba, r, g, b, a - and monochromatic (true/false) decides whether all channels share one noise field or each channel gets its own, which changes the look from clean monochrome static to color mottle.
The practical difference from the pack's Gaussian node: gaussian noise is smooth and continuous, great for film grain. Binomial noise is stepwise - values come in quantized chunks - so it reads as digital artifact or dither rather than analog grain. If you're trying to sell "old CRT," "compressed video," or "scanned halftone," this is the one.
Inputs and outputs
images(IMAGE) - single frame or batch; all frames get noise.n(INT, default 128, min 1, max 255) - the discrete step size / range of the noise.p(FLOAT, default 0.5, max 1.0) - the success bias, skewing the noise's brightness character.monochromatic(false/true),invert(false/true),channels- shared family controls.
Output is an IMAGE at the same resolution and channel count.
Installing it
It's in the Allor Plugin: search "Allor Plugin" in ComfyUI Manager, install, restart. Or clone manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Nourepide/ComfyUI-Allor
No models required for noise nodes. First run creates config.json with the pack's daily auto-update; you can tune or disable it.
Where people get burned
The main gotcha is treating n like a strength slider - it's more like a coarseness dial, and combined with p you can push the noise so far it reads as random colored dots instead of texture. Start with defaults (n=128, p=0.5) and nudge p first; it's the gentler control. Also be aware this is per-frame noise, so in an animation every frame gets an independent static field - authentic for CRT flicker, useless if you wanted a stable texture across a video. And as always in this family, forgetting invert is on turns your "add static" pass into a "subtract static" one.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| n | INT | 1281–255 | — |
| p | FLOAT | 0.50 | — |
| monochromatic | COMBO | 2 options: false, true | |
| invert | COMBO | 2 options: false, true | |
| channels | COMBO | 12 options: rgb, rgba, rg, rb, ra, gb, +6 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |