Nodes/DJZ-Nodes/Video Interlaced Upscaler V2
ComfyUI Node

Video Interlaced Upscaler V2

Upscale and fake the scanline look in one pass

By MushroomFleet·Created 3 years ago·Updated 6 months ago· 80
Video Interlaced Upscaler V2
  • images
  • IMAGE
◄input_height720►
◄input_width1280►
◄field_ordertop_first►
◄scale_factor1.5►
◄blend_factor0.25►
◄motion_compensationbasic►
◄interpolation_modebilinear►
◄deinterlace_methodblend►
◄field_strength1.0►
◄temporal_radius1►
◄edge_enhancement0.0►

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, or advanced. basic is a good default; advanced pulls 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 advanced motion 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.

Categoryimage/upscaling

Inputs (12)

NameTypeDefaultDescription
imagesIMAGE—
input_heightINT720480–4320—
input_widthINT1280640–7680—
field_orderCOMBOtop_first2 options: top_first, bottom_first
scale_factorFLOAT1.51–4—
blend_factorFLOAT0.250–1—
motion_compensationCOMBObasic3 options: none, basic, advanced
interpolation_modeCOMBObilinear3 options: bilinear, bicubic, nearest
deinterlace_methodCOMBOblend3 options: blend, bob, weave
field_strengthoptFLOAT1.00–2—
temporal_radiusoptINT11–3—
edge_enhancementoptFLOAT0.00–1—

Outputs (1)

NameTypeDescription
IMAGEIMAGE—