Video Interlaced Upscaler V2
Upscale and fake the scanline look in one pass
- images
- IMAGE
VideoInterlacedV2 does two jobs at once: it upscales a batch of frames and gives them the interlaced combing you associate with old broadcast TV. The name is a bit of a misnomer - "Upscaler" makes it sound like a quality tool, but nobody reaches for this to make video sharper. This is a look. If your project needs that CRT-meets-antenna-signal texture, this is one of the most controllable ways to fake it in ComfyUI.
How it actually works
The node runs per frame, and here's the trick: it separates each frame into even and odd horizontal fields (every other scanline), like a real interlaced video signal, then recombines them the way a worn-out broadcast would. Before that, it optionally applies motion compensation at the source resolution so the effect doesn't smear across moving objects, then upscales with your chosen interpolation_mode (bilinear, bicubic, or nearest).
The deinterlace_method control decides how the fields are recombined - blend mixes them, bob alternates fields (that flickery motion artifact), weave pairs them back up. blend_factor (default 0.25) governs how much the neighboring fields bleed in, and field_order (top_first vs bottom_first) matters if you're feeding it real interlaced source and want the scanlines to land correctly. Output is a single IMAGE tensor, ready to feed an encoder or a preview node.
The inputs you'll actually touch
- scale_factor - how much it upscales, default 1.5 (a 720p source becomes ~1080p). Crank it and the combing gets chunkier.
- input_height / input_width - the source resolution, not the target. These matter because the field masks are built against them.
- motion_compensation -
none,basic, oradvanced.basicis a good default;advancedpulls temporal neighbors into a weighted blend and is slower. - field_strength (optional) - push past 1.0 to exaggerate the combing, or drop toward 0 for a subtler weave.
- temporal_radius (optional) - how many neighbors
advancedmotion compensation looks at, 1-3. - edge_enhancement (optional) - a Sobel-based sharpen that helps the combing read as "signal detail" instead of mush. Keep it small; 0.3 is plenty.
Installing and context
It ships inside DJZ-Nodes (MushroomFleet / Drift Johnson). Search "DJZ-Nodes" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/DJZ-Nodes
cd DJZ-Nodes
pip install -r requirements.txt
For the wider picture: the KB's upscaling essay is blunt that video upscaling is "more pixels over time" - a different problem than single-image upscaling. This node is on the aesthetic end of that spectrum, not the restoration end. If you want to repair interlaced or low-res footage, this isn't the tool; if you want footage to look interlaced, it's great.
Gotchas
Because it recombines fields, cheap fast-forward motion can show aliasing - that's the effect, not a bug. On a big batch with advanced motion compensation it gets slow; drop to basic or raise blend_factor first. And keep edge_enhancement low: with it at 1.0 you'll get hard white outlines that read as JPEG-ish ringing rather than TV texture.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| input_height | INT | 720480–4320 | — |
| input_width | INT | 1280640–7680 | — |
| field_order | COMBO | top_first | 2 options: top_first, bottom_first |
| scale_factor | FLOAT | 1.51–4 | — |
| blend_factor | FLOAT | 0.250–1 | — |
| motion_compensation | COMBO | basic | 3 options: none, basic, advanced |
| interpolation_mode | COMBO | bilinear | 3 options: bilinear, bicubic, nearest |
| deinterlace_method | COMBO | blend | 3 options: blend, bob, weave |
| field_strengthopt | FLOAT | 1.00–2 | — |
| temporal_radiusopt | INT | 11–3 | — |
| edge_enhancementopt | FLOAT | 0.00–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |