Nodes/ComfyUI-MimicMotionWrapper/MimicMotion Sampler
ComfyUI Node

MimicMotion Sampler

The node that turns a photo and a dance clip into video — a 2024 classic still worth knowing

By kijai·Created 2 years ago·Updated 2 years ago· 524
MimicMotion Sampler
  • mimic_pipeline
  • ref_image
  • pose_images
  • optional_scheduler
  • samples
steps25
cfg_min2.00
cfg_max2.00
seed0
fps15
noise_aug_strength0.00
context_size16
context_overlap6
keep_model_loadedtrue
pose_strength1.00
pose_start_percent0.00
pose_end_percent1.00
image_embed_strength1.00

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 least context_size frames, 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_images batch is shorter than context_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.
CategoryMimicMotionWrapper

Inputs (17)

NameTypeDefaultDescription
mimic_pipelineMIMICPIPE
ref_imageIMAGE
pose_imagesIMAGE
stepsINT251–200
cfg_minFLOAT2.000–20
cfg_maxFLOAT2.000–20
seedINT00–18446744073709550000
fpsINT152–100
noise_aug_strengthFLOAT0.000–10
context_sizeINT161–128
context_overlapINT61–128
keep_model_loadedBOOLEANtrue
optional_scheduleroptDIFFUSERS_SCHEDULER
pose_strengthoptFLOAT1.000–10
pose_start_percentoptFLOAT0.000–1
pose_end_percentoptFLOAT1.000–1
image_embed_strengthoptFLOAT1.000–10

Outputs (1)

NameTypeDescription
samplesLATENT