EasyAnimateLoader
The one node that turns three model files into a video pipeline
- EasyAnimateModel
EasyAnimateLoader is the entire "get this model into ComfyUI" step compressed into a single node. EasyAnimate - Alibaba PAI's open-source text-to-video model from mid-2024 - isn't a checkpoint you drop in like an SDXL model. It's a whole stack: a PixArt diffusion transformer, a motion module, and a MagViT video VAE. This node assembles all of it, fuses the pieces, and hands you one wire labeled EasyAnimateModel that you plug into EasyAnimateRun. Nothing before it, nothing between. That's the whole job.
A little context, because it matters for expectations. PixArt was the DiT the community loved for prompt adherence before Flux ate everyone's attention - it's in our "forgotten models" hall of fame for a reason. EasyAnimate took that 2D backbone and bolted an AnimateDiff-style motion module onto it to make it animate. The release thread's top comment was "sora-like is a stretch," and that's about right: it's a workable, lightweight video baseline, not a Sora competitor. If you're reaching for this in 2026 you're either excavating video history or you want a small T2V stack that doesn't need a datacenter.
How it works
Under the hood the loader is doing real surgery, and it's worth knowing because it explains every weird print in your console. It takes your PixArt diffusers folder, inflates the 2D transformer into a 3D one via Transformer3DModel.from_pretrained_2d, then loads the motion module's weights into it with strict=False. That's why you'll see lines like missing keys: X, unexpected keys: Y - the motion module and the transformer intentionally don't match key-for-key, and the loader is fine with that. It's not an error; it's Tuesday.
Then it grabs the VAE from the diffusers folder, optionally merges a portrait LoRA at lora_weight, and enables model CPU offload while pinning the transformer to your chosen device. The offload is the difference between this running on an 8GB card and it exploding - the text encoder and VAE sit on CPU, only the transformer actually needs VRAM.
The inputs that matter
- pixart_path - this is a dropdown populated by
os.listdirof yourComfyUI/models/diffusersfolder. If you seeput_diffusers_models_herein the list, that's the placeholder file, not a model. You haven't extracted PixArt yet. - motion_ckpt - the
easyanimate_v1_mm.safetensorsmotion module from your checkpoints folder. This is what actually makes the image model move. - device -
cudaorcpu.cudais the point;cpuis for sanity-checking that everything loads without a GPU attached. - sampler_name - here's the honest gotcha: the dropdown does nothing. The code reads your selection and then immediately overwrites it with
"DPM++". Don't waste time poking it. - Optional
transformer_ckpt,vae_ckpt, andlora_ckptlet you override components with files from your checkpoints/vae folders, pluslora_weight(default 0.55) for the portrait LoRA's strength.
Installing it
Either search "EasyAnimate" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chaojie/ComfyUI-EasyAnimate
then restart ComfyUI. The heavy part isn't the install, it's the downloads:
# Motion module (4.1GB) → ComfyUI/models/checkpoints
# PixArt base (11.4GB) → ComfyUI/models/diffusers, then:
tar -xvf PixArt-XL-2-512x512.tar
Optional extras: a portrait checkpoint (2.3GB) and its LoRA (654MB), both into checkpoints. The pack's requirements.txt pulls in diffusers, transformers, xformers, decord, timm, omegaconf and friends - all normal, but they install into your one shared Python environment, so a version conflict with another pack is the most likely failure on first run.
If something's wrong
Start with the missing-model symptoms: an empty or placeholder-only pixart_path means the tar isn't extracted in models/diffusers. The missing keys spam is normal, but a motion module that fails to find any of its keys usually means you grabbed the wrong safetensors. And when you've loaded it and it still won't run, remember the sampler input is a decoy - the scheduler is DPM++ no matter what you pick, so if your results look off, change steps, not samplers.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| pixart_path | COMBO | PixArt-XL-2-512x512 | 1 options: put_diffusers_models_here |
| motion_ckpt | COMBO | easyanimate_v1_mm.safetensors | 0 options: |
| sampler_name | COMBO | DPM++ | 5 options: Euler, Euler A, DPM++, PNDM, DDIM |
| device | COMBO | cuda | 2 options: cuda, cpu |
| transformer_ckptopt | COMBO | None | 1 options: None |
| lora_ckptopt | COMBO | None | 1 options: None |
| vae_ckptopt | COMBO | None | 1 options: None |
| lora_weightopt | FLOAT | 0.550–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| EasyAnimateModel | EasyAnimateModel | — |