FL Wan First Frame Last Frame
Morph Wan between a start and end frame
- positive
- negative
- vae
- clip_vision_start_image
- clip_vision_end_image
- start_image
- end_image
- interpolation_mask
- positive
- negative
- latent
First-last-frame (FLF) is the workhorse trick of open video. You give Wan a start image and an end image, and it generates the motion that gets you from one to the other. It's how people build long, consistent clips - chain segments end-to-frame - and how you get controlled transitions instead of "whatever the model felt like." FL_WanFirstLastFrameToVideo is Fill-Nodes' take on that conditioning step: it takes your two keyframes, your positive/negative conditioning, and a VAE, and builds the conditioning and latent that a Wan sampler then turns into the actual video.
To be clear about where it sits: this node doesn't sample. It's the setup node that prepares everything the sampler needs, the way ComfyUI's native Wan FLF conditioning nodes do - but with extra controls over how the interpolation between your two frames behaves. It lives in the pack's Work-in-Progress section, so treat it as capable-but-evolving rather than rock-solid.
The inputs and outputs that matter
The required plumbing is standard Wan: positive and negative conditioning, a vae, and the video dimensions - width (default 832), height (default 480), and length (default 81, stepping in 4s). Those defaults aren't arbitrary: 832×480 and 81 frames is Wan's native comfort zone, and the length steps by 4 because Wan wants a 4n+1 frame count. Don't fight those unless you know why.
The keyframes go in the optional inputs - start_image and end_image (your two anchors) - usually alongside clip_vision_start_image / clip_vision_end_image, the CLIP-vision encodings Wan uses to actually understand what's in those frames. The controls that make this node its own thing:
keyframe_start_position/keyframe_end_position(0–1) - where in the clip your two frames land, so the anchor isn't forced to be dead first and dead last.interpolation_curve-linear,ease_in,ease_out,ease_in_out, orbounce- the pacing of the morph. Bounce and the eases give you non-uniform motion between the frames.interpolation_mask(+mask_feather,mask_invert,regional_blending) - restrict the transition to part of the frame, so one region morphs while another holds.
Outputs are positive, negative, and latent - wire those into your Wan KSampler.
Installing it
Part of ComfyUI_Fill-Nodes. ComfyUI Manager: search Fill-Nodes, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
then restart ComfyUI. The node itself has no separate download - but it's useless without a Wan model and its CLIP-vision encoder loaded elsewhere in the graph, which are the real (large) downloads. Get a working stock Wan FLF workflow running first, then swap this node in.
Where people get stuck
The usual Wan realities all apply. Native context is 81 frames - go much past it and you get looping or degradation, so build long video by chaining clips (this node's whole reason to exist), not by cranking length. Keep dimensions on Wan's grid (multiples of 16, and the 4n+1 length rule) or the sampler complains. And because it's a WIP node, if a fancy control (bounce curve, regional masking) misbehaves, fall back to linear and no mask to confirm the basic FLF path works before blaming your keyframes. Get the boring version morphing cleanly first, then add the flourishes.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–8192 | — |
| height | INT | 48016–8192 | — |
| length | INT | 811–8192 | — |
| batch_size | INT | 11–4096 | — |
| keyframe_start_position | FLOAT | 0.000–1 | — |
| keyframe_end_position | FLOAT | 1.000–1 | — |
| interpolation_curve | COMBO | ease_in_out | 5 options: linear, ease_in, ease_out, ease_in_out, bounce |
| temporal_buffer | INT | 30–10 | — |
| clip_vision_start_imageopt | CLIP_VISION_OUTPUT | — | |
| clip_vision_end_imageopt | CLIP_VISION_OUTPUT | — | |
| start_imageopt | IMAGE | — | |
| end_imageopt | IMAGE | — | |
| interpolation_maskopt | MASK | — | |
| mask_featheropt | FLOAT | 0.100–1 | — |
| mask_invertopt | BOOLEAN | false | — |
| regional_blendingopt | BOOLEAN | true | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |