Nodes/ComfyUI-SA-Nodes-QQ/Video Inpaint (QQ)
ComfyUI Node

Video Inpaint (QQ)

The fast, boring way to erase stuff from video — and that's a feature

By siraxe·Created 11 months ago·Updated 2 days ago· 72
Video Inpaint (QQ)
  • video
  • video_mask
  • video
padding0

Before you get excited: this is not generative video inpainting. VideoInpaint fills masked areas using OpenCV's classic Telea algorithm - the same neighbor-based texture fill your phone uses to remove a watermark. It won't invent a new face or rebuild a missing arm. What it will do is erase small junk from every frame of a clip in seconds, deterministically, with zero model load and zero VRAM pressure. For the narrow job it's built for, that's the right tool.

The node exists because the author's Prepare Refs node (which cuts out parts for the Power Spline Editor) needed a simplified sibling. You feed it:

  • video (IMAGE) - your frames.
  • video_mask (IMAGE) - a black-and-white mask the same size as the frames; white marks what gets filled. It accepts per-frame masks (batch), and it'll resize the mask to match the video if the sizes differ.
  • padding (INT, 0–100) - expands the mask by N pixels before filling. Default 0 = off. Turn this on when your mask hugs the object too tightly and you get a visible halo.

It outputs a single video (IMAGE) with the masked areas replaced. That's the whole interface.

The honest use case

Where this shines: removing logos, date stamps, cables, sensors, watermarks, or lens dirt that appears consistently across frames. It's also a great prep step - clean up a reference clip before it goes into a VACE or SAM workflow so the model isn't distracted by a watermark it will happily reproduce. The Telea fill works per-frame with no temporal consistency, so don't expect it to track a moving object; moving objects need either a per-frame mask or the mask on a static region.

The "but I can use a diffusion inpaint" pushback is fair but misses the point. A diffusion inpaint on 81 frames is minutes of GPU time and will drift the rest of the scene; Telea is instant and touches nothing outside the mask. The KB's inpainting essay makes exactly this argument in the image world - bit-identical unmasked pixels and full-resolution-only-masked edits are what mask-based approaches uniquely own - and it applies here too. If the object is small, this is the pragmatic answer. If it's large or semantically meaningful (a person, a car), save the clip, mask it properly, and let a real generative pass or VACE handle it.

Installing it

Part of siraxe/ComfyUI-WanVideoWrapper_QQ. ComfyUI Manager → search WanVideoWrapper_QQ/SA-Nodes-QQ, or:

cd ComfyUI/custom_nodes
git clone https://github.com/siraxe/ComfyUI-WanVideoWrapper_QQ.git

Restart ComfyUI. One real dependency to know about: this node imports cv2 (OpenCV). The pack's requirements.txt is empty, so if you get an import error, install it yourself with pip install opencv-python into your ComfyUI environment - the README flags cv2 as a requirement for the related Prepare Refs node too.

Gotchas

  • Mask size mismatch is the most common stumble; the node resizes the mask, but a wildly different aspect ratio will distort it. Keep the mask near the video's dimensions.
  • Halo around the edit: bump padding up a few pixels.
  • No temporal coherence: flicker on fine textures is normal - Telea is per-frame. For bigger fills, don't fight it; this node was never meant to carry that weight.
  • Pack note: the repo was renamed to ComfyUI-SA-Nodes-QQ in v1.3.4, so delete any stale wanwrapper_qq folder in custom_nodes if old workflows point at it.
CategoryWanVideoWrapper_QQ

Inputs (3)

NameTypeDefaultDescription
videoIMAGE
video_maskIMAGE
paddingINT00–100

Outputs (1)

NameTypeDescription
videoIMAGE