NTSC Filter
Your image, replayed through a 1992 TV — no soldering required
- image
- IMAGE
The name is not a metaphor. NTSC Filter doesn't sprinkle a "retro" preset over your image - it actually encodes the frame into an NTSC composite video signal and decodes it back, with all the analog losses included. You get the soft chroma smear, the faint dot-crawl on saturated edges, the ringing around high-contrast lines. It's the difference between "this looks filtered" and "this looks like it was pulled off a capture card in 1994," and it's the node from TrophiHunter's Photography Nodes pack that does the most actual physics.
How it works
Under the hood it converts your RGB image to YIQ (the color space broadcast TV used), mixes the color into a single composite signal riding a 3.58 MHz color carrier, runs it through a band-limiting sinc filter with a Hamming window - 21 filter taps, each sampled at 4× - and then decodes the whole thing back to RGB. That's the mechanism behind the artifacts: the chroma gets smeared and the luma gets a bit of ringing because that's literally what the filter bandwidth did to real broadcasts.
The practical consequence: it's the heavy one in this pack. Each frame does on the order of 80 texture-sampling passes, so keep it near the end of your chain and don't be surprised if a 4K frame takes a beat. On a batch of frames it scales linearly, which is fine - you'd batch this anyway.
The inputs and the one that lies
image- your IMAGE tensor. RGB works; stick to 3-channel inputs.opacity- default 0.5, supposedly blends the effect in. Here's the gotcha: the shipped code hardcodes opacity to 0.75 and ignores your slider. The widget is decorative. Don't chase it thinking you broke something; the node is just newer than its own UI.
The single output is IMAGE, which you wire into a Preview or Save node, or into another effect in the chain. The author's example workflow stacks it right before VHS Degrade - NTSC gives the color and banding, VHS Degrade adds the motion damage.
Installing it
This is part of the Photography Nodes pack, so install once, get all 28 nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/TrophiHunter/ComfyUI_Photography_Nodes
# restart ComfyUI, then find it under TrophiHunter/Photography
Or use ComfyUI Manager - search "Photography Nodes" by TrophiHunter and hit install. There's no requirements.txt and no model downloads; the pack only needs torch, torchvision, numpy and Pillow, all of which ComfyUI already ships. Zero setup beyond restarting.
Troubleshooting
Slow on big images - that's the sinc filter, not a bug; downscale or accept the wait. Output looks nearly identical to the input at low opacity settings - again, opacity is ignored, so adjust the effect with the rest of the pipeline instead. And if you feed it an image with an alpha channel, treat that as untested territory; the code path for RGBA inputs is not the one you want to hit. Keep it RGB and it's a genuinely great analog-TV effect that no LUT can fake.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| opacity | FLOAT | 0.5000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |