WanVideo ImageToVideo Encode
The I2V starting point, and how to add an end frame
- vae
- clip_embeds
- start_image
- end_image
- control_embeds
- temporal_mask
- extra_latents
- add_cond_latents
- empty_frame_pad_image
- image_embeds
Image-to-video is the workflow most people actually want from Wan, and this is the node that sets it up. You give it a starting image (and optionally an ending image), a resolution, and a frame count, and it produces the WANVIDIMAGE_EMBEDS that the sampler denoises into a moving clip. Anchoring the first frame to a real image is why I2V is the community default - it sidesteps most of the consistency problems that plague pure text-to-video.
How it works
The node encodes your start image into the latent space Wan generates in, and builds the image-conditioning embeds that tell the sampler "begin here and animate forward." Feed it an end image too and you get first-frame/last-frame (FLF) control - the model interpolates a plausible motion path from your start to your target. Under the hood it uses the Wan VAE to encode the image latents and packages everything the sampler needs.
The inputs that matter
start_image(optional but the whole point) - your first frame. A strong, clean still here does more for output quality than any parameter on the node.end_image(optional) - the target last frame for FLF. Leave it empty for open-ended forward animation; wire it in when you want the clip to arrive at a specific pose or composition.width/height- output resolution. 832×480 (the default) and 1280×720 are the standard Wan sizes. Higher costs a lot more memory and time.num_frames- clip length in frames, stepping by 4 (the VAE's temporal stride). 81 is the native default - roughly 5 seconds at 16fps. Go much past 81 and Wan starts to loop or wobble without extra help.vae- theWANVAE, required to encode the image.noise_aug_strength/start_latent_strength/end_latent_strength- fine controls over how strongly the start/end latents constrain the generation. Defaults are fine to start; easestart_latent_strengthdown slightly if the first frame feels "stuck" and the motion is too timid.
Output is a WANVIDIMAGE_EMBEDS that plugs into the sampler's image_embeds input.
How to install it
Ships with the pack. Via ComfyUI Manager: search WanVideo Wrapper, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-WanVideoWrapper
pip install -r ComfyUI-WanVideoWrapper/requirements.txt
then restart. You'll need the Wan VAE in models/vae for the vae input.
Common issues & troubleshooting
The subject barely moves. Two usual causes: the motion prompt is over-describing the static image (describe only the action), or the latent strengths are pinning the start frame too hard. Also check you're not fighting a speed LoRA that's flattening motion.
FLF produces a weird morph between start and end. The bigger the gap between your start and end images, the more the model has to invent, and invention is where it gets strange. Keep the two frames related - same subject, same framing - and the interpolation stays clean.
Longer than 81 frames looks bad. This node will happily accept a big num_frames, but the model's native context is 81. For genuinely long clips, use context options or a dedicated extension path rather than just cranking the number here.
Frame count comes back short by a couple frames. That's the VAE's 4x temporal compression (the 4n+1 quirk). Use frame counts on the 4n+1 grid (77, 81, …) to get exactly what you asked for.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 83264–8096 | Width of the image to encode |
| height | INT | 48064–8096 | Height of the image to encode |
| num_frames | INT | 811–10000 | Number of frames to encode |
| noise_aug_strength | FLOAT | 0.0000–10 | Strength of noise augmentation, helpful for I2V where some noise can add motion and give sharper results |
| start_latent_strength | FLOAT | 1.0000–10 | Additional latent multiplier, helpful for I2V where lower values allow for more motion |
| end_latent_strength | FLOAT | 1.0000–10 | Additional latent multiplier, helpful for I2V where lower values allow for more motion |
| force_offload | BOOLEAN | true | — |
| vaeopt | WANVAE | — | |
| clip_embedsopt | WANVIDIMAGE_CLIPEMBEDS | Clip vision encoded image | |
| start_imageopt | IMAGE | Image to encode | |
| end_imageopt | IMAGE | end frame | |
| control_embedsopt | WANVIDIMAGE_EMBEDS | Control signal for the Fun -model | |
| fun_or_fl2v_modelopt | BOOLEAN | true | Enable when using official FLF2V or Fun model |
| temporal_maskopt | MASK | mask | |
| extra_latentsopt | LATENT | Extra latents to add to the input front, used for Skyreels A2 reference images | |
| tiled_vaeopt | BOOLEAN | false | Use tiled VAE encoding for reduced memory use |
| add_cond_latentsopt | ADD_COND_LATENTS | Additional cond latents WIP | |
| augment_empty_framesopt | FLOAT | 0.000–10 | EXPERIMENTAL: Augment empty frames with the difference to the start image to force more motion |
| empty_frame_pad_imageopt | IMAGE | Use this image to pad empty frames instead of gray, used with SVI-shot and SVI 2.0 LoRAs |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_embeds | WANVIDIMAGE_EMBEDS | — |