VOID Export Black Mask
The boring node that makes the whole VOID workflow agree on what's being removed
- images
- mask
- black_mask_video
- black_mask_mask
- first_frame
This is the gateway node for the whole VOID video-removal workflow, and it exists because VOID is picky about mask conventions. Almost every segmentation node you'll feed it - SAM2 video segmentation, a detailer, whatever you used to outline the thing you want gone - emits masks where the object is white (1.0) and the background is black (0.0). VOID's Stage 1 expects the exact opposite: object = black, background = white. Get that backwards and every downstream stage quietly behaves as if you wanted to remove the entire background, and you'll burn an hour chasing it. This node's whole job is making the handoff safe.
It's part of ComfyUI-NetflixVoid, jaskirat05's ComfyUI port of the Netflix VOID video object removal framework (the CogVideoX-5B + segmentation + VLM thing that hit r/StableDiffusion's weekly roundup in April 2026). Five stages: black mask, VLM analysis, grey mask, quadmask, then the PQ5 sampler. This is stage one.
How it works
Dead simple under the hood. It thresholds your mask at a threshold value (default 0.5), snaps it to pure binary, then inverts it: 1.0 - binary. Black pixels stay where the object was, everything else goes white. It also validates that your video and mask have the same number of frames, and errors loudly with a clear message if they don't - which is the good kind of failure, because frame-count mismatches are the classic silent-killer in per-frame video work.
The inputs and outputs that matter
images(IMAGE) - your video as a frame batch, straight from a loader like VHS_LoadVideo.mask(MASK) - one mask per frame, same frame count asimages. Whatever you used to mark the object.threshold(FLOAT, default 0.5) - where binary snapping happens. Only touch this if your mask is soft-edged and you're getting too much or too little bleed.
Outputs:
black_mask_video(IMAGE) - the inverted mask as a 3-channel video. This is the wire you feed intoVOID Prepare VLM Analysis,VOID Build Grey Mask, andVOID Combine Quadmask.black_mask_mask(MASK) - same thing as a proper mask tensor, if you want it for compositing elsewhere.first_frame(IMAGE) - just the first frame of your input, handy for previewing without a separate load.
There are no knobs that matter beyond the threshold - this is a utility node, zero model loading, runs in milliseconds.
Install
Same as every node in the pack: ComfyUI Manager, search "ComfyUI-NetflixVoid", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/jaskirat05/ComfyUI-NetflixVoid
then restart ComfyUI. The pack's requirements.txt is heavy (opencv, scikit-image, mediapy, decord, kornia, timm, tomesd, datasets...), so let the install run. Note the example workflow gets its mask from SAM2 video segmentation, and SAM2 itself is installed separately per Meta's instructions - the pack doesn't bundle it.
Common issues
- "Frame count mismatch" error - your mask batch has a different number of frames than your video. If your SAM2 segmentation ran on a subset of frames or with a different fps, that's your culprit; match them up before this node.
- Everything comes out inverted - if your upstream segmentation already emits object-black/background-white, you'd be double-inverting. Check a preview; if the removed object ends up white, that's the sign.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| mask | MASK | — | |
| threshold | FLOAT | 0.500–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| black_mask_video | IMAGE | — |
| black_mask_mask | MASK | — |
| first_frame | IMAGE | — |