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)
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.
promptstringrequiredclip_a_framesimage_sequencerequiredclip_b_framesimage_sequencerequiredclip_a_countintegerdefault 24min 4max 64clip_b_countintegerdefault 24min 4max 64gap_framesintegerdefault 33min 9max 97resolutionenumdefault square_640square_640portrait_480plandscape_480pmodel_tierenumdefault vace_1_3bvace_1_3bvace_14bfpsintegerdefault 16min 8max 30seedintegerdefault -1ComfyUI 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.
Nodes (14)#
1UNETLoadercoreunet_name = {{model_files[model_tier]}} tmplweight_dtype = defaultMODEL2CLIPLoadercoreclip_name = umt5_xxl_fp8_e4m3fn_scaled.safetensorstype = wanCLIP3VAELoadercorevae_name = wan_2.1_vae.safetensorsVAEcausvid_loraLoraLoaderModelOnlycoremodel = ◂ node 1 · out[0]lora_name = Wan21_CausVid_14B_T2V_lora_rank32.safetensorsstrength_model = 0.3MODEL4ModelSamplingSD3coremodel = ◂ node causvid_lora · out[0]shift = 5.0MODEL5CLIPTextEncodecoretext = {{prompt}}. Seamless continuous camera transition, consistent lighting and color grade. tmplclip = ◂ node 2 · out[0]CONDITIONING6CLIPTextEncodecoretext = hard cut, flash, flicker, color shift, watermark, jpeg artifacts, deformed limbsclip = ◂ node 2 · out[0]CONDITIONING7IsisLoadImageListcustom packfilenames = {{clip_a_frames}} tmplframe_count = {{clip_a_count}} tmplIMAGE8IsisLoadImageListcustom packfilenames = {{clip_b_frames}} tmplframe_count = {{clip_b_count}} tmplIMAGE9IsisVaceJoinControlcustom packclip_a = ◂ node 7 · out[0]clip_b = ◂ node 8 · out[0]gap_frames = {{gap_frames}} tmplIMAGEMASKINT10WanVaceToVideocorepositive = ◂ 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]CONDITIONINGCONDITIONINGLATENTINT11KSamplercoremodel = ◂ 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.0LATENT12VAEDecodecoresamples = ◂ node 11 · out[0]vae = ◂ node 3 · out[0]IMAGE13VHS_VideoCombinecustom packimages = ◂ node 12 · out[0]frame_rate = {{fps}} tmplloop_count = 0filename_prefix = vace_joinformat = video/h264-mp4save_output = trueVHS_FILENAMESParameter 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_3bwan2.1_vace_1.3B_fp16.safetensorsvace_14bwan2.1_vace_14B_fp16.safetensorsModels & 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_VideoCombineModels required (5)#
Wan21_CausVid_14B_T2V_lora_rank32.safetensorsumt5_xxl_fp8_e4m3fn_scaled.safetensorswan2.1_vace_1.3B_fp16.safetensorswan2.1_vace_14B_fp16.safetensorswan_2.1_vae.safetensorsOutput contract#
What a successful run of this workflow returns.
typevideoformatmp4Taxonomy & 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.
assetFamilyjoined-video-transitionoutputPackageProfilevideo-master-profilecontrolModalitieskeyframe-anchor-lockseed-lockmodel-locktemporal-lockconsistencyDimensionsmotionenvironmentlightingnotesfirstlastclip join: IsisVaceJoinControl builds the exact clip/gray-gap/clip control stream (mask 0/1/0) and VACE generates the transition; clips preserved verbatim.