Nodes/ComfyUI Wan VACE Prep/πŸͺ VACE First/Middle/Last (Experimental)
ComfyUI Node

πŸͺ VACE First/Middle/Last (Experimental)

Keyframe-driven video, and why you may not want it

By stuttlepressΒ·Created 8 months agoΒ·Updated 25 days agoΒ· 100
πŸͺ VACE First/Middle/Last (Experimental)
  • first
  • middle
  • last
  • control_video
  • control_mask
  • width
  • height
  • length
β—„width832β–Ί
β—„height480β–Ί
β—„length81β–Ί
β—„middle_position0.50β–Ί

This node builds a VACE control video from three optional keyframes: a first frame, a middle frame, and a last frame. You feed in the stills that anchor your shot, and Wan fills in everything between them. It's the same first/middle/last idea as the conditioning-based node in this pack, except here the keyframes go into the VACE control video rather than into the conditioning latents. That difference matters more than you'd think.

Because it's VACE-driven, you get a control video where the known frames sit at their positions with mask 0, and every other frame is a gray placeholder with mask 1 - "generate here." The middle keyframe gets centered at whatever fraction of the timeline you set with middle_position.

The honest take

The author's README says it plainly: "I have found VACE FLF2V and FMLF2V to be far less effective than conditioning-based versions. VACE-generated motion tends to be very linear, unnatural when applied to people, except for very short sequences." This is the trap version of the node. If your subject is a person, or anything organic, the VACE path interpolates between keyframes in a way that reads as stiff and mechanical - great for a slow camera move, bad for a character. The conditioning-based sibling (WanFMLF2V in this same pack) is what the author reaches for instead.

So: reach for this node when the motion is simple and you specifically want the VACE path. For people, prefer the conditioning route.

The inputs and outputs that matter

  • width / height (defaults 832Γ—480) - output resolution, snapped to a 16px grid. The node prints a console note when it snaps.
  • length (default 81) - total frame count, snapped to the 4n+1 pattern (1, 5, 9, …). 81 is the Wan-native sweet spot.
  • middle_position (default 0.5) - where the middle keyframe lands, as a fraction of the timeline.
  • first, middle, last - all optional IMAGE inputs. Supply any subset; unspecified regions stay gray placeholders.

Outputs: control_video and control_mask (to WanVaceToVideo), plus the final snapped width, height, and length.

Install

ComfyUI Manager β†’ search "Wan VACE Prep" β†’ install β†’ restart, or:

cd /path/to/comfyui/custom_nodes
git clone https://github.com/stuttlepress/ComfyUI-Wan-VACE-Prep

Zero dependencies, no model downloads. Downstream you still need the Wan VACE checkpoint.

Common issues

  • Linear, robotic motion - not a bug, it's the method. See the author's own verdict above; switch to the conditioning-based node for organic subjects.
  • Length snaps down - request 84 frames and it quietly becomes 81. The node logs the snap to the console, so check there before you wonder why the output is shorter than asked.
  • Known frames overwrite each other - if first + middle + last together exceed the total length, the node clamps; keep keyframes small (a frame or two each) and the timeline reasonable.
CategoryWan VACE Prep/VACE

Inputs (7)

NameTypeDefaultDescription
widthINT83216–16384β€”
heightINT48016–16384β€”
lengthINT811–16384Total frame count. Must follow the 4n+1 pattern (1, 5, 9, ..., 81, ...).
middle_positionFLOAT0.500–1Where middle frames are centered in the video, as a fraction of total length.
firstoptIMAGEβ€”
middleoptIMAGEβ€”
lastoptIMAGEβ€”

Outputs (5)

NameTypeDescription
control_videoIMAGEβ€”
control_maskMASKβ€”
widthINTβ€”
heightINTβ€”
lengthINTβ€”