Nodes/ComfyUI-WanVideoWrapper/WanVideo Add TTMLatents
ComfyUI Node Runs on cloud

WanVideo Add TTMLatents

Time-to-Move motion control, drag-an-object animation for Wan

By kijai·Created about a year ago·Updated 3 months ago· 6,654
WanVideo Add TTMLatents
  • embeds
  • reference_latents
  • mask
  • image_embeds
start_step0
end_step1

This node wires Time-to-Move (TTM) into a Wan generation. TTM is a training-free motion-control trick that blew up late 2025 - the idea is you manually move things to describe the motion you want. Shift an object across the frame, or drag a cutout, roughly block out the movement, and TTM uses that as a soft guide so the model animates real, controlled motion instead of whatever it feels like. One of the viral demos (from mickmumpitz's workflow) animated a scene just by shifting objects and images around by hand, and it looked uncannily natural.

The node itself takes your running image_embeds, folds in a reference-latent guide plus a mask over a chosen step window, and returns the embeds with the TTM control added. It's another link in the wrapper's embeds chain: WANVIDIMAGE_EMBEDS in, WANVIDIMAGE_EMBEDS out.

How it works

Here's the clever, cheap part - TTM is "training-free," meaning nobody trained a control model. You provide a reference_latents: an encoded version of your crude, hand-moved motion (the object shifted to where it should end up, or a rough animated block-out). You provide a mask for the region that should follow it. Then you tell it when in the denoising process to apply the guide via start_step / end_step. Early in denoising the model locks onto your coarse motion layout; released later, it fills in believable detail. The result is motion that goes where you pushed it, rendered convincingly by Wan.

That step window is the whole art of it. Guide too long and the output looks like your crude block-out. Guide too briefly and the motion drifts back to whatever the model prefers.

The inputs and outputs that matter

  • embeds (WANVIDIMAGE_EMBEDS) - the running embeds from earlier in the chain.
  • reference_latents (LATENT) - your hand-authored motion guide, VAE-encoded. This is the motion you're asking for.
  • mask (MASK) - which region follows the guide. Everything outside is free.
  • start_step (default 0) / end_step (default 1) - the denoising-step window where the guide is active. This is the dial you'll actually tune. A short early window (guide the first few steps, then let go) is the usual sweet spot; extend end_step if the motion isn't sticking, shorten it if the output looks stiff and pasted.

Output: image_embeds (WANVIDIMAGE_EMBEDS) → the next Add node or the sampler.

How to install it

ComfyUI Manager → search ComfyUI-WanVideoWrapper, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-WanVideoWrapper
pip install -r ComfyUI-WanVideoWrapper/requirements.txt

then restart. The nice thing about TTM being training-free: there's no separate control model to download. You just need your usual Wan model, VAE and text encoder. The work is upstream - you need a way to build the reference_latents, i.e. to actually move your objects/images and encode the result.

Common issues & troubleshooting

The output just looks like my crude block-out. You're guiding too far into the schedule. Pull end_step in so the model gets the back half of denoising to render properly. TTM should inform the motion, not freeze the frame.

The motion ignores what I moved. Opposite problem - extend the guide window (end_step), or check that your mask actually covers the object and that reference_latents encodes a clear enough displacement. A tiny nudge gives a tiny result.

Region bleeds. The mask is loose. Tighten it to the object that should move; the unmasked area is meant to stay put.

Node missing after install. TTM is recent; update WanVideoWrapper and restart if the class isn't there.

CategoryWanVideoWrapper

Inputs (5)

NameTypeDefaultDescription
embedsWANVIDIMAGE_EMBEDS
reference_latentsLATENTLatents used as reference for TTM
maskMASKMask used for TTM
start_stepINT0-1–1000Start step for whole denoising process
end_stepINT11–1000The step to stop applying TTM

Outputs (1)

NameTypeDescription
image_embedsWANVIDIMAGE_EMBEDS