Film Artifacts
Film Artifacts
- image
- IMAGE
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.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| intensity | FLOAT | 500–100 | — |
| seed | INT | 00–2147483647 | — |
| scratch_density | FLOAT | 500–100 | — |
| scratch_max_length | FLOAT | 800–100 | — |
| scratch_max_width | INT | 21–10 | — |
| dust_density | FLOAT | 400–100 | — |
| dust_max_size | FLOAT | 500–100 | — |
| hair_density | FLOAT | 300–100 | — |
| hair_max_length | FLOAT | 600–100 | — |
| light_leak_intensity | FLOAT | 200–100 | — |
| vignette_strength | FLOAT | 300–100 | — |
| apply_type | COMBO | 3 options: none, auto_apply, apply_all |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |