Nodes/ComfyUI-PainterMultiF2V/Painter Multi F2V
ComfyUI Node

Painter Multi F2V

Chain Wan 2.2 clips from your keyframes

By princepainter·Created 7 months ago·Updated 7 months ago· 23
Painter Multi F2V
  • clip
  • vae
  • positive
  • negative
  • start_image
  • image_2
  • image_3
  • image_4
  • positive
  • negative
  • latent
  • segment_count
width832
height480
length81
batch_size1

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's prompt_list here.
  • 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_vision input, 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.

CategoryPainter/Wan

Inputs (12)

NameTypeDefaultDescription
clipCLIP
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT811–16384
batch_sizeINT11–4096
positiveoptLIST
negativeoptLIST
start_imageoptIMAGE
image_2optIMAGE
image_3optIMAGE
image_4optIMAGE

Outputs (4)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
segment_countINT