Generated reference · ComfyUI workflow · Video & motion

VACE Clip Join

Generative clip joining on Wan 2.1 VACE (firstlastclip): two existing clips anchor both ends and VACE generates the transition between them - the seam-healing primitive for chained long-form segments (clips are preserved bit-for-bit …

Video & motion14nodesGPU A6000out video~300sv1.0.0

On this page

Generative clip joining on Wan 2.1 VACE (firstlastclip): two existing clips anchor both ends and VACE generates the transition between them - the seam-healing primitive for chained long-form segments (clips are preserved bit-for-bit outside the generated gap)

14Graph nodes
12Node classes
10Inputs
5Models

Tags: videovacejointransitionlong-formseam2026-sota

Inputs (10)#

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 happens across the generated transition
clip_a_framesimage_sequencerequired
Tail frames of the leading clip (comma-separated uploaded filenames, in order)
clip_b_framesimage_sequencerequired
Head frames of the trailing clip (comma-separated uploaded filenames, in order)
clip_a_countintegerdefault 24min 4max 64
How many leading-clip frames anchor the join
clip_b_countintegerdefault 24min 4max 64
How many trailing-clip frames anchor the join
gap_framesintegerdefault 33min 9max 97
Frames VACE generates between the two clips
resolutionenumdefault square_640
VACE 1.3B tier is 480p-class; clips must be uploaded at this geometry
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 19 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["causvid_lora: LoraLoaderModelOnly"] n4["4: ModelSamplingSD3"] n5["5: CLIPTextEncode"] n6["6: CLIPTextEncode"] n7["7: IsisLoadImageList"] n8["8: IsisLoadImageList"] n9["9: IsisVaceJoinControl"] n10["10: WanVaceToVideo"] n11["11: KSampler"] n12["12: VAEDecode"] n13["13: VHS_VideoCombine"] n0 -->|model| n3 n3 -->|model| n4 n1 -->|clip| n5 n1 -->|clip| n6 n7 -->|clip_a| n9 n8 -->|clip_b| n9 n5 -->|positive| n10 n6 -->|negative| n10 n2 -->|vae| n10 n9 -->|length| n10 n9 -->|control_video| n10 n9 -->|control_masks| n10 n4 -->|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,n9,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
causvid_loraLoraLoaderModelOnlycore
model = ◂ node 1 · out[0]lora_name = Wan21_CausVid_14B_T2V_lora_rank32.safetensorsstrength_model = 0.3
outputs: MODEL
4ModelSamplingSD3core
model = ◂ node causvid_lora · out[0]shift = 5.0
outputs: MODEL
5CLIPTextEncodecore
text = {{prompt}}. Seamless continuous camera transition, consistent lighting and color grade. tmplclip = ◂ node 2 · out[0]
outputs: CONDITIONING
6CLIPTextEncodecore
text = hard cut, flash, flicker, color shift, watermark, jpeg artifacts, deformed limbsclip = ◂ node 2 · out[0]
outputs: CONDITIONING
7IsisLoadImageListcustom pack
filenames = {{clip_a_frames}} tmplframe_count = {{clip_a_count}} tmpl
outputs: IMAGE
8IsisLoadImageListcustom pack
filenames = {{clip_b_frames}} tmplframe_count = {{clip_b_count}} tmpl
outputs: IMAGE
9IsisVaceJoinControlcustom pack
clip_a = ◂ node 7 · out[0]clip_b = ◂ node 8 · out[0]gap_frames = {{gap_frames}} tmpl
outputs: IMAGEMASKINT
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 = ◂ node 9 · out[2]batch_size = 1strength = 1.0control_video = ◂ node 9 · out[0]control_masks = ◂ node 9 · out[1]
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_joinformat = 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 (3)#

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.

IsisLoadImageListIsisVaceJoinControlVHS_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
joined-video-transition
outputPackageProfile
video-master-profile
controlModalities
keyframe-anchor-lockseed-lockmodel-locktemporal-lock
consistencyDimensions
motionenvironmentlighting
notes
firstlastclip join: IsisVaceJoinControl builds the exact clip/gray-gap/clip control stream (mask 0/1/0) and VACE generates the transition; clips preserved verbatim.