Pose Guider Encode
Turn skeleton frames into something the model can follow
- pose_guider
- pose_images
- pose_latent
The Pose Guider Encode node is where your raw pose video stops being a video and becomes a POSE_LATENT - the per-frame conditioning that tells the AnimateAnyone sampler where the character's joints should be in every frame. It's the bridge between "I have OpenPose skeletons" and "my character is dancing." If you're missing this node in the graph, the sampler has nothing to move your character toward, which is why it's the piece that gets hand-wired into every workflow built from this pack.
What it does mechanically
Feed it two things: a pose_guider (the loaded pose-guider network from the Load Pose Guider node) and pose_images, an IMAGE tensor where every image in the batch is one pose-skeleton frame. The node then:
- Resizes each frame to 768x512 - the resolution the whole model was trained at, straight from the pack's config.
- Stacks them into a
(batch, channels, frames, h, w)tensor. - Runs them through the pose guider's small convolutional encoder, producing a
pose_latentof shape roughly(1, 320, frames, 96, 64).
That latent is what the sampler's denoising UNet reads to keep the character's body on the skeleton. Think of the pose guider as a featherweight ControlNet - spatial structure in, conditioning features out - but trained end-to-end with the rest of the pipeline, which is why AnimateAnyone follows poses so much more faithfully than an OpenPose ControlNet bolted onto a plain image model.
The output and where it goes
The single output is pose_latent (type POSE_LATENT), and it feeds exactly one place: the Animate Anyone Sampler's pose_latent input. The chain is Load Pose Guider → Pose Guider Encode → Sampler, and you can't skip a link - the encoder needs the loaded guider network to do its job.
Where the pose images come from
The pack's example workflow loads anyone-video-2_kps.mp4 - a video that's already keypoint-drawn - straight through a video-loader node. For your own footage you need to extract the skeletons first: load a video with the VHS pack's LoadVideo, run each frame through an OpenPose or DWPose preprocessor, and feed the resulting image batch here. The r/comfyui thread where the author announced this pack has a few people asking exactly this, and the standard answer is that workflow: VHS LoadVideo → per-frame OpenPose → batch of skeleton images. Keep your poses at 768x512 or let this node's resize handle it - it does, silently, but you'll get sharper conditioning if your source is already close.
Installing it
It's part of the ComfyUI-AnimateAnyone-Evolved pack:
cd ComfyUI/custom_nodes
git clone https://github.com/MrForExample/ComfyUI-AnimateAnyone-Evolved
pip install -r requirements.txt
ComfyUI Manager can install the pack too (search "AnimateAnyone Evolved"), but the pose_guider.pth weight file it needs comes from patrolli/AnimateAnyone on Hugging Face and has to be placed manually at pretrained_weights/pose_guider.pth. Missing that file is the classic way this node fails - you'll get a load error in the console, not a red node, because the failure happens inside the loader feeding it.
Gotchas
Two real ones. First, resolution matters more than people expect: the whole pipeline is trained at 768x512, so feeding it 512x512 poses degrades the conditioning even though nothing crashes. Second, this is 2024-era code - on a current ComfyUI install the pack's dependencies can fail to import, and the README's fix (pip install --force-reinstall diffusers>=0.26.1) is worth having loaded before you debug anything else. Once it's running, the pose encoder is the boring, reliable part of the graph - which is exactly what you want, since the sampler behind it will be taking its sweet time.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| pose_guider | POSE_GUIDER | — | |
| pose_images | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pose_latent | POSE_LATENT | — |