Painter Multi F2V
Chain Wan 2.2 clips from your keyframes
- clip
- vae
- positive
- negative
- start_image
- image_2
- image_3
- image_4
- positive
- negative
- latent
- segment_count
The name both oversells and undersells it. Painter Multi F2V doesn't render your video - the sampler does that - but it does the part most people dread: turning a row of keyframes into Wan 2.2's first/last-frame conditioning, one clip per segment, in a single node.
If you've built a Wan image-to-video workflow by hand, you know the ceremony: resize the frames, drop them onto a gray canvas, VAE-encode, then staple concat_latent_image and concat_mask onto your conditioning so the model knows which frames are given. This node automates all of it for a chain of keyframes, so each clip starts exactly where the last one ended - keyframes in, multi-segment storyboard out.
Why you'd reach for it
The README (Chinese-first, worth knowing) pitches this as 分镜头长视频 - shot-by-shot long video. You load a start keyframe, an end keyframe, and up to two in-between ones; the node turns N images into N−1 segments: 1→2, 2→3, 3→4. Clip 2's first frame is clip 1's last frame by construction - the entire trick behind "one continuous 15-second video" (three segments × 81 frames at 16fps ≈ 15s, matching the bundled workflow).
And the good news: this isn't snake oil. It's the same concat-latent conditioning ComfyUI's built-in WanImageToVideo produces - encode the anchor frames, zero the mask over the pinned regions, hand both to the conditioning. I verified it against ComfyUI's own source, because the author's wider "Painter" family has drawn public criticism for nodes that claim more than they deliver. This one is a wrapper around a well-understood trick - which is why it's safe.
How it works
Each adjacent pair of images becomes one segment. The node resizes the start and end frames to your width×height, lays them into a mid-gray length-frame canvas (start at the head, end at the tail), VAE-encodes it, and stamps a mask that says "these frames are given - denoise everything else." That's the first/last-frame mode Wan 2.2 was trained with, using the same conditioning keys the Wan model actually consumes.
It also hands you an empty latent at the right shape - width/8, height/8, ((length-1)//4)+1 frames - because Wan's VAE compresses space 8× and time 4×. Don't panic that it's all zeros; the picture content lives inside the conditioning, not the latent.
The inputs that matter
start_image,image_2,image_3,image_4- one to four keyframes. N images → N−1 segments. One image alone = plain first-frame I2V, no end pin.positive/negative- LIST inputs, one prompt per segment. Wire PainterPrompt'sprompt_listhere.length- frames per segment (step 4; default 81 ≈ 5s at 16fps).width/height- multiples of 16; the bundled workflow uses 832×480.
Outputs are positive, negative, and latent - each a list with one entry per segment - plus segment_count, an INT for sanity-checking your math. Wire the lists into a KSampler; ComfyUI fans each entry out, running the chain once per segment and collecting back into a list. The bundled workflow uses the standard Wan 2.2 14B dual-expert chain - high/low-noise UNet loaders, lightx2v 4-step LoRAs, ModelSamplingSD3 shift 5, a couple of KSamplerAdvanced nodes - then VAEDecode per segment and PainterCombineFromBatch to stitch.
Install
In ComfyUI Manager, search ComfyUI-PainterMultiF2V, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterMultiF2V
# restart ComfyUI
No requirements.txt, no models from the pack - it's three small pure-Python files touching only ComfyUI's own APIs. You still need the standard Wan 2.2 I2V stack in ComfyUI/models: the I2V-A14B high/low-noise checkpoints, the umt5_xxl text encoder, and the Wan 2.1 VAE.
Where people get burned
- "Prompt count must match segment count" - the #1 failure, a clear ValueError. N images → N−1 segments, and PainterPrompt silently drops empty text boxes - count your prompts.
- "positive is required" - you connected nothing to the LIST input. (The error text says "connect 'PromptList.prompt_list'" - a stale name for PainterPrompt.)
- "At least start_image must be provided" - no image reached the node.
- Nothing renders - this node doesn't sample; no KSampler after it, no video.
- Segments drift from your keyframes - this node has no
clip_visioninput, unlike the full official I2V-14B setup. It relies on anchor frames and text alone, so adherence can be weaker.
Set expectations honestly: this node saves you the conditioning hand-wiring and gives you a per-segment prompt list. The "coherent long video" marketing from the wider Painter family is optimistic - Wan's clip-to-clip drift is still yours. As a wrapper for multi-keyframe Wan 2.2, though, it does exactly what it says.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 811–16384 | — |
| batch_size | INT | 11–4096 | — |
| positiveopt | LIST | — | |
| negativeopt | LIST | — | |
| start_imageopt | IMAGE | — | |
| image_2opt | IMAGE | — | |
| image_3opt | IMAGE | — | |
| image_4opt | IMAGE | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| segment_count | INT | — |