Nodes/AP Netflix VOID/VOID Sampler (AP)
ComfyUI Node

VOID Sampler (AP)

Deleting an object and everything it knocked over, in one pass

By adampolczynski·Created 5 months ago·Updated 5 months ago· 7
VOID Sampler (AP)
  • void_model
  • vae
  • image
  • mask
  • positive
  • negative
  • latent
  • image
num_frames1
steps50
cfg6.0
seed0
eta0.00
denoise1.00

This is the node the whole pack exists for. Netflix Research's VOID doesn't just scrub a person or a cup out of a video - it regenerates the scene as if that object was never there, including the shadow it cast and the mug it knocked over. Plain video inpainting leaves those behind, which is why "remove the object" so often looks like the object is still haunting the frame. VoidSampler is where that actual removal happens, and everything else in the pack just feeds it.

The mechanism is worth understanding because it explains the settings. The node takes your frames and the quadmask, pushes both through the CogVideoX 3D VAE into latent space, runs a DDIM loop with CFG guided by T5-XXL text conditioning, and decodes back to pixels. The clever part: the mask isn't fed as a binary channel bolted onto the latent. It gets encoded through the same VAE as the image, so the model reads it as a full 16-channel latent block it was specifically trained on. That's the interaction-aware conditioning - the "affected" regions of the quadmask tell the model where it has to rebuild physics, not just paint over pixels. When you set cfg to 1.0, CFG is disabled entirely and the model largely ignores your prompt - the README warns you'll get poor removals. Keep it at the 6.0 default.

The inputs are straightforward once you know the conventions. image wants frames at 384×672 (H×W), the training resolution - other sizes technically work but quality drops. mask comes straight from VoidQuadMask and uses the inverted ComfyUI convention: black = remove, white = keep. Do not put an InvertMask node in front of it; the sampler passes the mask to the VAE exactly as given. positive/negative are conditioning from VoidTextEncode (or any CLIPTextEncode fed a T5-XXL CLIP). Then the dials:

  • num_frames - 1 for a single image, otherwise a 4k+1 value (5, 9, 13, 17…) so the VAE round-trip stays clean. The widget tops out at 32, so the README's big numbers like 97 and 197 are not reachable through this node's UI - plan to process clips in chunks.
  • steps - 50, the official VOID default.
  • cfg - 6.0, the official default.
  • denoise - 1.0 (full noise from scratch). Lower it only if you want the scene to stay closer to the original pixels.
  • eta - 0 for deterministic DDIM; 1 gives you stochastic DDPM noise.
  • seed - your RNG seed, for reproducible runs.

It returns two things: latent, the raw video latent (handy for re-decoding later via VoidLatentToVideo), and image, the cleaned frames.

Install is the shared pack story: ComfyUI Manager, search "AP Netflix VOID", or cd ComfyUI/custom_nodes && git clone https://github.com/adampolczynski/AP_Netflix_VOID, then restart. No extra Python packages - the pack is pure torch + ComfyUI. The real cost is downloads: void_pass1.safetensors into models/diffusion_models/ (that's a ~5B-parameter transformer, so it's chunky), the CogVideoX 3D VAE into models/vae/, and a T5-XXL encoder into models/clip/.

Where people get burned: feeding the sampler a VIDEO instead of frames. Its image input is an IMAGE tensor - a stack of frames - not a VIDEO socket, so a VHS "Upload Video" node's IMAGES output is what you wire in, and you control the frame count with num_frames, not by letting the clip run. People also trip on the frame-count rule and on the mask polarity. And set expectations: the author shipped this as a self-described "first working beta" and said so about his own example output. It genuinely removes objects and their interactions, but it's not a finished product - expect to iterate on the prompt and masks.

CategoryAP/VOID

Inputs (12)

NameTypeDefaultDescription
void_modelVOID_MODEL
vaeVOID_VAE
imageIMAGE
maskMASK
positiveCONDITIONING
negativeCONDITIONING
num_framesINT11–32Video frames (1 = single image)
stepsINT501–200
cfgFLOAT6.01–20
seedINT00–18446744073709550000
etaFLOAT0.000–10=deterministic DDIM, 1=DDPM stochastic
denoiseFLOAT1.000–1Start noise strength (1=full noise, 0=no denoising)

Outputs (2)

NameTypeDescription
latentLATENT
imageIMAGE