Boyo Painter SVI (Motion + Infinite Length)
PainterI2V motion with SVI's context preservation
- positive
- negative
- anchor_samples
- prev_samples
- positive
- negative
- latent
Every local video model has a native context window, and for Wan 2.1/2.2 that window is 81 frames - roughly five seconds. Everything longer is chunking, and chunking is where long videos fall apart: the identity drifts, the motion resets, and you can see the seam. This node is the pack's answer to that problem, and it's a merge of two ideas that were already the community's favorites for it: PainterI2V's motion amplitude enhancement and WanImageToVideoSVIPro's context preservation (SVI being the Stable Video Infinity approach that got Wan 2.2 doing 20–25 second continuous takes).
This is not a beginner node. You reach for it when you've already got a working Wan video pipeline, you're chasing longer video, and you've accepted that infinite length is a stitching problem, not a magic setting. It slots in after your first PainterI2V pass and takes over for samplers 2 and onward.
How it works
The mechanism is worth understanding because it explains why the node has the inputs it has. Wan conditions generation partly through "reference latents" - the first frame that anchors the whole sequence - and through concatenated context latents, which is how you feed the previous chunk's tail into the next chunk so motion continues instead of restarting.
anchor_samples(LATENT) is your anchor: the output of the first PainterI2V sampler. Its first frame becomes thereference_latentsentry that Wan uses to lock the start of the sequence.prev_samples(LATENT, optional) is the previous chunk's latent. Its lastmotion_latent_countframes (default 1) get concatenated onto the anchor as the context that carries motion across the boundary. Leave it unconnected and the node still works - you just get a chunk with no continuity, i.e. a reset.length(default 81) is the frame count for this chunk. Wan's VAE downsamples temporally by 4, so the node builds an empty latent of(length-1)//4 + 1frames, and any gap between your anchor+context and that target is zero-padded.motion_amplitude(1.0–2.0, default 1.15) is the PainterI2V half. It takes the frames after the base anchor, computes their difference from the base, and scales that difference - more motion, less drift-to-static. Above 1.0 it's active; set it to 1.0 to disable.
Outputs are the two conditioned CONDITIONING tensors (positive and negative, both carrying the concat latent and reference latents) plus a fresh LATENT of the requested length to feed the sampler.
Where it fits in a workflow
[Wan model] → [first PainterI2V sampler → anchor_samples]
↓
BoyoPainterSVI (length=81, prev_samples=prev chunk)
↓
[sampler 2 → ... → VAE decode → video]
↓
(loop: decoded chunk → prev_samples)
The 4n+1 frame math matters: Wan chunks land on 81 (or 41, 121…) frames, and the node's length steps by 4 to keep you on schedule. SVI's whole point is hiding the stitching, and this node is the Boyonodes-flavoured version of that trick for Wan 2.2 - where, as the ecosystem notes, SVI works on plain Wan 2.2 but famously doesn't on some third-party builds like Bernini. If you're chaining long-form on Bernini, this path is closed.
Installation
No extra dependencies - it's all torch and ComfyUI internals:
cd ComfyUI/custom_nodes && git clone https://github.com/DragonDiffusionbyBoyo/Boyonodes
Restart and it's available under conditioning/video_models. The real requirement is the surrounding stack: a Wan 2.1/2.2 model, a VAE, and PainterI2V nodes in your workflow.
The honest limits
Infinite-length video doesn't mean drift-free video. SVI and this node make the seams invisible and the motion continuous, but identity still degrades over many chunks, and each chunk is minutes of compute on a 4090-class card. The ceiling here is "20–30 seconds without engineering," not "a feature film." Set expectations accordingly and you'll be impressed by what this node actually does.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| length | INT | 811–4096 | — |
| anchor_samples | LATENT | — | |
| motion_amplitude | FLOAT | 1.151–2 | — |
| motion_latent_count | INT | 10–128 | — |
| prev_samplesopt | LATENT | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |