Load UNet3D ConditionModel
Load the network that actually draws the moving frames
- unet3d
If the Load UNet2D ConditionModel node is the character's memory, this one is the muscle. [AnimateAnyone] Load UNet3D ConditionModel loads the denoising UNet - the 3D network that actually generates the video frames, one denoising step at a time. It's the biggest single component in the pack, the one that eats the most VRAM, and the one you have to load with three files instead of two.
Why it's "3D" and what the motion module does
A normal SD 1.5 UNet is 2D: it processes a single image, spatial attention only. AnimateAnyone needs temporal coherence - frame 12 has to look like it belongs between frames 11 and 13. So this node inflates the 2D UNet into a 3D one by injecting a motion module, the same trick AnimateDiff popularized: temporal transformer blocks that attend along the time axis, teaching the network what "consistent motion" means without retraining the spatial weights.
The config that ships with the pack spells it out: use_motion_module: true, motion_module_type: Vanilla, temporal self-attention at multiple resolutions. This is precisely why an AnimateAnyone video looks like one continuous take rather than a slideshow of pose-still.
Inputs and output
Three path inputs, all with defaults relative to the pack folder:
pretrained_base_unet_folder_path- the diffusers-format SD 1.5unet/folder, same one the 2D loader uses.unet3d_model_path- defaults to./pretrained_weights/denoising_unet.pth(frompatrolli/AnimateAnyone).motion_module_path- defaults to./pretrained_weights/motion_module.pth, same source.
Internally it builds the 3D UNet from the base folder and motion module, then loads denoising_unet.pth with strict=False, meaning it tolerates weight files that don't perfectly match the architecture. The single output is unet3d (type UNET3D), which feeds the Animate Anyone Sampler's denoising_unet input.
Installing it
Same pack install as the rest:
cd ComfyUI/custom_nodes
git clone https://github.com/MrForExample/ComfyUI-AnimateAnyone-Evolved
pip install -r requirements.txt
Then fetch denoising_unet.pth and motion_module.pth from patrolli/AnimateAnyone on Hugging Face and put them in pretrained_weights/, alongside the SD 1.5 UNet folder. Nothing here is auto-downloaded. The README also warns that if you hit diffusers errors, pip install --force-reinstall diffusers>=0.26.1 - the last commit to this pack, from February 2024, was specifically a diffusers-compat fix, so treat that package as the pack's weak spot.
Gotchas
This is where your VRAM budget goes. The sampler's context_frames setting controls how many frames the temporal attention sees at once, and it's what dominates memory here - not your clip length. If you're on a 6-8GB card, that's the knob you'll be pulling: context_frames=12 roughly halves both memory and render time versus 24. And because the motion module is what makes the frames move coherently, a mismatch between motion_module.pth and denoising_unet.pth (say, mixing weights from different sources) shows up as frame-to-frame flicker rather than a load error - keep both files from the same patrolli/AnimateAnyone download.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| pretrained_base_unet_folder_path | STRING | ./pretrained_weights/stable-diffusion-v1-5/unet/ | — |
| unet3d_model_path | STRING | ./pretrained_weights/denoising_unet.pth | — |
| motion_module_path | STRING | ./pretrained_weights/motion_module.pth | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| unet3d | UNET3D | — |