DiffuEraser_Sampler
The node that actually erases things from video (watermarks included)
- model
- positive
- conditioning
- image
If you've ever tried to erase a watermark, a timestamp, or that stray mic boom from a clip by hand, you know the pain: no static image fix survives motion, and frame-by-frame inpainting gives you a shimmering mess. This node is the part of the ComfyUI_DiffuEraser pack that actually does the erasing - the diffusion pass that rewrites the masked region of every frame while the surrounding video stays put. It's the payoff node in a four-node pipeline, and it's the one you'll fiddle with most.
Where it sits: DiffuEraser_PreData turns your frames into a conditioning bundle, Propainter_Loader + Propainter_Sampler build a rough temporal "priori" fill, and this sampler takes that bundle plus your prompt and runs the real diffusion model. You can't use it standalone - it needs both a model from DiffuEraser_Loader and a conditioning from the ProPainter side of the graph.
How it works, briefly: this is a video inpainting diffusion model on an SD 1.5 backbone. A BrushNet branch injects the mask at the UNet level, a temporal motion UNet keeps frames consistent with each other, and a PCM (consistency-model) LoRA is what lets it get away with 2 inference steps instead of the usual 30. That speed trick is the whole reason the default steps is 2 - crank it up and you mostly buy wait time, not quality. After sampling it either temporally smooths the result (blended off, which kills flicker) or composites the generated pixels back onto the original frames (blended on, which keeps unmasked pixels byte-identical).
The inputs that actually matter:
- positive - CLIP conditioning from a text encoder. An empty prompt works surprisingly well; the model's job is structural, so the text is a light steer rather than the driver. Anything the pack's example uses.
- blended - the big toggle, and the README is explicit about it: off = reduced flicker, on = compositing. For removing a static watermark I'd leave it off and let the flicker smoothing do its job; for object removal where you want the untouched pixels untouched, flip it on.
- unet_group / brush_group - how many blocks are kept on the GPU at once under block-level offloading. The defaults of 5 are what let a 12GB card run 1280×720, so only nudge these if you're chasing VRAM. Lower numbers = less VRAM, slower.
- save_result_video - writes an mp4 straight to ComfyUI's output folder via OpenCV. Handy, but most people just take the
imageoutput and feed a SaveVideo/VHS node.
Outputs: one image - a batch of frames ready for a video save node.
Troubleshooting: this pack runs on ComfyUI's newer v3 extension API (it imports comfy_api.latest), so a stale ComfyUI install won't even register the nodes - update before blaming the pack. Second real gotcha, confirmed by people in the wild: the nodes were redesigned between versions, and old published workflows with different input sockets won't load cleanly. If a shared workflow throws "missing inputs," rebuild the graph against the current nodes rather than fighting it. And none of it runs until every weight is where the loader expects - see the Loader article for the checklist. If you're new to video inpainting in ComfyUI, expect a learning curve with almost no YouTube tutorials for this specific pack; the good news is the graph structure is simple enough to reproduce from the README's example.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | DiffuEraser_Loader | — | |
| positive | CONDITIONING | — | |
| conditioning | CONDITIONING | — | |
| steps | INT | 21–1024 | — |
| seed | INT | 00–2147483647 | — |
| save_result_video | BOOLEAN | false | — |
| unet_group | INT | 51–1024 | — |
| brush_group | INT | 51–1024 | — |
| blended | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |