Nodes/Wan-video-extender/Wan 2.2 Video Extender PRO high+low-noise
ComfyUI Node

Wan 2.2 Video Extender PRO high+low-noise

Steer Wan 2.2's high and low noise experts separately — from one node

By Granddyser·Created 9 months ago·Updated 9 months ago· 34
Wan 2.2 Video Extender PRO high+low-noise
  • high_noise
  • low_noise
  • 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
sampler_name_high
scheduler_high
steps_h4
start_at_step_h0
end_at_step_h10000
cfg_h1.00
sampler_name_low
scheduler_low
steps_l4
start_at_step_l0
end_at_step_l10000
cfg_l1.00
extension_loops1
generate_frames81
overlap_frames16
empty_frame_level0.50
strength1.00
seed0
default_width832
default_height480
prompt_loop_1
lora_high_loop_1
lora_high_strength_11.00
lora_low_loop_1
lora_low_strength_11.00
use_reference_loop_1false
use_overlap_loop_1false
use_endframe_loop_1false
prompt_loop_2
lora_high_loop_2
lora_high_strength_21.00
lora_low_loop_2
lora_low_strength_21.00
use_reference_loop_2false
use_overlap_loop_2false
use_endframe_loop_2false
prompt_loop_3
lora_high_loop_3
lora_high_strength_31.00
lora_low_loop_3
lora_low_strength_31.00
use_reference_loop_3false
use_overlap_loop_3false
use_endframe_loop_3false
prompt_loop_4
lora_high_loop_4
lora_high_strength_41.00
lora_low_loop_4
lora_low_strength_41.00
use_reference_loop_4false
use_overlap_loop_4false
use_endframe_loop_4false
prompt_loop_5
lora_high_loop_5
lora_high_strength_51.00
lora_low_loop_5
lora_low_strength_51.00
use_reference_loop_5false
use_overlap_loop_5false
use_endframe_loop_5false
prompt_loop_6
lora_high_loop_6
lora_high_strength_61.00
lora_low_loop_6
lora_low_strength_61.00
use_reference_loop_6false
use_overlap_loop_6false
use_endframe_loop_6false
prompt_loop_7
lora_high_loop_7
lora_high_strength_71.00
lora_low_loop_7
lora_low_strength_71.00
use_reference_loop_7false
use_overlap_loop_7false
use_endframe_loop_7false
prompt_loop_8
lora_high_loop_8
lora_high_strength_81.00
lora_low_loop_8
lora_low_strength_81.00
use_reference_loop_8false
use_overlap_loop_8false
use_endframe_loop_8false
prompt_loop_9
lora_high_loop_9
lora_high_strength_91.00
lora_low_loop_9
lora_low_strength_91.00
use_reference_loop_9false
use_overlap_loop_9false
use_endframe_loop_9false
prompt_loop_10
lora_high_loop_10
lora_high_strength_101.00
lora_low_loop_10
lora_low_strength_101.00
use_reference_loop_10false
use_overlap_loop_10false
use_endframe_loop_10false

Wan 2.2 is a Mixture of Experts, and the two experts aren't subtle about their jobs: the high-noise pass decides motion and composition, the low-noise pass fills in the detail. In stock ComfyUI, that split is something you wrangle with two sampler stages and a latent hand-off you only half-understand. WanVideoExtenderLowHigh - "Wan 2.2 Video Extender PRO high+low-noise" - takes the same extend-a-video machinery as the pack's native node, but accepts two separate models and runs the split for you, with independent LoRA and sampler settings per stage.

Fair warning up front: this is the pack's Beta node (added in v1.3.0), and the author doesn't hide it. It's for people who want the real MoE architecture - the ability to apply a speed LoRA to the low-noise expert only, keep the high-noise pass clean, and tune each stage's sampler separately. That's not a niche flex. Community consensus is that speed LoRAs applied everywhere "kill everything that's good in" Wan 2.2, but applied to the low-noise pass alone they're the standard trick for fast, still-good output. This node exists so you can do exactly that without building a custom graph.

How it works

Mechanically it's the native node's loop: a gray VACE canvas, the last overlap_frames as context, optional per-loop image cuts and endframes, segments cached to disk and assembled at the end. What changes is the sampling - instead of one pass it chains two KSamplerAdvanced calls:

  • High stage: steps_h (default 4), returns with leftover noise enabled, so it deliberately stops partway through denoising.
  • Low stage: steps_l (default 4), noise disabled, starts from the high stage's leftover latent and finishes the job.

You get full per-stage control: sampler_name_high / scheduler_high / steps_h / cfg_h and the _low counterparts, plus start_at_step and end_at_step for each stage so you can fine-tune exactly where the baton passes. That mirrors the model's own two-expert design - you're just finally steering both hands.

What to feed it

Two model inputs (high_noise, low_noise) plus vae and clip. The pack's high/low workflow guide lists the split setup it was built against:

  • Diffusion models: wan2.2_t2v_high_noise_14B_fp8_scaled and wan2.2_t2v_low_noise_14B_fp8_scaled from Comfy-Org's repackaged Wan 2.2
  • VACE modules: Kijai's Wan2_2_Fun_VACE_module_A14B_HIGH/LOW_bf16, loaded through a model selector
  • Optional: the Lightx2v 4-step LoRA pair, one per expert, at CFG 1.0

That's real setup work, and the LoRA slots prove the point of all of it: lora_high_loop_X and lora_low_loop_X are separate dropdowns, so the high stage can stay untouched while the low stage runs a 4-step LoRA. Every other loop control - prompt_loop_X, image_loop_X, use_endframe_loop_X, reference_image_X - behaves like the native node.

Watch the RAM

The Beta warning is specific and you should believe it: system RAM (CPU RAM, not VRAM) can climb significantly past Loop 5. Segments go to disk to protect VRAM, but the two-model setup plus leftover latents adds up in host memory. Check your RAM before a long multi-loop run and make sure swap exists.

Install

Same as the native node - ComfyUI Manager, search "Wan Video Extender", or:

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

Then restart and grab the split models above. (The README writes pip install requirements.txt, missing the -r - the requirements file itself pulls diffusers, peft, gguf, opencv, and friends.)

Honest take: if this sounds like extra steps for a result the AllInOne model gets from one model input and the native node, you're not wrong. This node is for the person who wants the control, not the person who wants the least work. Start with the native node; come back here when you want to know which expert is doing what to your video - and want to change it.

CategoryWanCustom

Inputs (130)

NameTypeDefaultDescription
high_noiseMODEL
low_noiseMODEL
vaeVAE
clipCLIP
positive_promptSTRING Main-Prompt / Basis-Prompt für alle Loops (Fallback).
negative_promptSTRINGlow quality, blurry, glitch, distortion
sampler_name_highCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
scheduler_highCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
steps_hINT41–100
start_at_step_hINT00–10000
end_at_step_hINT100000–10000
cfg_hFLOAT1.000–100
sampler_name_lowCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
scheduler_lowCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
steps_lINT41–100
start_at_step_lINT00–10000
end_at_step_lINT100000–10000
cfg_lFLOAT1.000–100
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_imageoptIMAGEGlobales Character-Referenzbild für VACE
inpaint_maskoptMASK
prompt_loop_1optSTRINGOptionaler Loop-1-Prompt (String-Node anschließen, leer = Base Prompt).
lora_high_loop_1optCOMBOLoRA für HIGH noise model Loop 1 (None = keine LoRA)
lora_high_strength_1optFLOAT1.000–2
lora_low_loop_1optCOMBOLoRA für LOW noise model Loop 1 (None = keine LoRA)
lora_low_strength_1optFLOAT1.000–2
image_loop_1optIMAGEOptionales Bild / Bilder für Loop 1. Wenn gesetzt, harter Schnitt: diese Frames als Kontext 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-Referenz nur für Loop 1
prompt_loop_2optSTRINGLoop 2 Prompt (leer = Base Prompt)
lora_high_loop_2optCOMBOLoRA für HIGH noise model Loop 2 (None = keine LoRA)
lora_high_strength_2optFLOAT1.000–2
lora_low_loop_2optCOMBOLoRA für LOW noise model Loop 2 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 2
prompt_loop_3optSTRINGLoop 3 Prompt (leer = Base Prompt)
lora_high_loop_3optCOMBOLoRA für HIGH noise model Loop 3 (None = keine LoRA)
lora_high_strength_3optFLOAT1.000–2
lora_low_loop_3optCOMBOLoRA für LOW noise model Loop 3 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 3
prompt_loop_4optSTRINGLoop 4 Prompt (leer = Base Prompt)
lora_high_loop_4optCOMBOLoRA für HIGH noise model Loop 4 (None = keine LoRA)
lora_high_strength_4optFLOAT1.000–2
lora_low_loop_4optCOMBOLoRA für LOW noise model Loop 4 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 4
prompt_loop_5optSTRINGLoop 5 Prompt (leer = Base Prompt)
lora_high_loop_5optCOMBOLoRA für HIGH noise model Loop 5 (None = keine LoRA)
lora_high_strength_5optFLOAT1.000–2
lora_low_loop_5optCOMBOLoRA für LOW noise model Loop 5 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 5
prompt_loop_6optSTRINGLoop 6 Prompt (leer = Base Prompt)
lora_high_loop_6optCOMBOLoRA für HIGH noise model Loop 6 (None = keine LoRA)
lora_high_strength_6optFLOAT1.000–2
lora_low_loop_6optCOMBOLoRA für LOW noise model Loop 6 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 6
prompt_loop_7optSTRINGLoop 7 Prompt (leer = Base Prompt)
lora_high_loop_7optCOMBOLoRA für HIGH noise model Loop 7 (None = keine LoRA)
lora_high_strength_7optFLOAT1.000–2
lora_low_loop_7optCOMBOLoRA für LOW noise model Loop 7 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 7
prompt_loop_8optSTRINGLoop 8 Prompt (leer = Base Prompt)
lora_high_loop_8optCOMBOLoRA für HIGH noise model Loop 8 (None = keine LoRA)
lora_high_strength_8optFLOAT1.000–2
lora_low_loop_8optCOMBOLoRA für LOW noise model Loop 8 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 8
prompt_loop_9optSTRINGLoop 9 Prompt (leer = Base Prompt)
lora_high_loop_9optCOMBOLoRA für HIGH noise model Loop 9 (None = keine LoRA)
lora_high_strength_9optFLOAT1.000–2
lora_low_loop_9optCOMBOLoRA für LOW noise model Loop 9 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 9
prompt_loop_10optSTRINGLoop 10 Prompt (leer = Base Prompt)
lora_high_loop_10optCOMBOLoRA für HIGH noise model Loop 10 (None = keine LoRA)
lora_high_strength_10optFLOAT1.000–2
lora_low_loop_10optCOMBOLoRA für LOW noise model Loop 10 (None = keine LoRA)
lora_low_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-Referenz nur für Loop 10

Outputs (2)

NameTypeDescription
full_videoIMAGE
used_promptsSTRING