ChampLoader
One node, ten model paths, all the heavy lifting
- champ
- cfg
- vae
- image_enc
- noise_scheduler
CHAMP is the Fudan group's human image animation model: one photo of a person in, a video of that person moving out, driven by a sequence of depth, pose, normal, and semantic maps. It landed in March 2024 to a genuinely excited community, and then reality set in - research code, absolute paths, a pile of checkpoints. ChampLoader is the community fix for that. It's one node that assembles the entire stack - base model, VAE, image encoder, motion module, and four guidance encoders - so the rest of your workflow only ever sees a handful of outputs.
Don't use this node for quick experiments. Loading it means pulling in a full SD1.5 diffusers model, a second UNet, an AnimateDiff-style temporal motion module, and a CLIP vision encoder, all at once. That's a solid minute-plus of "loading, loading, loading" before anything happens, and it holds several GB of VRAM just sitting there. That's the job, though. Every CHAMP workflow in this pack starts here, and there's no shortcut around it.
How it works
Under the hood the node reads the pack's configs/inference.yaml, overwrites the model paths with the ones you typed, and builds everything: a DDIMScheduler (configured for zero-SNR v-prediction), the CLIP image encoder, an SD1.5 VAE, and the denoising UNet - an SD1.5 UNet inflated with a Vanilla motion module, the same temporal-attention trick that powered AnimateDiff. It then loads a second, frozen "reference" UNet and the four guidance encoders (depth, DWPose, normal, semantic map). The ReferenceAttentionControl that ties the reference image's appearance into the denoising UNet is wired up here too - that's what keeps the person looking like the person.
The inputs that matter
Ten string paths and one dropdown. The paths are absolute - there's no model scanning, no models/ folder convention. You point each one at a real file or folder:
sd_path,vae_path,image_encoder_path- the diffusers-format folders for SD1.5,sd-vae-ft-mse, and the SD image-variations CLIP encoder.motion_module_path,denoising_unet_path,reference_unet_path- the.pthcheckpoints.depth_path,dwpose_path,normal_path,semantic_map_path- the four guidance encoder weights.
Defaults are /home/admin/... paths that exist on nobody's machine, so you're retyping all ten no matter what. weight_dtype is fp16 (default) or fp32. Keep fp16 unless you're chasing a precision bug.
Outputs
Five: champ, cfg, vae, image_enc, noise_scheduler. Every one of them plugs into ChampRun, the pack's generation node - don't skip any, they're all required there.
How to install it
Open ComfyUI Manager → Install Custom Nodes and search "Champ"; this is a low-profile 2024 pack, so if it doesn't surface, clone it directly:
cd ComfyUI/custom_nodes
git clone https://github.com/chaojie/ComfyUI-Champ
Restart ComfyUI. The real work is the model downloads from the README: SD1.5, sd-vae-ft-mse, and the image encoder from HuggingFace, then the CHAMP checkpoints from a Google Drive folder - several gigabytes total. The pack also pins transformers==4.30.2 and requires xformers, which ComfyUI installs don't all ship with.
Where people get burned
Three classic failure points. First, the pack hard-requires CUDA - every model gets .to("cuda"), there is no CPU fallback. Second, if xformers isn't installed the loader dies with a loud "xformers is not available" error even though ComfyUI itself runs fine - install it in your ComfyUI Python environment. Third, VRAM: commenters on the original CHAMP release thread reported ~20–23 GB used at default settings. If you OOM on load, you're not squeezing this into a 12 GB card at full settings; drop the resolution and frame count in ChampRun, not here.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| sd_path | STRING | /home/admin/ComfyUI/models/diffusers/stable-diffusion-v1-5 | — |
| vae_path | STRING | /home/admin/ComfyUI/models/diffusers/sd-vae-ft-mse | — |
| image_encoder_path | STRING | /home/admin/ComfyUI/models/diffusers/sd-image-variations-diffusers/image_encoder | — |
| motion_module_path | STRING | /home/admin/ComfyUI/models/champ/motion_module.pth | — |
| denoising_unet_path | STRING | /home/admin/ComfyUI/models/champ/denoising_unet.pth | — |
| reference_unet_path | STRING | /home/admin/ComfyUI/models/champ/reference_unet.pth | — |
| depth_path | STRING | /home/admin/ComfyUI/models/champ/guidance_encoder_depth.pth | — |
| dwpose_path | STRING | /home/admin/ComfyUI/models/champ/guidance_encoder_dwpose.pth | — |
| normal_path | STRING | /home/admin/ComfyUI/models/champ/guidance_encoder_normal.pth | — |
| semantic_map_path | STRING | /home/admin/ComfyUI/models/champ/guidance_encoder_semantic_map.pth | — |
| weight_dtype | COMBO | fp16 | 2 options: fp16, fp32 |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| champ | Champ | — |
| cfg | cfg | — |
| vae | vae | — |
| image_enc | image_enc | — |
| noise_scheduler | noise_scheduler | — |