Nodes/ComfyTV/Old Film
ComfyUI Node

Old Film

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

By jtydhr88·Created 4 months ago·Updated 3 days ago· 1,054
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—