Get Head Pose
Get Head Pose — measure how the head turns, and fix the crop while you're at it
- face_toolkits
- images
- landmarks
- head_pose
GetHeadPose is the second half of HelloMeme's driving-signal extraction, and the sibling of GetExpression. Where GetExpression captures what the face is doing (blinks, mouth, brows), this node captures where the head is pointing: its 3D rotation and translation, estimated from the landmarks you already computed. The pipeline nodes consume both halves - a HEAD_POSE from the reference image and one from the driving video - so every HelloMeme graph runs this node at least twice.
The quiet second job is more interesting. With crop on (the default), the node re-crops the input frames to 512px around the face, using the landmarks to frame it the way the pack's training data was framed. The pack's README is blunt about why that matters: face proportion in the reference image significantly affects generation quality, to the point that the author shipped a dedicated CropReferenceImage node. This node builds that recommended crop into the pose pipeline itself.
How it works
It takes the images and their landmarks, solves for the head's rotation and translation per frame via the face toolkits, and returns a HEAD_POSE dict carrying the rotation, translation, the (optionally re-cropped) frames, and the landmarks. The pipeline later turns that rotation/translation into the control heatmaps that condition the diffusion model, and uses the first frame of the pose output as the img2img init image - which is why the crop matters so much: the reference image the model actually starts from is the one this node hands over.
The inputs that matter
face_toolkits- fromHMFaceToolkitsLoader.images- reference image or driving video.landmarks-FACELANDMARKS222fromGetFaceLandmarks, same frames.crop(defaulttrue) - whether to re-crop frames to the 512px face-centered framing. Leave it on; the README's face-proportion guidance is essentially a plea to keep it on. Turn it off only if you've already cropped identically yourself.
Output: head_pose (HEAD_POSE), wired into ref_head_pose on a run over the reference image and drive_head_pose on a run over the drive.
Installing it
Part of the HelloMeme pack - ComfyUI Manager keyword hellomeme-api, or:
cd ComfyUI/custom_nodes
git clone https://github.com/HelloVision/ComfyUI_HelloMeme
# restart ComfyUI
The pose/alignment models download with the face toolkits on the loader's first run; nothing extra to fetch here.
Common issues
- Reference output looks off-center or zoomed wrong. That's the crop doing its job. If the reference face is small in the frame, the re-crop magnifies it - which is exactly what you want, but it's a visual surprise the first time.
- Same-frame discipline.
imagesandlandmarksmust come from the same frames, or the pose estimate is garbage. Cross-wired inputs are the usual beginner mistake. - Wobbly reference in the output. If the "still" reference drifts or the pose reads jittery, the upstream landmarks were probably noisy - a small or profile face. A clean front-on reference fixes it before any downstream tuning does.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| face_toolkits | FACE_TOOLKITS | — | |
| images | IMAGE | — | |
| landmarks | FACELANDMARKS222 | — | |
| crop | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| head_pose | HEAD_POSE | — |