Nodes/ComfyTV/Old Film
ComfyUI Node

Old Film

Aging your clean render into worn archive footage, artifact by artifact

By jtydhr88·Created 3 months ago·Updated about 17 hours ago· 725
Old Film
  • video
  • video
force_run_token0
project_id
parent_output_id0
delta14
every20
brightness_up20
brightness_down30
brightness_every70
develop_up60
develop_down20
develop_duration70
lines_num5
line_width2
lines_darker40
lines_lighter40
weave_x0.0
weave_y0.0
weave_interval0.60
seed7

Old Film is the "make it look like it survived a projector" node. It layers several classic film-damage artifacts onto a clip - random dust, vertical scratch lines, brightness flicker, uneven "development" density, and physical frame weave (the little shake of a worn transport) - and crucially, it lets you dial each artifact independently. That's the difference between this and a one-slider "vintage" preset: you can go subtle 1970s home-movie or full found-footage horror by turning up the scratches and leaving the flicker gentle.

It's a rendered stage, so it needs a ▶ Run and it uses a torch (GPU) backend. In goes COMFYTV_VIDEO, out comes COMFYTV_VIDEO.

The parameters, grouped by artifact

There are sixteen of them, which reads like a lot until you realize they're five small clusters:

  • Dust: delta (default 14) and every (20) control how often random dust spots appear. Small every = dustier.
  • Flicker: brightness_up (20), brightness_down (30), and brightness_every (70) - how much the frame brightens/darkens and how often. This is the "old bulb struggling" pulse.
  • Development: develop_up (60), develop_down (20), and develop_duration (70) simulate uneven chemical development - density shifting across the frame over time. This is what makes footage feel aged rather than just grainy.
  • Scratches: lines_num (5) and line_width (2) set the vertical scratch lines; lines_darker / lines_lighter (both 40) balance the dark and light emulsion damage.
  • Weave: weave_x / weave_y (0) and weave_interval (0.6s) - the physical frame jitter. Start here for that "projector gate" instability.
  • seed (default 7) - reseed for a different random dust/scratch layout.

You're not going to memorize all of them. Practical approach: set weave_x/weave_y to ~1 for a gentle rock, leave dust and scratches at defaults, nudge develop_* for density, and only push brightness_* high when you want it visibly strobe-y. The node previews most of this live, so dial it by eye.

Where it sits

It's one of the pack's "texture & era" VideoFX stages, grouped with Regrain, Frame Blend, Posterize, and Pseudocolor. A typical chain: generated clip → Old Film → (Regrain for film grain on top) → composite. Because these stages are snapshot-based, a change upstream means re-running this node - which is fine, it's one pass, but don't expect live updates downstream of a long FX chain.

Install

Same as every ComfyTV stage:

cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV

Restart ComfyUI - on Desktop/macOS clone into the running instance by absolute path and verify custom_nodes/ComfyTV/__init__.py is at the top level. ComfyUI Manager finds it as "ComfyTV". No extra Python dependencies; the torch backend is ComfyUI's own.

One honest warning: "old film" looks great in moderation and instantly cheesy cranked to eleven. The artifacts this node generates are randomized per seed, so when you find a dust pattern you love, lock the seed and don't let control-after-generate randomize it away.

CategoryComfyTV/VideoFX

Inputs (20)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
deltaINT140–400
everyINT200–100
brightness_upINT200–100
brightness_downINT300–100
brightness_everyINT700–100
develop_upINT600–100
develop_downINT200–100
develop_durationINT700–10000
lines_numINT50–100
line_widthINT20–100
lines_darkerINT400–100
lines_lighterINT400–100
weave_xFLOAT0.00–32
weave_yFLOAT0.00–32
weave_intervalFLOAT0.600.05–5
seedINT70–99999
videooptCOMFYTV_VIDEO

Outputs (1)

NameTypeDescription
videoCOMFYTV_VIDEO