Nodes/ComfyUI-UniAnimate-W/Animate image with UniAnimate
ComfyUI Node

Animate image with UniAnimate

The 12GB node that makes your photo dance

By Isi-dev·Created 2 years ago·Updated 11 months ago· 187
Animate image with UniAnimate
  • reference_image
  • ref_pose
  • pose_sequence
  • video
  • empty_mask
seed11
steps30
useFirstFramefalse
frame_interval1
max_frames32
resolution_x512

This is the node the whole pack is named for. Animate image with UniAnimate takes a still photo of a person, a DWPose skeleton sequence from some driving video, and runs a diffusion loop that makes the photo move the way the skeleton moves. It's not a video model in the Wan or Sora sense - it's human image animation, the "make my character do this dance" trick - and it needs about 12GB of VRAM to breathe.

Before you go further: "UniAnimate" these days usually means UniAnimate-DiT, the Wan2.1-based rewrite that Alibaba shipped in 2025. This pack is the older, SD 1.5-based UniAnimate (the original unianimate.github.io project). Same family, different model, different results. If you came here expecting DiT quality, recalibrate - this is the compact, old-school version, and it's still worth a spin for character consistency.

How it works

Mechanically it's a conditioned DDIM diffusion pass. The node needs three ingredients, all of which come from the Align & Generate poses for UniAnimate node (Gen_align_pose):

  • reference_image - your photo of the person
  • ref_pose - the single pose extracted from that photo
  • pose_sequence - the per-frame DWPose batch from the driving video

The model then uses an OpenCLIP embedder for identity/texture, the SD 2.1 VAE (v2-1_512-ema-pruned.ckpt), and a temporal UNet (unianimate_16f_32f_non_ema_223000.pth) to generate frames that keep your person's face and clothes while tracking the skeleton. The pose conditions carry the motion; the reference image carries the identity.

The inputs that matter

Most settings can be ignored, but three deserve your attention:

  • max_frames (default 32) - your VRAM lever. The README says the node eats ~12GB at 32 frames; drop to 24, 16, or 8 to fit smaller cards. Nothing else changes, you just get less video.
  • frame_interval (default 1) - frames to skip in the driving sequence. 2 = every other frame, which trades smoothness for length and speed.
  • useFirstFrame (default false) - flips the reference to the first frame of the pose sequence. The author's trick: generate 32 frames, feed the last frame back in with this on, and chain animations into longer videos.

seed, steps (10–50, default 30), and resolution_x (512 or 768 - the height is set for you) are self-explanatory. At [512, 768] and 32 frames expect roughly seven minutes per generation.

Outputs

  • video - the generated frames as an IMAGE batch. Pipe it to a video save/preview node.
  • empty_mask - a zero-filled mask matching the output resolution, one per frame. It's a template; if you composite the video onto a background or pass it to a mask-aware tool, this is the placeholder.

Install and gotchas

Manager: search "UniAnimate Nodes for ComfyUI". Or git clone https://github.com/Isi-dev/ComfyUI-UniAnimate-W into custom_nodes/, then restart. You then need the ~14GB of checkpoints in checkpoints/ - python modeldownloader.py pulls them via ModelScope, or grab them manually from the pack's HuggingFace mirror. This node runs on the UniAnimate checkpoint, the SD 2.1 VAE, the OpenCLIP bin, and the two DWPose ONNX files.

Three things burn people: low VRAM (cut max_frames), a pose Gen_align_pose couldn't produce (the cannot convert float infinity to integer error is upstream of this node - check your driving video), and the silent assumption that the reference photo and the driving person face the same direction. The model animates the person; it won't re-aim their gaze for free.

Categoryimage

Inputs (9)

NameTypeDefaultDescription
seedINT110–16384
stepsINT3010–50
useFirstFrameBOOLEANfalse
reference_imageIMAGE
ref_poseIMAGE
pose_sequenceIMAGE
frame_intervalINT11–8
max_framesINT321–1024
resolution_xINT512512–768

Outputs (2)

NameTypeDescription
videoIMAGE
empty_maskMASK