VOIDInpaintConditioning
Inpaint inside a video with VOID's quadmask conditioning
- positive
- negative
- vae
- video
- quadmask
- positive
- negative
- latent
VOID is an inpainting approach for video - the "remove that thing, and keep the motion around it" problem that still doesn't have a great off-the-shelf answer in ComfyUI. This node is the conditioning half of the VOID pipeline: it takes your source video and a preprocessed mask and builds the exact conditioning the model needs to regenerate just the masked region, in place, across time.
The mechanism is a 32-channel concat, and the comment in the source spells it out nicely: it encodes the mask and the masked video through the VAE, producing a 32-channel conditioning (16 channels of mask + 16 channels of masked video) that the model concatenates with the 16-channel noise latent. That's how a video-inpainting model sees "here's the video, here's what's covered, fill it in" as a single input. The quadmask input is deliberately the preprocessed mask from the sibling VOIDQuadmaskPreprocess node - don't feed a raw selection here, the two nodes are a matched pair. Your positive/negative conditioning carry the text prompt ("what's under the mask should be X"), the VAE encodes the geometry, and the latent output is the empty noise target the sampler fills.
Inputs: positive, negative, vae, video (source frames, [T, H, W, 3]), quadmask ([T, H, W]), width (default 672), height (default 384), length (default 45 frames), batch_size. Outputs: positive, negative, latent - straight into the KSampler.
The length input has a real trap built in, and the node's own tooltip flags it: CogVideoX-Fun-V1.5 uses a temporal patch size of 2, so the latent frame count must be even. If your requested length produces an odd latent count (49 does, for example), the node rounds it down to 45 and logs a warning - because an odd latent_t corrupts the last frame via circular padding. If your output clips are coming up one frame short of what you asked for, that's this, and it's working as designed.
It's core (comfy_extras/nodes_void.py), a recent addition, no install. It's built for CogVideoX-Fun-family checkpoints, so that's the model you'll be loading alongside it.
Honest expectations: this is a specialist node for a specialist workflow, and the "VOID" family is one of the newer inpainting-with-motion attempts. If you're coming from still-image inpainting, the mental model transfers but the fiddliness multiplies - the mask has to track the subject across frames, the length rounding catches people off guard, and long generations with lots of masked area are where video inpainters still stumble. Start short, keep the mask tight, and treat the first few runs as calibration.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| video | IMAGE | Source video frames [T, H, W, 3] | |
| quadmask | MASK | Preprocessed quadmask from VOIDQuadmaskPreprocess [T, H, W] | |
| width | INT | 67216–16384 | — |
| height | INT | 38416–16384 | — |
| length | INT | 451–16384 | Number of pixel frames to process. For CogVideoX-Fun-V1.5 (patch_size_t=2), latent_t must be even — lengths that produce odd latent_t are rounded down (e.g. 49 → 45). |
| batch_size | INT | 11–64 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |