Generated reference · ComfyUI workflow · Video & motion

VACE Video Edit

Masked spatio-temporal video editing on Wan 2.1 VACE (core WanVaceToVideo): regenerate ONLY the masked region of the masked frames under a new instruction while everything else is preserved - the execution backend for region-level video …

Video & motion14nodesGPU A6000out video~300sv1.0.0

On this page

Masked spatio-temporal video editing on Wan 2.1 VACE (core WanVaceToVideo): regenerate ONLY the masked region of the masked frames under a new instruction while everything else is preserved - the execution backend for region-level video edits (mask 1 = regenerate, 0 = keep)

14Graph nodes
12Node classes
8Inputs
5Models

Tags: videovaceinpainteditmaskedsurgical-regen2026-sota

Inputs (8)#

The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.

promptstringrequired
What the regenerated (masked) content should be
source_framesimage_sequencerequired
Source video frames (comma-separated uploaded filenames, in order)
mask_framesimage_sequencerequired
Per-frame masks aligned with source_frames: white = regenerate, black = keep
frame_countintegerdefault 81min 5max 161
Number of frames to process (VACE reference: 81)
resolutionenumdefault square_640
VACE 1.3B tier is 480p-class; 640x640 is the official first-run recommendation
options: square_640portrait_480plandscape_480p
model_tierenumdefault vace_1_3b
1.3B (baked, 480p) or 14B (720p-capable, resolves on demand - large download)
options: vace_1_3bvace_14b
fpsintegerdefault 16min 8max 30
Output frame rate (Wan 2.1 native: 16)
seedintegerdefault -1
Random seed (-1 for random)

ComfyUI node graph (14)#

The executable ComfyUI prompt graph: 14 nodes across 12 distinct node classes, wired by 17 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.

flowchart TD n0["1: UNETLoader"] n1["2: CLIPLoader"] n2["3: VAELoader"] n3["4: ModelSamplingSD3"] n4["causvid_lora: LoraLoaderModelOnly"] n5["5: CLIPTextEncode"] n6["6: CLIPTextEncode"] n7["7: IsisLoadImageList"] n8["8: IsisLoadImageList"] n9["9: ImageToMask"] n10["10: WanVaceToVideo"] n11["11: KSampler"] n12["12: VAEDecode"] n13["13: VHS_VideoCombine"] n4 -->|model| n3 n0 -->|model| n4 n1 -->|clip| n5 n1 -->|clip| n6 n8 -->|image| n9 n5 -->|positive| n10 n6 -->|negative| n10 n2 -->|vae| n10 n7 -->|control_video| n10 n9 -->|control_masks| n10 n3 -->|model| n11 n10 -->|positive| n11 n10 -->|negative| n11 n10 -->|latent_image| n11 n11 -->|samples| n12 n2 -->|vae| n12 n12 -->|images| n13 classDef custom fill:#12b886,stroke:#0b6b4f,color:#04110c; class n7,n8,n13 custom;
Data-flow DAG — scroll to zoom, drag to pan.

Nodes (14)#

1UNETLoadercore
unet_name = {{model_files[model_tier]}} tmplweight_dtype = default
outputs: MODEL
2CLIPLoadercore
clip_name = umt5_xxl_fp8_e4m3fn_scaled.safetensorstype = wan
outputs: CLIP
3VAELoadercore
vae_name = wan_2.1_vae.safetensors
outputs: VAE
4ModelSamplingSD3core
model = ◂ node causvid_lora · out[0]shift = 5.0
outputs: MODEL
causvid_loraLoraLoaderModelOnlycore
model = ◂ node 1 · out[0]lora_name = Wan21_CausVid_14B_T2V_lora_rank32.safetensorsstrength_model = 0.3
outputs: MODEL
5CLIPTextEncodecore
text = {{prompt}} tmplclip = ◂ node 2 · out[0]
outputs: CONDITIONING
6CLIPTextEncodecore
text = overexposed, blurry details, subtitles, watermark, jpeg artifacts, deformed limbs, visible seam, flickerclip = ◂ node 2 · out[0]
outputs: CONDITIONING
7IsisLoadImageListcustom pack
filenames = {{source_frames}} tmplframe_count = {{frame_count}} tmpl
outputs: IMAGE
8IsisLoadImageListcustom pack
filenames = {{mask_frames}} tmplframe_count = {{frame_count}} tmpl
outputs: IMAGE
9ImageToMaskcore
image = ◂ node 8 · out[0]channel = red
outputs: MASK
10WanVaceToVideocore
positive = ◂ node 5 · out[0]negative = ◂ node 6 · out[0]vae = ◂ node 3 · out[0]width = {{resolution_map[resolution].width}} tmplheight = {{resolution_map[resolution].height}} tmpllength = {{frame_count}} tmplbatch_size = 1strength = 1.0control_video = ◂ node 7 · out[0]control_masks = ◂ node 9 · out[0]
outputs: CONDITIONINGCONDITIONINGLATENTINT
11KSamplercore
model = ◂ node 4 · out[0]positive = ◂ node 10 · out[0]negative = ◂ node 10 · out[1]latent_image = ◂ node 10 · out[2]seed = {{seed}} tmplsteps = 4cfg = 1.0sampler_name = uni_pcscheduler = simpledenoise = 1.0
outputs: LATENT
12VAEDecodecore
samples = ◂ node 11 · out[0]vae = ◂ node 3 · out[0]
outputs: IMAGE
13VHS_VideoCombinecustom pack
images = ◂ node 12 · out[0]frame_rate = {{fps}} tmplloop_count = 0filename_prefix = vace_editformat = video/h264-mp4save_output = true
outputs: VHS_FILENAMES

Parameter banks (2)#

The prompt / configuration lookup tables this workflow keys into from its inputs — the vocabulary that turns a style / palette / preset selection into graph parameters.

resolution_map (3)#

square_640
{"width": 640, "height": 640}
portrait_480p
{"width": 480, "height": 832}
landscape_480p
{"width": 832, "height": 480}

model_files (2)#

vace_1_3b
wan2.1_vace_1.3B_fp16.safetensors
vace_14b
wan2.1_vace_14B_fp16.safetensors

Models & dependencies#

Custom node packs (2)#

The non-core ComfyUI node classes this graph requires; the RunPod worker image the workflow runs on must bake or install a pack that provides every one of them.

IsisLoadImageListVHS_VideoCombine

Models required (5)#

Wan21_CausVid_14B_T2V_lora_rank32.safetensors
umt5_xxl_fp8_e4m3fn_scaled.safetensors
wan2.1_vace_1.3B_fp16.safetensors
wan2.1_vace_14B_fp16.safetensors
wan_2.1_vae.safetensors

Output contract#

What a successful run of this workflow returns.

type
video
format
mp4

Taxonomy & routing#

How the control plane classifies this workflow — from the committed workflow-taxonomy-registry.json. It drives the consistency / control surface the agentic director can exercise over the workflow.

assetFamily
region-edited-video
outputPackageProfile
video-master-profile
controlModalities
controlnet-inpaintseed-lockmodel-locktemporal-lock
consistencyDimensions
motionenvironmentlighting
notes
Core WanVaceToVideo masked spatio-temporal edit (mask 1 = regenerate, 0 = keep); the execution backend for region-level surgical regen; CausVid 0.3 + 4-step cfg-1 per the official VACE template.