WanVideo Looper Lora Sequencer
Different LoRAs on different shots, without leaving the graph
- model_high_1
- model_high_2
- model_high_3
- model_high_4
- model_high_5
- model_high_6
- model_high_7
- model_high_8
- model_high_9
- model_high_10
- model_low_1
- model_low_2
- model_low_3
- model_low_4
- model_low_5
- model_low_6
- model_low_7
- model_low_8
- model_low_9
- model_low_10
- clip_1
- clip_2
- clip_3
- clip_4
- clip_5
- clip_6
- clip_7
- clip_8
- clip_9
- clip_10
- model_clip_sequence
Here's the thing the main looper node can't do alone: it runs every segment with the same models. If your video is "woman walks in, woman turns into a dragon, dragon flies off," you want the dragon shots to carry a different LoRA than the human ones - and WanVideo Looper Lora Sequencer is how you get that per-segment control.
The pattern is deliberately ComfyUI-native: you don't do any patching inside this node. You build your patched models the normal way - Load LoRA (or whatever you're using) wired into the base Wan 2.2 high-noise and low-noise models - and you connect the finished MODEL and CLIP outputs into this node's inputs. It then bundles them into a sequence the looper understands and hands them over via its single output, model_clip_sequence, which plugs into the looper's optional input of the same name.
How it works
Under the hood it's a list assembler with a friendly face. It exposes ten segments' worth of inputs - model_high_1 through model_high_10, model_low_1 through model_low_10, and clip_1 through clip_10, all optional - and packs each set into a tuple (model_high, model_low, clip) inside a list. The looper indexes that list by segment number: segment 1 uses what you plugged into _1, segment 2 what you plugged into _2, and so on. Any slot you leave unconnected falls back to the looper's clean base models, which is exactly the behavior you want - patch only the shots that need it.
The one genuinely clever bit is the UI. A little JS watches what's connected and only shows inputs up to the highest connected segment, so instead of a wall of thirty ports you get a tidy node that grows as you plug things in. Connect segment 1, you see segment 2's inputs appear; connect those, and segment 3 shows up. It's a small thing, but it makes a 30-input node readable.
Where people get burned
- It only covers the first 10 prompts. The sequencer hard-stops at segment 10. If your
prompt_listhas 14 lines, segments 11–14 silently run on the base models. The looper logs which models each segment is using, so glance at the console if a late segment comes out looking like it lost its LoRA. - The looper still needs its own base inputs.
model_clip_sequenceoverrides per segment, butmodel_high,model_low, andclipon the looper are still required and act as the fallback - leave them wired even when the sequencer is connected, or the whole thing refuses to run. - Bypassed or wrong-typed connections get ignored. The looper checks that
model_clip_sequenceis actually a list and quietly ignores it otherwise (it logs a warning). If your per-segment LoRAs aren't applying, that's the first thing to check. - Wan 2.2 LoRA basics still apply. Speed LoRAs (lightx2v, CausVid) are the one place to be careful: the community consensus is that they degrade motion and detail on the high-noise pass. If you're sequencing speed LoRAs, keep them off the motion model - this node lets you be that precise, which is rather the point.
Install with the rest of the pack: ComfyUI Manager search "WanVideoLooper", or git clone https://github.com/SquirrelRat/WanVideoLooper into custom_nodes/, restart. No models, no extra Python - it's pure routing between the LoRA nodes you already use and the looper. For anyone trying to hold character identity across a multi-shot Wan video, this is the missing piece between "one LoRA for everything" and "render each shot separately by hand."
Inputs (30)
| Name | Type | Default | Description |
|---|---|---|---|
| model_high_1opt | MODEL | Patched HIGH model for segment 1. | |
| model_high_2opt | MODEL | Patched HIGH model for segment 2. | |
| model_high_3opt | MODEL | Patched HIGH model for segment 3. | |
| model_high_4opt | MODEL | Patched HIGH model for segment 4. | |
| model_high_5opt | MODEL | Patched HIGH model for segment 5. | |
| model_high_6opt | MODEL | Patched HIGH model for segment 6. | |
| model_high_7opt | MODEL | Patched HIGH model for segment 7. | |
| model_high_8opt | MODEL | Patched HIGH model for segment 8. | |
| model_high_9opt | MODEL | Patched HIGH model for segment 9. | |
| model_high_10opt | MODEL | Patched HIGH model for segment 10. | |
| model_low_1opt | MODEL | Patched LOW model for segment 1. | |
| model_low_2opt | MODEL | Patched LOW model for segment 2. | |
| model_low_3opt | MODEL | Patched LOW model for segment 3. | |
| model_low_4opt | MODEL | Patched LOW model for segment 4. | |
| model_low_5opt | MODEL | Patched LOW model for segment 5. | |
| model_low_6opt | MODEL | Patched LOW model for segment 6. | |
| model_low_7opt | MODEL | Patched LOW model for segment 7. | |
| model_low_8opt | MODEL | Patched LOW model for segment 8. | |
| model_low_9opt | MODEL | Patched LOW model for segment 9. | |
| model_low_10opt | MODEL | Patched LOW model for segment 10. | |
| clip_1opt | CLIP | Patched CLIP model for segment 1. | |
| clip_2opt | CLIP | Patched CLIP model for segment 2. | |
| clip_3opt | CLIP | Patched CLIP model for segment 3. | |
| clip_4opt | CLIP | Patched CLIP model for segment 4. | |
| clip_5opt | CLIP | Patched CLIP model for segment 5. | |
| clip_6opt | CLIP | Patched CLIP model for segment 6. | |
| clip_7opt | CLIP | Patched CLIP model for segment 7. | |
| clip_8opt | CLIP | Patched CLIP model for segment 8. | |
| clip_9opt | CLIP | Patched CLIP model for segment 9. | |
| clip_10opt | CLIP | Patched CLIP model for segment 10. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model_clip_sequence | ANY | — |