Nodes/ComfyUI_pose_inter/Pose Interpolation
ComfyUI Node

Pose Interpolation

Tween two poses into a stick-figure animation

By fssorc·Created 2 years ago·Updated about a year ago· 98
Pose Interpolation
  • pose_from
  • pose_to
  • IMAGE
interpolate_frames10
landmarkType

You've got two poses - say a character standing, and the same character crouching - and you want the frames in between so you can animate the transition. Hand-drawing ten skeleton tweens is misery. Pose Interpolation (Pose_Inter) does it for you: give it two skeleton keyframe poses and it emits a batch of interpolated stick figures you can feed straight into an OpenPose ControlNet. That's the whole job, and it does it with zero models and zero downloads.

The output isn't a finished animation. It's a stack of black-background skeleton images (the IMAGE output), which you then route into your ControlNet's pose conditioning so the actual image model renders each frame. It's the classic pose-to-pose setup people use for AnimateDiff-style clips or SVD/ControlNeXt vid2vid work - one redditor describes this exact pack as "finicky yet powerful," splitting sequences into 32-frame segments and even running some in reverse for better consistency.

How it works

This is plain linear interpolation, no AI involved. Each input pose comes in as a POSE_KEYPOINT - that's the dict format from comfyui_controlnet_aux's OpenPose or DWPose preprocessors. The node grabs the first detected person in each, then for every joint does a straight-line lerp between its (x, y) position in pose_from and its position in pose_to, and redraws each in-between frame as a colored skeleton on a black canvas.

Two things worth knowing from the source, because they bite:

  • The output has exactly interpolate_frames images, starting at the pose_from skeleton and heading toward pose_to - but it never draws the final pose. With the default of 10 you get frames 0 through 9/10 of the way there. If you want a true A→B transition, bump the count by one or append the end pose yourself.
  • Only people[0] is used. Two people in frame? You get one of them.

The inputs that matter

Four required inputs, and you'll only fiddle with two.

  • pose_from / pose_to - the POSE_KEYPOINT outputs of your OpenPose or DWPose preprocessor (or the end of a pose-editing chain).
  • interpolate_frames - how many in-between frames to generate. Default 10, min 2, max 100. More frames = smoother but slower ControlNet passes. For a video you generally want more than 10; start around 16–24.
  • landmarkType - pick OpenPose or DWPose to match what produced your keypoints. This is the one that'll wreck you: OpenPose keypoints are in pixel space, DWPose's are normalized. Tell it the wrong format and you get either an invisible 1-pixel skeleton or lines spraying off the canvas.

Install

Two steps, no model files, no extra Python deps (it's pure torch + cv2 + numpy, all already in ComfyUI):

cd ComfyUI/custom_nodes
git clone https://github.com/fssorc/ComfyUI_pose_inter

Then restart ComfyUI - or skip all that and search ComfyUI_pose_inter in ComfyUI Manager. The real prerequisite is comfyui_controlnet_aux, because without its preprocessors there's no node in your graph producing a POSE_KEYPOINT in the first place.

The V2 elephant in the room

Read the pack README and you'll hit a direct warning from the author: don't use the old nodes, use the V2 ones. This node is the old one. Naive per-joint lerping has a tell - limb lengths stretch and shrink mid-tween, so if your two poses are very different, the intermediate skeletons look rubbery. The pack's Pose_Inter_V2 instead interpolates a rigid "HumanDoll" of bone lengths and angles, which stays anatomically sane through big transitions. For simple, similar poses the V1 you're reading about is fine and lighter to understand; for anything dramatic, reach for V2 in the same pack.

Common issues

  • Garbage skeleton - almost always the landmarkType/preprocessor mismatch above. Match them and it fixes itself.
  • "Type mismatch: POSE_KEYPOINT" - comfyui_controlnet_aux isn't installed or its preprocessor isn't in your graph.
  • Missing joints - when a keypoint is absent in one pose (confidence 0), the node just inherits it from the other side rather than guessing. Missing limbs in your source pose means missing limbs in your tweens; use a DWPose preprocessor, which detects bodies more reliably.
  • Janky mid-frames - that's the linear interpolation doing its thing. That's not a bug, that's the V2 use-case.

If your poses barely differ, Pose_Inter is honestly fine. If they're dramatically different, you've been warned.

CategoryPose Interpolation

Inputs (4)

NameTypeDefaultDescription
pose_fromPOSE_KEYPOINT
pose_toPOSE_KEYPOINT
interpolate_framesINT102–100
landmarkTypeCOMBO2 options: OpenPose, DWPose

Outputs (1)

NameTypeDescription
IMAGEIMAGE