Nodes/WtlNodes/Film Artifacts
ComfyUI Node

Film Artifacts

Film Artifacts

By Scorpiosis0·Created 10 months ago·Updated 2 months ago· 3
Film Artifacts
  • image
  • IMAGE
intensity50
seed0
scratch_density50
scratch_max_length80
scratch_max_width2
dust_density40
dust_max_size50
hair_density30
hair_max_length60
light_leak_intensity20
vignette_strength30
apply_type

Perfect AI output is its own kind of uncanny. Real photos have scratches, dust motes, the odd hair on the scanner, light leaks, vignette - the accumulated damage of actual film. Film Artifacts from WtlNodes is the node that fakes all of it, and it's refreshingly granular about it. No "grunge" preset that does five things at once; you get a separate slider for each kind of damage so you can add just dust, or just a light leak, and leave the rest pristine.

It sits in the pack's retro-effects family alongside the CRT effect and film grain, and it's the one you reach for when the goal is "looks shot on film" rather than "looks like an AI image with grain slapped on."

The controls

All densities are 0–100, and everything is seeded, so the damage pattern is reproducible:

  • intensity - master volume for the whole effect stack.
  • scratch_density / scratch_max_length / scratch_max_width - vertical scratches, the kind a dusty transport or a bad scan leaves. Density for how many, length and width for their character.
  • dust_density / dust_max_size - specks and particles. This is usually the one that sells it: a few dust specks read as "photo" way faster than perfect clarity.
  • hair_density / hair_max_length - that single wispy hair across a corner of a scanned frame.
  • light_leak_intensity - the orange-ish bleed at an edge from light hitting unprocessed film.
  • vignette_strength - natural corner darkening.

Plus seed (the pattern's random basis) and the pack's apply_type live-preview dropdown.

How to use it without overdoing it

The trap with artifact nodes is that every slider at 50 looks like a film-buff's fever dream. Real film damage is sparse: one or two scratches, a handful of dust specks, a subtle vignette. The convincing settings are the low ones - dust at 10–20, scratches at 5–15, vignette at 15–25, light leak barely there or off. Keep intensity moderate and let the individual densities do the work. This is the "seasoning, not soup" rule, and it's the difference between a vintage look and a meme.

When you want to ground a render in photorealism - modidex's photorealism notes make the case that physical imperfection is what separates synthetic from real - this node is the fast path, applied after color grading so it lands on top of the finished image.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Scorpiosis0/ComfyUI-WtlNodes.git

Restart ComfyUI, or install via ComfyUI Manager (search "WtlNodes"). The pack ships a cached pattern file (film_artifacts_cache.pkl) so the noise structures are generated fast; no model downloads, just numpy/scipy/pillow.

Gotchas

  • High intensity + high densities = noise soup. Start from the defaults (all moderate) and dial down, not up.
  • Scratches are vertical and full-frame-ish. If you need a specific crack through a specific spot, this isn't a manual tool - it's random placement with seeded reproducibility.
  • It degrades sharpness at high settings. The effect is destructive by design; apply it last, after upscaling, and keep it off any text or logos you need legible.
CategoryWtlNodes/image

Inputs (13)

NameTypeDefaultDescription
imageIMAGE
intensityFLOAT500–100
seedINT00–2147483647
scratch_densityFLOAT500–100
scratch_max_lengthFLOAT800–100
scratch_max_widthINT21–10
dust_densityFLOAT400–100
dust_max_sizeFLOAT500–100
hair_densityFLOAT300–100
hair_max_lengthFLOAT600–100
light_leak_intensityFLOAT200–100
vignette_strengthFLOAT300–100
apply_typeCOMBO3 options: none, auto_apply, apply_all

Outputs (1)

NameTypeDescription
IMAGEIMAGE