WanVideo MTV Crafter Motion
Inject MTVCrafter motion into your Wan generation
- embeds
- mtv_crafter_motion
- image_embeds
This is the payoff node of the MTVCrafter chain - the one that actually makes your character move. It takes the encoded motion from MTVCrafterEncodePoses and folds it into your Wan image embeds, so when you sample, the generation follows that motion instead of doing whatever Wan felt like. Think of it as the "apply the motion transfer" step.
By the time you reach this node, the interesting work is done: a driving video was detected into poses, those poses were tokenized through the VQ-VAE, and now you have an MTVCRAFTERMOTION object holding the movement. This node bolts it onto the embeds that carry conditioning into the WanVideo sampler. If you've used any of the wrapper's other "Add … Embeds" nodes, the shape is familiar - you pass image embeds in, a signal gets mixed in, modified embeds come out.
The inputs that matter
Everything here is required, and there are exactly two knobs a beginner touches plus the timing pair:
embeds(WANVIDIMAGE_EMBEDS) - your Wan image embeds, built upstream by whatever encode node set up this generation. This is the thing being modified.mtv_crafter_motion(MTVCRAFTERMOTION) - the encoded motion from MTVCrafterEncodePoses. This is the signal being added.strength(FLOAT, default 1.0) - how hard the motion is imposed. 1.0 means follow it fully; lower it if the movement is overpowering the scene or fighting your reference, raise it if the character is ignoring the driving motion. This is your main dial.start_percent(default 0) andend_percent(default 1) - when during sampling the motion is active, as a fraction of the denoising process. 0→1 means the whole way through. Narrowing the window (say 0 to 0.5) lets motion establish early then hands the back half to the model for detail. This start/end-percent pattern shows up all over the wrapper; it's a scheduling gate, not a strength control.
The single output is image_embeds (WANVIDIMAGE_EMBEDS) - feed it into the WanVideo sampler in place of the original embeds.
How to install it
Comes bundled in Kijai's WanVideoWrapper. ComfyUI Manager: Custom Nodes Manager, search ComfyUI-WanVideoWrapper, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-WanVideoWrapper
pip install -r ComfyUI-WanVideoWrapper/requirements.txt
then restart. This node itself adds no download, but the MTVCrafter path in front of it needs the VQ-VAE weights and a pose detector, and behind it you need a working Wan generation. MTVCrafter is one of the more experimental corners of the wrapper, so budget time for wiring rather than expecting a one-click template.
Common issues & troubleshooting
No motion in the output. First suspect is strength at 0, second is a start_percent/end_percent window that's collapsed or backwards. Also confirm the mtv_crafter_motion actually carries movement - if the upstream pose detection came back empty, there's nothing to apply.
Motion transfers but identity drifts. This is the standing tax on all Wan motion-transfer methods; the KB flags face wobble and body morphing as persistent even in polished workflows. Easing strength down a little and keeping the effect off the very end of sampling (lower end_percent) usually helps identity hold.
Type refuses to connect. The embeds input specifically wants WANVIDIMAGE_EMBEDS from the wrapper, not ComfyUI-native conditioning. Mixing the wrapper's types with native Wan nodes is the usual culprit.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| embeds | WANVIDIMAGE_EMBEDS | — | |
| mtv_crafter_motion | MTVCRAFTERMOTION | — | |
| strength | FLOAT | 1.000–100 | Strength of the MTV motion |
| start_percent | FLOAT | 0.000–1 | Start percent to apply the ref |
| end_percent | FLOAT | 1.000–1 | End percent to apply the ref |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_embeds | WANVIDIMAGE_EMBEDS | — |