Sensor Heat Noise PRO
Digital sensor noise, aimed only at the shadows where it belongs
- image
- IMAGE
Real digital photos taken in low light have a tell: the shadows are full of colored noise - speckled red and blue mottling in the dark areas while the midtones and highlights stay clean. That's thermal sensor noise, caused by the sensor heating up during a long exposure and its photodiodes firing on their own. AI renders have clean, dead-black shadows, which is exactly why they look digital in the worst sense. Sensor Heat Noise PRO puts the noise back - but only in the shadows, with the right color character, so it reads as a real low-light capture rather than a static overlay.
It's the digital-counterpart node to Film Grain PRO in the same pack: film grain is a luminance texture across the whole frame, sensor heat noise is a chroma mottle confined to the darks. Together they're the "shot on a real camera at dusk" combo.
How it works
The node computes a perceptual luminance for every pixel and builds a smooth "shadow mask" from it - 1.0 where luminance is zero, falling to 0.0 at shadow_threshold. Crucially, it's a smooth-step falloff, not a hard binary cut, so the noise fades in organically instead of ending at a visible line. It then generates Gaussian-distributed noise (normal distribution, not uniform, so it clumps like real sensor noise rather than forming grids), weights it so red and blue dominate while green stays almost silent - the real signature of thermal noise - micro-blurs it to break 1×1 pixel stiffness, and adds it to the image scaled by the shadow mask and noise_strength.
The inputs that matter
image- the IMAGE to grunge up.shadow_threshold(default 0.15, 0–0.5) - the luminance ceiling for noise. Lower = noise only in the deepest shadows; raise toward 0.3–0.4 if you want moodier, noisier low-light.noise_strength(default 0.1, 0–1) - overall amount.red_noise(default 1.0, 0–2) andblue_noise(default 1.2, 0–2) - per-channel noise weight. The default blue-leaning balance is the authentic sensor look.
Output: a single IMAGE of the same size.
Installing it
Same pack as all the rest - ComfyUI Manager → search "Post Processing PRO", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Guillaume-127/ConfyUI_Post_Processing_PRO
Restart. No requirements, no models; pure numpy noise + a small OpenCV blur.
Where people get tripped up
The biggest trap is cranking noise_strength to make the effect visible - at the 0.1 default it should be barely there, and the effect lives in the shadows, so view a dark crop before you judge it. If it's still invisible, lower shadow_threshold a touch rather than spiking strength, because strength above ~0.3 starts to look like an Instagram noise filter instead of sensor physics. Also note it's additive per-frame - on a batch or video this can shimmer slightly, which is actually closer to real sensor behavior, but if that annoys you, keep the strength low. Pair it with Film Grain PRO for the luminance layer, or with FPE Kodak 2383 PRO if you want that density in the darks too.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| shadow_threshold | FLOAT | 0.150–0.5 | — |
| noise_strength | FLOAT | 0.100–1 | — |
| red_noise | FLOAT | 1.000–2 | — |
| blue_noise | FLOAT | 1.200–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |