Wan22 Painter FLF2V (Tiled VAE Encode)
First-last frame with real movement, on the VRAM budget you actually have
- positive
- negative
- vae
- clip_vision_start_image
- clip_vision_end_image
- start_image
- end_image
- positive
- negative
- latent
First-last frame (FLF) video is the classic way to make a loop or a short transformation: give Wan a start image and an end image, and it bridges them. The stock nodes do it, but the in-between often reads as a lazy morph - the kind where things slide instead of move. Painter FLF2V fixes that with an "inverse structural repulsion" pass that actively boosts the difference between your two frames. This version wraps that whole pipeline in a tiled VAE encode, so the fix doesn't cost you a VRAM disaster.
What it actually does
Like the rest of the Painter family, this is princepainter's node logic with the encodes switched to encode_tiled(). It builds a gray baseline, stamps your start_image and end_image into the front and back, and encodes it. Then comes the interesting part: it also computes a linear interpolation between the start and end latents, subtracts that from the official baseline, and separates the result into low-frequency (color) and high-frequency (structure) components.
The tooltip says it best: motion_amplitude runs 1.0 = official version to 2.0 = extreme speed (eliminates slow motion). At 1.0 you get stock FLF behavior. Above that, it scales the high-frequency difference - the actual structure that changes between your frames - and adds it back, with a boost that maps 1.0–2.0 onto up to 4× internal strength. Low-frequency color is deliberately left alone, which is why cranking the knob doesn't melt your palette into mush. If your start and end are close in appearance, nothing much gets boosted; if they're genuinely different shots, you get real movement instead of a crossfade.
Inputs and outputs
Required: positive / negative conditioning, vae, width / height / length / batch_size, motion_amplitude (default 1.15), and the tiling group (tile_size 512, overlap 64, temporal_size 64, temporal_overlap 8). Optional: start_image, end_image, and clip_vision_start_image / clip_vision_end_image outputs, which get merged into a single CLIP Vision set.
Outputs: positive, negative, latent - wire them to your KSampler as you would the original Painter FLF2V node.
Installing it
ComfyUI Manager → search Fossiel or WAN-Additional-Tilers, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Fossiel/ComfyUI-Fossiel-WAN-Additional-Tilers
Restart ComfyUI. No Python dependencies beyond ComfyUI, no bundled models - your own Wan 2.2 checkpoint, CLIP, and VAE.
Gotchas
The boost only engages when both start_image and end_image are connected and length is above a couple of frames - wire both, or the knob does nothing and you're just running stock FLF. Past 1.5 or so, watch for over-sharpened structure and the occasional flicker between frames; back off in 0.05 steps. And the standing pack rule: keep ComfyUI current, because temporal tiling needs a recent build.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 811–16384 | — |
| batch_size | INT | 11–4096 | — |
| motion_amplitude | FLOAT | 1.151–2 | 1.0=official version, 2.0=extreme speed (eliminates slow motion) |
| tile_size | INT | 51264–4096 | — |
| overlap | INT | 640–4096 | — |
| temporal_size | INT | 648–4096 | Amount of frames to encode at a time. |
| temporal_overlap | INT | 84–4096 | Amount of frames to overlap. |
| clip_vision_start_imageopt | CLIP_VISION_OUTPUT | — | |
| clip_vision_end_imageopt | CLIP_VISION_OUTPUT | — | |
| start_imageopt | IMAGE | — | |
| end_imageopt | IMAGE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |