Nodes/ComfyUI_DWposeDeluxe/DWposeDeluxe Pose Interpolation
ComfyUI Node

DWposeDeluxe Pose Interpolation

Smooth motion between two poses, without a video model

By hobinrude·Created 9 months ago·Updated 8 months ago· 11
DWposeDeluxe Pose Interpolation
  • keypoints_1
  • keypoints_2
  • keypoints
keypoints_1_frame0
keypoints_2_frame-1
frame_count1

Say you've got two poses - a starting stance and an ending stance - and you want the frames in between so you can drive a video with a continuous motion. You could hand-draw every intermediate pose, or you could let this node lerp the keypoints and generate the whole transition for you. That's the entire pitch, and it's genuinely useful for making pose-driven videos without a diffusion model doing the heavy lifting.

How it works

This is plain linear interpolation on keypoint coordinates, and that's a feature. You give it two POSE_KEYPOINT datasets and two frame selectors:

  • keypoints_1 with keypoints_1_frame - which frame of the first dataset is your starting pose.
  • keypoints_2 with keypoints_2_frame - which frame of the second dataset is your ending pose.
  • frame_count - how many interpolated frames to generate (up to 99).

Set a frame number to -1 and it grabs the last frame of that batch automatically, which is the standard trick for "start at frame 0, end at the last frame."

For each output frame it computes a blend t from 0 to 1 and mixes the start and end keypoints: point = start * (1 - t) + end * t. It does this across all four keypoint subsets (body, face, left hand, right hand) so the whole body transitions smoothly, not just the torso. If both inputs have a face_box, that gets interpolated too.

A few behaviors worth knowing. If a frame contains multiple people, it picks the biggest pose and warns about it - it won't interpolate everyone. If the two canvases have different dimensions, it uses the largest and warns. And if a subset (say, left hand) exists in one pose but not the other, that subset is skipped rather than guessed. The output lands in the first input's coordinate format, so keep both datasets in the same format to avoid weird results.

When you'd reach for it

The author pitches two classic uses: matching a pose to the first frame of a SteadyDancer reference, and creating looped pose-driven videos. For a loop, interpolate from pose A to pose B, then interpolate back from B to A (or just ReverseKeypoints the first half), and you get a seamless cycle.

Pair it with KeypointPrinter to preview what you've generated, then feed the output into your video pipeline. Since the output is standard POSE_KEYPOINT data, everything downstream in the pack just works.

One honest caveat

Linear interpolation between two poses is the simple interpolation. If your two poses are dramatically different (a crouch to a jump), the middle frames will look mechanical - limbs sweep through straight-line paths, and feet can slide through the floor. It's great for subtle transitions and loops, not for physically accurate motion between wildly different stances. The README points to fancier interpolation packs (ComfyUI_pose_inter) if you need per-limb control. For most video-driver work, though, this is exactly the right amount of sophistication.

Installing it

Ships with DWposeDeluxe, so same story as the rest:

cd ComfyUI/custom_nodes/
git clone https://github.com/hobinrude/ComfyUI_DWposeDeluxe
cd ComfyUI_DWposeDeluxe
pip install -r requirements.txt

or search DWposeDeluxe in ComfyUI Manager. No models needed for this node - it only manipulates numbers. If it quietly stops mid-run, remember the pack suppresses errors with InterruptProcessingException; the real reason will be in the console.

CategoryDWposeDeluxe

Inputs (5)

NameTypeDefaultDescription
keypoints_1POSE_KEYPOINT
keypoints_2POSE_KEYPOINT
keypoints_1_frameINT0
keypoints_2_frameINT-1
frame_countINT11–99

Outputs (1)

NameTypeDescription
keypointsPOSE_KEYPOINT