MimicMotion Sampler
The node that turns a photo and a dance clip into video — a 2024 classic still worth knowing
- mimic_pipeline
- ref_image
- pose_images
- optional_scheduler
- samples
This is the heart of the old "make this character dance" workflow. MimicMotion Sampler is the node that takes a reference photo of a person plus a stack of pose skeletons and actually samples the video - it's Kijai's ComfyUI port of Tencent's MimicMotion, a pose-controlled image-to-video model from June 2024 built on top of Stable Video Diffusion 1.1.
Let me set expectations before you sink an afternoon into this. MimicMotion is a 2024-era method, and by 2026 the job it does is done better by Wan with VACE, LTX-2 IC-LoRAs, and the edit-model family. Nobody is breaking new ground with it. But it still runs fully offline, it's the cleanest possible illustration of how pose-driven I2V used to be built, and if you found an old workflow (or want that specific dancing-character look) it genuinely works. Just know what you're reaching for.
How it works
The underlying pipeline is SVD 1.1 - Stable Video Diffusion - with a PoseNet module grafted onto the UNet that injects the pose conditioning, so the video follows the driving skeletons while the reference image carries the identity. Kijai's real contribution here is the sliding window: instead of denoising all frames in one go (which OOMs instantly), the sampler generates the clip in overlapping chunks of context_size frames with context_overlap frames of overlap, stitching them into one long take. That's how people got 200+ frame clips out of a model that nominally thinks in tens of frames.
The inputs that matter
ref_image- the still you want animated. It does not have to match the driving video's pose; the pose rescaling in MimicMotion GetPoses handles that.pose_images- the batch of skeleton frames, normally straight from MimicMotion GetPoses. It must contain at leastcontext_sizeframes, or the node asserts on you.context_size/context_overlap- the sliding window. The 16/6 defaults are fine for the 1.0 model. If you're on the 1.1 model, the node itself warns you: use 72. That warning exists because 1.1 was tuned for long contexts.steps,seed,fps- the usual. SVD's default settings are around 25 steps; the model was trained near 7fps, but 15 (the default) is what most workflows use.cfg_min/cfg_max- SVD ramps guidance across the run, so these define the low and high ends of that ramp rather than a single value.keep_model_loaded- leave it true if you're iterating; it's what stops the model from being evicted to CPU between runs.
Then the optional bank: optional_scheduler takes the pack's Diffusers Scheduler node - wire in the AnimateLCM_SVD option and you can drop from ~25 steps to single digits. pose_strength dials how hard the pose pushes, and pose_start_percent/pose_end_percent set when in the denoise it's active; ending it early frees the last steps for detail, the same trick as ControlNet start/end. image_embed_strength scales the reference-image conditioning.
Output
One LATENT output called samples. It feeds straight into MimicMotion Decode, which turns it into frames you can save.
Install
Standard for a Kijai pack. Easiest via ComfyUI Manager - search "ComfyUI-MimicMotionWrapper" in the Custom Nodes list and install. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-MimicMotionWrapper
cd ComfyUI-MimicMotionWrapper
pip install -r requirements.txt
The requirements are light - diffusers, transformers, accelerate - but the models are not. First run downloads the ~3GB pruned MimicMotion UNet and the ~4GB SVD XT fp16 diffusers package automatically. The pack's own README marks it "WORK IN PROGRESS" and the last commit was January 2025, so don't expect updates.
Common issues
- "The number of poses must be greater than the context size." Your
pose_imagesbatch is shorter thancontext_size. Shrink the window or feed more frames. - Mushy faces. This is MimicMotion's most famous weakness. Community consensus was to fix it in post - a face pass (ReActor/ADetailer) or a second AnimateDiff pass to recover detail. Don't fight the sampler over it.
- VRAM. SVD 1.1 plus the 3GB UNet plus a VAE is a chunky load. Shorten the context window before touching precision.
- Long videos are slow. People commonly ran every 4th frame of the driving video and let the pose node interpolate; 15fps with frame-skipping was the norm, not a sacrifice.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| mimic_pipeline | MIMICPIPE | — | |
| ref_image | IMAGE | — | |
| pose_images | IMAGE | — | |
| steps | INT | 251–200 | — |
| cfg_min | FLOAT | 2.000–20 | — |
| cfg_max | FLOAT | 2.000–20 | — |
| seed | INT | 00–18446744073709550000 | — |
| fps | INT | 152–100 | — |
| noise_aug_strength | FLOAT | 0.000–10 | — |
| context_size | INT | 161–128 | — |
| context_overlap | INT | 61–128 | — |
| keep_model_loaded | BOOLEAN | true | — |
| optional_scheduleropt | DIFFUSERS_SCHEDULER | — | |
| pose_strengthopt | FLOAT | 1.000–10 | — |
| pose_start_percentopt | FLOAT | 0.000–1 | — |
| pose_end_percentopt | FLOAT | 1.000–1 | — |
| image_embed_strengthopt | FLOAT | 1.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| samples | LATENT | — |