Nodes/ComfyUI-AnimateAnyone-Evolved/Load UNet3D ConditionModel
ComfyUI Node

Load UNet3D ConditionModel

Load the network that actually draws the moving frames

By MrForExample·Created 3 years ago·Updated 2 years ago· 563
Load UNet3D ConditionModel
    • unet3d
    pretrained_base_unet_folder_path./pretrained_weights/stable-diffusion-v1-5/unet/
    unet3d_model_path./pretrained_weights/denoising_unet.pth
    motion_module_path./pretrained_weights/motion_module.pth

    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.5 unet/ folder, same one the 2D loader uses.
    • unet3d_model_path - defaults to ./pretrained_weights/denoising_unet.pth (from patrolli/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.

    CategoryAnimateAnyone-Evolved/loaders

    Inputs (3)

    NameTypeDefaultDescription
    pretrained_base_unet_folder_pathSTRING./pretrained_weights/stable-diffusion-v1-5/unet/
    unet3d_model_pathSTRING./pretrained_weights/denoising_unet.pth
    motion_module_pathSTRING./pretrained_weights/motion_module.pth

    Outputs (1)

    NameTypeDescription
    unet3dUNET3D