Nodes/ComfyUI-Image-Filters/Poisson Noise Image
ComfyUI Node

Poisson Noise Image

Realistic camera-sensor grain, not generic static

By spacepxl·Created 3 years ago·Updated 8 months ago· 293
Poisson Noise Image
  • image
  • IMAGE
gain1000.000
gain_r1.000
gain_g2.000
gain_b0.500
clamptrue
seed0

Quick flag before anything else: this node doesn't actually appear in the pack's own README node list - it showed up when we pulled the node's live schema straight from the repo, so what follows is grounded in the parameters themselves and general imaging science rather than the author's own description. If you want the author's framing in their own words, it isn't written down anywhere public as of this pack's README.

What Poisson noise actually is

Most "add noise" filters use Gaussian noise - the same random amount of static everywhere, regardless of how bright a pixel is. Real camera sensors don't work that way. Photon arrival is a counting process, and counting processes follow a Poisson distribution, where the relative noise (how much a pixel's value jitters compared to its brightness) is highest in dark shadows and lowest in bright highlights. That's why real photos have visibly grainier shadows and cleaner highlights, and it's why Poisson noise reads as convincingly "photographic" in a way flat Gaussian static doesn't. This node simulates that specific behavior rather than uniform noise.

Why you'd use this over a generic noise/grain node

AI-generated images are often suspiciously clean - no sensor grain, no chroma noise, nothing that says "this came from a camera." Adding a believable noise layer is a known trick for pushing an image toward looking captured rather than generated (this is a documented technique across the photorealism community - plenty of "amateur photography" style LoRAs bake grain in directly rather than relying on a post-process filter). This node gives you that as a controllable post-process step instead of baking it into generation, which means you can dial it per-image rather than being stuck with whatever a checkpoint decided to bake in.

Inputs and outputs

  • image (IMAGE) - the source.
  • gain (default 1000, up to 1,000,000) - the overall noise-strength control. In a Poisson noise model, this stands in for how many "photons" the simulated sensor is collecting: turn it up and the simulated signal is stronger relative to its own noise, so the grain gets subtler; turn it down and relative noise increases.
  • gain_r / gain_g / gain_b (defaults 1, 2, 0.5) - per-channel multipliers on top of the main gain. The defaults aren't arbitrary - they mirror how real Bayer-pattern camera sensors behave: green gets sampled twice as often as red or blue in a standard Bayer filter, so it typically comes out with the best signal-to-noise ratio (hence the highest default gain), while blue is usually the noisiest channel on consumer sensors (hence the lowest default). You can push these around to simulate a different sensor's noise character, or push them apart further for a stylized, colorful-noise look.
  • clamp (default on) - clips output values back into the valid 0–1 range after noise is added, avoiding blown-out artifacts from noise pushing a bright pixel past white.
  • seed - the RNG seed, for reproducibility.

Output is a single IMAGE.

Installing it

ComfyUI Manager: search "ComfyUI-Image-Filters," install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/spacepxl/ComfyUI-Image-Filters

pip install -r requirements.txt (or install.bat on Windows), restart. No model weights needed - this is generated noise, not a learned effect.

Same OpenCV caveat as the rest of this pack: if a different node pack already installed a conflicting cv2 build, you can get import errors on startup across this whole repo. import_error_install.bat fixes it by reinstalling the single correct opencv variant.

Common issues

The most common mistake is cranking gain down expecting more noise and being confused when the image instead looks blown out or oddly banded - remember the direction here is inverted from what feels intuitive: lower gain means the simulation is modeling fewer effective "photons," which means more relative noise, and at extreme low values that can look less like grain and more like broken pixels. Start from the defaults and nudge gradually rather than jumping to an extreme value. If your noise looks flat and uniform instead of realistic, double check you didn't zero out the per-channel gains - the differentiated gain_r/gain_g/gain_b defaults are what gives this its characteristic sensor-like color variation; setting them all equal gets you something closer to monochrome noise.

CategoryImage-Filters/image

Inputs (7)

NameTypeDefaultDescription
imageIMAGE
gainFLOAT1000.0000.001–1000000
gain_rFLOAT1.0000–1000000
gain_gFLOAT2.0000–1000000
gain_bFLOAT0.5000–1000000
clampBOOLEANtrue
seedINT00–18446744073709550000

Outputs (1)

NameTypeDescription
IMAGEIMAGE