Nodes/Wan-video-extender/Wan 2.2 Video Extender PRO
ComfyUI Node

Wan 2.2 Video Extender PRO

Wan 2.2 only goes 81 frames. This node keeps going.

By Granddyser·Created 10 months ago·Updated 10 months ago· 34
Wan 2.2 Video Extender PRO
  • model
  • vae
  • clip
  • image
  • video
  • reference_image
  • inpaint_mask
  • image_loop_1
  • reference_image_1
  • image_loop_2
  • reference_image_2
  • image_loop_3
  • reference_image_3
  • image_loop_4
  • reference_image_4
  • image_loop_5
  • reference_image_5
  • image_loop_6
  • reference_image_6
  • image_loop_7
  • reference_image_7
  • image_loop_8
  • reference_image_8
  • image_loop_9
  • reference_image_9
  • image_loop_10
  • reference_image_10
  • full_video
  • used_prompts
positive_prompt
negative_promptlow quality, blurry, glitch, distortion
steps4
cfg1.00
sampler_name
scheduler
extension_loops1
generate_frames81
overlap_frames16
empty_frame_level0.50
strength1.00
seed0
default_width832
default_height480
prompt_loop_1
lora_loop_1
lora_strength_11.00
use_reference_loop_1false
use_overlap_loop_1false
use_endframe_loop_1false
prompt_loop_2
lora_loop_2
lora_strength_21.00
use_reference_loop_2false
use_overlap_loop_2false
use_endframe_loop_2false
prompt_loop_3
lora_loop_3
lora_strength_31.00
use_reference_loop_3false
use_overlap_loop_3false
use_endframe_loop_3false
prompt_loop_4
lora_loop_4
lora_strength_41.00
use_reference_loop_4false
use_overlap_loop_4false
use_endframe_loop_4false
prompt_loop_5
lora_loop_5
lora_strength_51.00
use_reference_loop_5false
use_overlap_loop_5false
use_endframe_loop_5false
prompt_loop_6
lora_loop_6
lora_strength_61.00
use_reference_loop_6false
use_overlap_loop_6false
use_endframe_loop_6false
prompt_loop_7
lora_loop_7
lora_strength_71.00
use_reference_loop_7false
use_overlap_loop_7false
use_endframe_loop_7false
prompt_loop_8
lora_loop_8
lora_strength_81.00
use_reference_loop_8false
use_overlap_loop_8false
use_endframe_loop_8false
prompt_loop_9
lora_loop_9
lora_strength_91.00
use_reference_loop_9false
use_overlap_loop_9false
use_endframe_loop_9false
prompt_loop_10
lora_loop_10
lora_strength_101.00
use_reference_loop_10false
use_overlap_loop_10false
use_endframe_loop_10false

Wan 2.2's native context is 81 frames, and that's about five seconds at 16fps. If you've been hand-chaining chunks in ComfyUI - sampling 81 frames, feeding the tail back into the next pass, doing the frame math wrong and getting a clip that comes back two frames short - you know exactly who this node is for. WanVideoExtenderNative (listed as "Wan 2.2 Video Extender PRO") folds that whole extend-and-stitch loop into a single node, and unlike a lot of the single-node chunkers floating around, it hands you real story control while it's at it.

It's the workhorse of the Granddyser/wan-video-extender pack, from the same author who publishes free Wan fine-tunes on HuggingFace. The companion model he recommends is Phr00t's WAN2.2-14B-Rapid-AllInOne. "AllInOne" matters here, because this node is built on VACE conditioning and the embedded workflow guide says it flat out: "Feel free to try any other model, but VACE integration is required!" Feed it a plain Wan checkpoint and it gets conditioning it can't use.

How it works

Each loop builds a VACE control latent: a gray canvas at empty_frame_level (default 0.5, mid-gray), with the last overlap_frames frames of your previous clip stamped in at the front as context, and anything connected to image_loop_X pasted in as a hard cut. Turn on use_endframe_loop_X and it also takes the next loop's image and pins it to the end of the clip as a target to animate toward - a cheap way to force a shot to land somewhere specific.

Then it samples at denoise 1.0, decodes, and here's the memory trick: each segment is written to disk (a temp dir prefixed wan_segments_) instead of staying in RAM, and models are unloaded between loops. Only the overlap stays resident; the author claims roughly 150–200MB during processing, and the final video is assembled from disk at the end. That's what makes "5-second clips" stop being a ceiling. Ten loops at 81 frames is close to a minute of footage without the machine grinding to a halt.

The settings that matter

Wire up model, vae, and clip as usual, then the numbers a beginner actually touches:

  • extension_loops (1–10): how many chunks to generate. Start at 2 for tests.
  • generate_frames (default 81): frames per loop. Just leave it.
  • overlap_frames (4–64, default 16): how much context carries into the next loop. More overlap = smoother, shorter, slower. The README's sweet spot is 16–24.

The tested combo for the Rapid model is steps 4, sampler euler_a, scheduler beta, CFG 1.0. Don't blindly copy that onto an undistilled checkpoint - CFG 1.0 at 4 steps is a speed-LoRA thing, not a Wan default. strength (default 1.0) is the VACE strength: how hard the input frames are enforced against the generated ones.

Input modes are the nice part: video in for V2V, a single image for I2V, or nothing for T2V. One gotcha - default_width/default_height only apply to T2V. With an image input the node uses the image's own resolution, so resize your stills before feeding them in. Connect a reference_image and VACE keeps faces and characters consistent across loops, which is the single biggest quality win for long takes.

For storytelling, prompt_loop_1..10 each take a String node, lora_loop_1..10 are dropdowns over your loras folder, and image_loop_1..10 do scene cuts. Outputs are full_video (IMAGE) and used_prompts (STRING), so you can see which prompt actually ran per loop.

Install

ComfyUI Manager - search "Wan Video Extender" - or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/Granddyser/wan-video-extender
pip install -r requirements.txt

Then restart. The requirements pull in diffusers, peft, gguf (so quantized Wan checkpoints work), opencv, and friends. Small trap: the README literally writes pip install requirements.txt, missing the -r - easy copy-paste stumble that fails on the first token.

Grounded gripes

The node is a skyscraper on your canvas - ten loops of per-loop inputs adds up to a lot of widgets, and the author owns it: a "luxury high-rise of functionality rather than a sprawling slum of spaghetti wires." Fine, but leave the loops you aren't using alone. And remember identity drift across chunk boundaries is physics of the 81-frame context - the reference image and overlap are a mitigation, not a cure. It's the node I'd reach for when a short Wan clip needs to become a scene.

CategoryWanCustom

Inputs (101)

NameTypeDefaultDescription
modelMODEL
vaeVAE
clipCLIP
positive_promptSTRING Main-Prompt / Basis-Prompt for all Loops (Fallback).
negative_promptSTRINGlow quality, blurry, glitch, distortion
stepsINT41–100
cfgFLOAT1.000–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
extension_loopsINT11–10
generate_framesINT8116–200
overlap_framesINT164–64Anzahl Überlappungsframes zwischen Loops (Kontext).
empty_frame_levelFLOAT0.500–1
strengthFLOAT1.000–10
seedINT00–18446744073709550000
default_widthINT832256–2048
default_heightINT480256–2048
imageoptIMAGE
videoopt*
reference_imageoptIMAGECharacter Reference für VACE
inpaint_maskoptMASK
prompt_loop_1optSTRINGOptionaler Loop-1-Prompt (String-Node anschließen, leer = Base Prompt).
lora_loop_1optCOMBOLoRA für Loop 1 (None = keine LoRA)
lora_strength_1optFLOAT1.000–2
image_loop_1optIMAGEOptionales Bild / Bilder für Loop 1. Wenn gesetzt, wird hier ein harter Schnitt gemacht und diese Frames als Kontext verwendet (statt vorheriger 16 Frames).
use_reference_loop_1optBOOLEANfalseUse global reference image for Loop 1
use_overlap_loop_1optBOOLEANfalseUse overlap context for Loop 1
use_endframe_loop_1optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 1 (VACE Endframe).
reference_image_1optIMAGECharacter Reference für VACE
prompt_loop_2optSTRINGLoop 2 Prompt (leer = Base Prompt)
lora_loop_2optCOMBOLoRA für Loop 2 (None = keine LoRA)
lora_strength_2optFLOAT1.000–2
image_loop_2optIMAGEOptionales Bild / Bilder für Loop 2 (harte Schnitt-Quelle).
use_reference_loop_2optBOOLEANfalseUse global reference image for Loop 2
use_overlap_loop_2optBOOLEANfalseUse overlap context for Loop 2
use_endframe_loop_2optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 2 (VACE Endframe).
reference_image_2optIMAGECharacter Reference für VACE
prompt_loop_3optSTRINGLoop 3 Prompt (leer = Base Prompt)
lora_loop_3optCOMBOLoRA für Loop 3 (None = keine LoRA)
lora_strength_3optFLOAT1.000–2
image_loop_3optIMAGEOptionales Bild / Bilder für Loop 3 (harte Schnitt-Quelle).
use_reference_loop_3optBOOLEANfalseUse global reference image for Loop 3
use_overlap_loop_3optBOOLEANfalseUse overlap context for Loop 3
use_endframe_loop_3optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 3 (VACE Endframe).
reference_image_3optIMAGECharacter Reference für VACE
prompt_loop_4optSTRINGLoop 4 Prompt (leer = Base Prompt)
lora_loop_4optCOMBOLoRA für Loop 4 (None = keine LoRA)
lora_strength_4optFLOAT1.000–2
image_loop_4optIMAGEOptionales Bild / Bilder für Loop 4 (harte Schnitt-Quelle).
use_reference_loop_4optBOOLEANfalseUse global reference image for Loop 4
use_overlap_loop_4optBOOLEANfalseUse overlap context for Loop 4
use_endframe_loop_4optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 4 (VACE Endframe).
reference_image_4optIMAGECharacter Reference für VACE
prompt_loop_5optSTRINGLoop 5 Prompt (leer = Base Prompt)
lora_loop_5optCOMBOLoRA für Loop 5 (None = keine LoRA)
lora_strength_5optFLOAT1.000–2
image_loop_5optIMAGEOptionales Bild / Bilder für Loop 5 (harte Schnitt-Quelle).
use_reference_loop_5optBOOLEANfalseUse global reference image for Loop 5
use_overlap_loop_5optBOOLEANfalseUse overlap context for Loop 5
use_endframe_loop_5optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 5 (VACE Endframe).
reference_image_5optIMAGECharacter Reference für VACE
prompt_loop_6optSTRINGLoop 6 Prompt (leer = Base Prompt)
lora_loop_6optCOMBOLoRA für Loop 6 (None = keine LoRA)
lora_strength_6optFLOAT1.000–2
image_loop_6optIMAGEOptionales Bild / Bilder für Loop 6 (harte Schnitt-Quelle).
use_reference_loop_6optBOOLEANfalseUse global reference image for Loop 6
use_overlap_loop_6optBOOLEANfalseUse overlap context for Loop 6
use_endframe_loop_6optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 6 (VACE Endframe).
reference_image_6optIMAGECharacter Reference für VACE
prompt_loop_7optSTRINGLoop 7 Prompt (leer = Base Prompt)
lora_loop_7optCOMBOLoRA für Loop 7 (None = keine LoRA)
lora_strength_7optFLOAT1.000–2
image_loop_7optIMAGEOptionales Bild / Bilder für Loop 7 (harte Schnitt-Quelle).
use_reference_loop_7optBOOLEANfalseUse global reference image for Loop 7
use_overlap_loop_7optBOOLEANfalseUse overlap context for Loop 7
use_endframe_loop_7optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 7 (VACE Endframe).
reference_image_7optIMAGECharacter Reference für VACE
prompt_loop_8optSTRINGLoop 8 Prompt (leer = Base Prompt)
lora_loop_8optCOMBOLoRA für Loop 8 (None = keine LoRA)
lora_strength_8optFLOAT1.000–2
image_loop_8optIMAGEOptionales Bild / Bilder für Loop 8 (harte Schnitt-Quelle).
use_reference_loop_8optBOOLEANfalseUse global reference image for Loop 8
use_overlap_loop_8optBOOLEANfalseUse overlap context for Loop 8
use_endframe_loop_8optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 8 (VACE Endframe).
reference_image_8optIMAGECharacter Reference für VACE
prompt_loop_9optSTRINGLoop 9 Prompt (leer = Base Prompt)
lora_loop_9optCOMBOLoRA für Loop 9 (None = keine LoRA)
lora_strength_9optFLOAT1.000–2
image_loop_9optIMAGEOptionales Bild / Bilder für Loop 9 (harte Schnitt-Quelle).
use_reference_loop_9optBOOLEANfalseUse global reference image for Loop 9
use_overlap_loop_9optBOOLEANfalseUse overlap context for Loop 9
use_endframe_loop_9optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 9 (VACE Endframe).
reference_image_9optIMAGECharacter Reference für VACE
prompt_loop_10optSTRINGLoop 10 Prompt (leer = Base Prompt)
lora_loop_10optCOMBOLoRA für Loop 10 (None = keine LoRA)
lora_strength_10optFLOAT1.000–2
image_loop_10optIMAGEOptionales Bild / Bilder für Loop 10 (harte Schnitt-Quelle).
use_reference_loop_10optBOOLEANfalseUse global reference image for Loop 10
use_overlap_loop_10optBOOLEANfalseUse overlap context for Loop 10
use_endframe_loop_10optBOOLEANfalseNutze Bild(er) des nächsten Loops als Endframe für Loop 10 (falls vorhanden, sonst ignoriert).
reference_image_10optIMAGECharacter Reference für VACE

Outputs (2)

NameTypeDescription
full_videoIMAGE
used_promptsSTRING