Nodes/ComfyUI Layer Style/LayerFilter: Film V2
ComfyUI Node Runs on cloud

LayerFilter: Film V2

Film V2 — grain, vignette and fake depth-of-field in one node

By chflame163·Created 3 years ago·Updated 5 days ago· 3,113
LayerFilter: Film V2
  • image
  • depth_map
  • image
â—„center_x0.50â–º
â—„center_y0.50â–º
â—„saturation1.00â–º
â—„vignette_intensity0.50â–º
◄grain_method▾►
â—„grain_power0.15â–º
â—„grain_scale1.0â–º
â—„grain_sat0.50â–º
â—„filmgrainer_shadows0.60â–º
â—„filmgrainer_highs0.20â–º
â—„blur_strength90â–º
â—„blur_focus_spread2.2â–º
â—„focal_depth0.90â–º

AI renders come out too clean. No grain, no lens falloff, everything in perfect focus - that flat digital sheen that reads as "generated" before you've even looked closely. Film V2 dirties it up on purpose. It layers film grain, a vignette, and an optional depth-of-field blur onto your image so it looks like it went through a camera and a roll of stock instead of a diffusion model.

It's a one-stop "make it photographic" node. Instead of chaining a separate grain node, a vignette node, and a blur, you get all three tuned together. The grain in particular is the thing that sells realism - it breaks up the too-smooth gradients that give AI images away.

How it works

Three effects stacked. The vignette darkens toward the edges around a center point you set. The grain adds per-pixel noise using one of two engines, with separate control over how it hits shadows versus highlights (real film grain isn't uniform). The blur is a fake depth-of-field: if you feed a depth map, it keeps your focal plane sharp and blurs what's nearer/farther; without one, it's a general softness pass.

The inputs and outputs that matter

  • grain_method - fastgrain (quick) or filmgrainer (the nicer, tunable one). With filmgrainer you also get filmgrainer_shadows / filmgrainer_highs to shape where grain lands.
  • grain_power (default 0.15) - grain intensity. The main realism dial; a little is plenty.
  • vignette_intensity (default 0.5), plus center_x / center_y to place the falloff.
  • saturation - a color tweak baked into the film look.
  • The blur block - blur_strength, blur_focus_spread, focal_depth, and the optional depth_map. This is where the depth-of-field lives.

Output: one processed image.

How to install it

Ships with the LayerStyle pack. ComfyUI Manager → search LayerStyle → install → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_LayerStyle
pip install -r ComfyUI_LayerStyle/requirements.txt

then restart. Find it under 😺dzNodes → LayerFilter.

Common issues & troubleshooting

The depth-of-field blur looks wrong or blurs the whole frame. The focus controls (focal_depth, blur_focus_spread) are meaningful when you feed a real depth_map - plug in the output of a depth-estimation node (Depth Anything, MiDaS, etc.). Without a depth map, there's no per-pixel distance for it to key off, so treat the blur as a general softness rather than true DoF, or leave blur_strength low.

Grain is too heavy / looks like noise. Drop grain_power - 0.15 is already visible, and much past that reads as sensor noise, not film. Use grain_scale to make the grain coarser or finer to match your output resolution.

Vignette is off-center or too dark. Adjust center_x/center_y and pull vignette_intensity back; a subtle vignette guides the eye, a heavy one looks like a phone filter.

Node's not in the menu. The LayerStyle pack failed to import - commonly a broken transformers dependency (a stray TensorFlow) crashing the whole pack on load. Check the traceback, use "Try Fix," or repair the offending library.

Category😺dzNodes/LayerFilter

Inputs (15)

NameTypeDefaultDescription
imageIMAGE—
center_xFLOAT0.500–1—
center_yFLOAT0.500–1—
saturationFLOAT1.000.01–3—
vignette_intensityFLOAT0.500–1—
grain_methodCOMBO2 options: fastgrain, filmgrainer
grain_powerFLOAT0.150–1—
grain_scaleFLOAT1.00.1–10—
grain_satFLOAT0.500–1—
filmgrainer_shadowsFLOAT0.600–1—
filmgrainer_highsFLOAT0.200–1—
blur_strengthINT900–256—
blur_focus_spreadFLOAT2.20.1–8—
focal_depthFLOAT0.900–1—
depth_mapoptIMAGE—

Outputs (1)

NameTypeDescription
imageIMAGE—