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 11 months ago·Updated 11 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—