Academia SD Masked Noise ๐ซ๏ธ
Film grain exactly where you want it โ masked, feathered, and honest
- image
- mask
- IMAGE
- PROCESSED_MASK
Cinematic grain is a finish, not a filter - you usually want it on the subject or the whole frame, but rarely blasting through a face at full blast. Most noise nodes just slather random pixels over everything. This one is a proper compositor: it takes your image and a mask, applies noise inside the masked region, feathers the edges so it blends, and even hands back the processed mask if you want to reuse it downstream. If you've ever wanted the look of film without the look of "someone ran Noise through Photoshop at 100%", this is the node.
How it works
The core claim that separates it from naive nodes: the noise is additive and masked, not blended over the whole frame. noise_intensity (0โ1) softens the grain's internal contrast toward neutral grey rather than fading the effect's opacity - so a strong mask still gets full-strength grain, just finer. opacity is the real "how strong is the effect" dial.
The pipeline is: take your mask, optionally shrink it away from edges (shrink_pixels), blur it (feather_pixels, default 10, using a gaussian) for soft transitions, multiply by opacity, then composite noise through that mask onto the image. noise_type switches between classic Black & White film grain and Color chromatic digital noise. And solid_base is a fun extra: it lets you lay a solid color underneath the noise inside the mask (with its own solid_color picker and solid_opacity), which is great for giving the effect volume over busy backgrounds instead of noise floating over whatever's there.
The two outputs are IMAGE (your grainy composite) and PROCESSED_MASK - the shrunken, feathered mask, ready to route into an inpainting or ControlNet pipeline so everything downstream agrees on the same region.
The inputs that matter
- image and mask - the compositor's two sources.
- noise_type, noise_intensity, opacity - the look.
- shrink_pixels, feather_pixels - edge control; feather 10 is a good starting point.
Install
Pack install: ComfyUI Manager โ "AcademiaSD", or git clone https://github.com/AcademiaSD/comfyui_AcademiaSD, restart. No extra dependencies - it's torch tensor math.
The practical take
The PROCESSED_MASK output is the sleeper feature - instead of rebuilding a feathered mask with three separate mask nodes, you get the exact region the grain touched, guaranteed to line up with the effect. Where people trip: noise_intensity is not the opacity slider, and cranking opacity to 1 genuinely replaces the masked pixels with grain, which is what you want for a burnt-out film look and not what you want for subtle texture. Start at opacity ~0.3, intensity ~0.5, and feather ~10, and tune from there.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | โ | |
| mask | MASK | โ | |
| noise_type | COMBO | Black & White | 2 options: Black & White, Color |
| noise_intensity | FLOAT | 0.500โ1 | โ |
| shrink_pixels | INT | 00โ500 | โ |
| feather_pixels | INT | 100โ500 | โ |
| opacity | FLOAT | 1.000โ1 | โ |
| solid_base | BOOLEAN | false | โ |
| solid_opacity | FLOAT | 1.000โ1 | โ |
| solid_color | STRING | #000000 | โ |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | โ |
| PROCESSED_MASK | MASK | โ |