Nodes/ComfyUI Wan VACE Prep/πŸͺ Video Outpaint
ComfyUI Node

πŸͺ Video Outpaint

Expand your Wan clips past the edge of the frame

By stuttlepressΒ·Created 8 months agoΒ·Updated 25 days agoΒ· 100
πŸͺ Video Outpaint
  • images
  • control_video
  • control_mask
  • width
  • height
  • length
β—„crop_stateβ–Ί
β—„mask_colorwanβ–Ί
β—„custom_color128,128,128β–Ί

Outpainting a video - making Wan invent everything past the edge of your frame - used to mean fiddling with crop boxes and padding values until your eyes crossed. This node makes it a drag-and-drop operation. You get an interactive canvas, you position a window over your source frames, and whatever sticks out beyond the edge becomes the outpaint region. It's the rare ComfyUI node that's actually fun to use.

One naming note, because it'll trip you up in searches: the class is VACEOutpaint, but the node menu shows πŸͺ Video Outpaint. It was renamed in v1.1.0 (it used to be "VACE Outpaint" everywhere); the class name stayed put so old workflows keep loading.

How it works

The canvas widget caches your source frames and lets you drag a crop/output window around. Internally the geometry is a six-value string - x,y,w,h,output_width,output_height - that the widget writes into the node's crop_state input. On execution the node copies the intersection of your source into the output window, fills whatever overhangs with the pad color, and builds a binary mask: white where outpainting happens, black over real source content. The output resolution is independent of the crop box, so you can outpaint a 4096Γ—4096 area down to a 1280Γ—720 output without blowing up memory - it scales the source to the output size first, then composes. That's a real engineering decision, not marketing.

The "pad color" is where this node doubles as an LTX-2 tool. The default preset wan fills the outpaint region with gray (0.5), which is what the Wan VACE control video expects. The ltx preset uses black (0.0) instead - that's the convention LTX-2 outpainting wants. Pick custom and you can enter a hex code, 0-255 RGB integers, or 0.0-1.0 floats.

The inputs and outputs that matter

The four required inputs are mostly canvas-managed, so you won't hand-edit them:

  • images - your source frames as an IMAGE batch.
  • crop_state - set by the widget ("x,y,w,h[,ow,oh]"). Leave it alone unless you're scripting.
  • mask_color - wan, ltx, or custom (default wan). This is the one you'll actually touch.
  • custom_color - the fill color used when mask_color is custom.

Outputs: control_video and control_mask feed WanVaceToVideo's control_video / control_masks inputs; width, height, and length give you the output dimensions and frame count if you want to size a latent from them.

Install

Via ComfyUI Manager (search "Wan VACE Prep") or:

cd /path/to/comfyui/custom_nodes
git clone https://github.com/stuttlepress/ComfyUI-Wan-VACE-Prep

Restart, and the node is there. No dependencies, no model downloads - the pack only builds control inputs, so you still need the Wan VACE checkpoint (or LTX-2, for the black-pad path) downstream.

Common issues

  • The canvas is fragile across ComfyUI updates. The author is upfront about it: ComfyUI has no documented API for this kind of dynamic DOM widget, so the sizing contract and the scroll-to-zoom behavior were reverse-engineered. If the canvas renders wrong or scroll zooms the graph instead of the preview after an update, that's a known risk area, not a broken install.
  • "Input frame dimensions are too small" - the node has a minimum size check. The error message names the fix: if you're feeding VFS Load Video's all_frames output, enable output_all_frames=True or connect selected_frames instead.
  • Mushy outpaint edges - outpainted regions are pure VACE invention. Anchor them with more real context by keeping some source overlap, and don't outpaint wildly beyond what the model can plausibly continue.
CategoryWan VACE Prep/Video

Inputs (4)

NameTypeDefaultDescription
imagesIMAGESource video frames as an IMAGE batch.
crop_stateSTRINGCanvas-managed crop state: 'x,y,w,h[,ow,oh]' in source pixels. Set by the interactive widget.
mask_colorSTRINGwanFill color preset for the outpainted region. Managed by the canvas widget.
custom_colorSTRING128,128,128Custom fill color when mask_color is 'custom'. Managed by the canvas widget.

Outputs (5)

NameTypeDescription
control_videoIMAGEβ€”
control_maskMASKβ€”
widthINTβ€”
heightINTβ€”
lengthINTβ€”