I2V Looper
Chain Wan clips into one long video without melting your VRAM
- model
- vae
- clip
- clip_vision
- start_image
- loop_1
- loop_2
- loop_3
- loop_4
- loop_5
- loop_6
- loop_7
- loop_8
- loop_9
- loop_10
- full_video
- used_prompts
What it is
ComfyUI's built-in Wan support (WanImageToVideo) hands you one clip per generation - typically 81 frames, a few seconds - and no amount of prompt persuasion turns that into a long, continuous take. I2V Looper is the answer: it chains those clips together, using the last frame of each segment as the start image of the next. The result is a genuinely long video out of Wan, with a different prompt allowed on every segment.
This is the single-model workhorse of the Native Looper pack. If you're on Wan 2.1's I2V 14B, or Wan 2.2's 5B, this is the node you want. If you're on Wan 2.2's big two-expert A14B pair, skip this page and read the High/Low variant instead - the mechanism is the same, but the sampling needs two models.
How it works
For each segment, the node encodes your prompt and the CLIP Vision features of the current start image, builds the WanImageToVideo conditioning, optionally applies that segment's LoRA, samples with a KSampler, and decodes through the VAE. Then comes the memory trick that makes the whole thing viable: it saves the decoded segment to disk, clears the VRAM cache (soft_empty_cache plus a garbage-collect), and only then starts the next loop from the previous segment's final frame. Everything gets concatenated at the end. That's why you can chain segments that would never fit in VRAM simultaneously.
The honest caveat: every loop is a fresh generation. Character and scene consistency are anchored by the previous frame, not guaranteed, so very long chains still drift eventually. The README's "sharp output and character consistency" is doing a lot of work there - it means "more consistent than ten separate generations," not "flawless."
Inputs that matter
- model / vae / clip / clip_vision - the full Wan stack.
clip_vision's tooltip is the author telling you what to load: "CLIP Vision model (e.g. clip_vision_h.safetensors)". I2V fundamentally needs that model to read your start image; skip it and nothing works. - start_image - frame one of loop 1. The node resizes it to your width/height automatically.
- width / height - 832×480 by default, snapped to multiples of 16. Match your checkpoint's native resolution.
- steps / cfg / sampler_name / scheduler - defaults of 20 steps, cfg 4, uni_pc / normal are sensible for single-pass Wan.
- positive_prompt - the base/fallback prompt, used for any segment whose I2VLoop card has an empty prompt. negative_prompt - global negative, defaulting to "low quality, blurry, glitch, distortion."
- loop_1 … loop_10 - where your I2VLoop configs plug in. Unconnected slots are auto-detected and skipped.
Outputs
- full_video (IMAGE) - one tensor of all concatenated frames. Note that it is not a video file; you feed it into something like VideoHelperSuite's Video Combine to encode an mp4, which is exactly what the pack's own example workflows do.
- used_prompts (STRING) - a per-segment log of which prompt actually ran. Genuinely useful when a segment comes out wrong and you want to know what it generated with.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/masteroleary/ComfyUI-LooperNode
Restart, or grab it through Manager by searching "Native Looper." No Python dependencies - everything it calls ships with ComfyUI core. The models are a separate download: a Wan I2V checkpoint, the Wan VAE, the umt5 text encoder, and a CLIP Vision model. The pack's own workflow uses GGUF quants (wan22I2VA14BGGUF_q8A14BHigh/Low.gguf for the HL variant), wan_2.1_vae.safetensors, umt5_xxl_fp8_e4m3fn_scaled.safetensors, and clip_vision_h.safetensors.
Common issues
- Nothing wired into the loop slots still runs. With no loops connected, the code falls back to a single segment from the base prompt - it won't error, it'll just quietly make something you didn't plan. Check your wiring first.
- Memory. Wan 2.1 14B wants around 12GB VRAM even with GGUF quantization; the KB's honest floor is that 720p comfort wants 24GB. Drop width/height before you drop quality if you're squeezing.
- Seed behavior. The seed increments internally on every loop, so a "fixed" seed only pins loop 1. That's usually what you want for variation, but it surprises people who expect reproducibility.
- It's a newborn pack - a single commit at the time of writing, zero community footprint. The code is thin enough that most failures are familiar Wan failures, but don't expect a support forum full of answers behind it yet.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| vae | VAE | — | |
| clip | CLIP | — | |
| clip_vision | CLIP_VISION | CLIP Vision model (e.g. clip_vision_h.safetensors) | |
| start_image | IMAGE | Start image for loop 1 | |
| width | INT | 83216–4096 | — |
| height | INT | 48016–4096 | — |
| steps | INT | 201–100 | — |
| cfg | FLOAT | 4.00–30 | — |
| sampler_name | COMBO | uni_pc | 5 options: uni_pc, euler, dpm++_sde, dpm++_2m, ddim |
| scheduler | COMBO | normal | 4 options: normal, simple, karras, sgm_uniform |
| seed | INT | 00–18446744073709550000 | — |
| positive_promptopt | STRING | Base/fallback prompt | |
| negative_promptopt | STRING | Global negative prompt | |
| loop_1opt | NATIVE_LOOP | — | |
| loop_2opt | NATIVE_LOOP | — | |
| loop_3opt | NATIVE_LOOP | — | |
| loop_4opt | NATIVE_LOOP | — | |
| loop_5opt | NATIVE_LOOP | — | |
| loop_6opt | NATIVE_LOOP | — | |
| loop_7opt | NATIVE_LOOP | — | |
| loop_8opt | NATIVE_LOOP | — | |
| loop_9opt | NATIVE_LOOP | — | |
| loop_10opt | NATIVE_LOOP | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| full_video | IMAGE | — |
| used_prompts | STRING | — |