VOID Quadmask Builder
The quadmask is what makes VOID understand shadows — feed it right
- primary_mask
- affected_mask
- QUADMASK
VOID Quadmask Builder is the node that turns VOID from "another inpainting model" into the thing Netflix actually shipped: a model that deletes objects and their physical interactions. And the entire difference lives in the word "quad."
Plain inpainting gives you a binary choice - mask the pixels you want regenerated, keep the rest. VOID's mask has four levels, and this node is what compiles your SAM segmentation masks into that four-value image. Get it wrong and you'll get the classic first-run result: object gone, shadow still there, looking like a bad green-screen cutout.
What the four values mean
The output is an IMAGE where each pixel carries one of four normalized values:
| Value | Meaning | |---|---| | 0 | primary object - remove it | | 63/255 | overlap: primary ∩ affected | | 127/255 | affected region - shadow, contact patch, wake, reflection | | 1.0 | background - keep unchanged |
The "affected" region is VOID's secret sauce. A cup doesn't just sit on a table; it leaves a contact shadow and a patch where it's been sitting. Mark that region and the model knows it should be regenerated as if the object was never there, not just patched over. That's the "interaction-aware" part of "Video Object and Interaction Deletion."
The two inputs
primary_mask(required) - a ComfyUIMASK, either [H,W] or [T,H,W] for video batches. Binary mask of the object to remove. Maps to quadmask value 0.affected_mask(optional) - binary mask of the region physically affected by the object. Maps to 127, and overlap with the primary becomes 63. Leave it disconnected and the quadmask degrades to a simple binary mask, which VOID handles fine - you just lose the interaction cleanup.
Both accept any node that outputs the standard MASK type. The README's reference workflow uses ComfyUI-SAM3 - SAM3 Video Segmentation → SAM3 Propagate → SAM3 Video Output feeds the primary mask - and SAM2-based nodes work too. If you want the affected region, run a second SAM3 segmentation targeting the shadow/contact area and feed that output in. QUADMASK is the single output, and it wires into VOID Inference's quadmask socket.
The trap beginners hit
People feed VOID a mask of just the object, wonder why the interaction cleanup never happens, and conclude the model is broken. It's not - you skipped the second input. It's also worth knowing what "interaction deletion" means in practice: early community testing showed that if you mask a hand that's moving an object, VOID happily deletes the hand too, because the hand is the interaction. That's the model doing what it was trained to do, and it's the reason people segment the object tightly and keep the affected region separate rather than painting one blob over everything.
Install and workflow
Same install as the rest of the pack - ComfyUI Manager (search "VOID") or:
cd ComfyUI/custom_nodes
git clone https://github.com/shanef3d/ComfyUI-VOID
restart, done. The Quadmask Builder itself has no extra dependencies, but the SAM3 nodes that feed it do - ComfyUI Manager will offer those when you load a VOID workflow and it finds them missing.
There's not much to go wrong here: it's a pure mask-mapping node, no weights, no inference, runs in milliseconds. The only failure mode is bad input masks (holes in the segmentation, masks that don't cover the full interaction), and those are SAM-segmentation problems, not this node's. The output gets normalized to [0,1] and matches the input resolution, so whatever frame count your SAM3 output has is what the quadmask carries.
Mask the object. Mask what the object did to the scene. Feed both in. That's the whole trick.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| primary_mask | MASK | Binary mask of the primary object to remove. Accepts ComfyUI MASK [H,W] or [T,H,W] (video batch). Maps to quadmask value 0. | |
| affected_maskopt | MASK | Optional binary mask of the region physically affected by the object (shadow, contact patch, wake, etc.). Maps to quadmask value 127; overlap with primary → 63. Leave disconnected for a simple binary quadmask. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| QUADMASK | IMAGE | Quadmask IMAGE [T, H, W, 3] with normalised values: 0=remove, 63/255=overlap, 127/255=affected, 1.0=background. |