Warp To Pose + Skeleton Blend
The Node the README Tells You Not to Turn On
- image
- source_pose
- target_pose
- guided
- skeleton
- image_clean
- aligned_target_pose
Here's the counterintuitive thing about CP_WarpToPose: its headline feature - geometrically warping your sprite's pixels into a new pose - is the thing the pack's own README warns you away from. The author's framing is blunt: geometric warp "melts cartoon sprites" and "cannot invent limbs or camera angles; it only remaps pixels." So the default configuration is method=none with a skeleton blended over the untouched sprite. The node's real job is alignment plus soft pose guidance, and it does that very well.
How it works
It takes your sprite and two poses (source, target), scales the target to match your image, and - if align_to_source is on (default) - uniformly scales and translates the target pose so the character's size matches your sprite's. Then it decides what to do:
- method = none (default) - pixels stay put. It draws the target skeleton and blends it over the sprite at
skeleton_blend(0.70). The sprite is untouched; the sticks are a pose hint. This is the recommended path, feeding the guided image intoCP_CharacterRepair. - method = piecewise_affine - a Delaunay triangulation of the body warps each local triangle toward the target. Local, and the pack's preferred geometric option.
- method = tps - global thin-plate spline. The source comments name the failure mode: on side-view skeletons the near-collinear keypoints make it unstable, and it "melts sprites into multi-head smears." TPS is legacy; the README says keep
method=none.
warp_strength (default 0) is the throttle on the geometric warp, and max_displace_ratio (0.20) clamps how far keypoints are allowed to move so a bad pose can't scramble your character.
The inputs that matter
- image, source_pose, target_pose - the three essentials.
- method -
none/piecewise_affine/tps. - skeleton_blend - stick overlay opacity (0.70).
- blend_mode -
overlay(recommended),soft, ormix(washes the sprite; debug only). - stick_grow - dilates the sticks so they read as a pose hint (default 2).
- include_limb_mids - adds limb midpoints as extra warp control points; only matters if you're actually warping.
Outputs: guided (sprite + skeleton blend), skeleton (clean sticks for ControlNet), image_clean (the warped image with no overlay), and aligned_target_pose (the scaled/translated target pose - save it with CP_SavePose if you like what you see).
Installing
Same pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Spit8/_ComfyUI_CharacterPose
pip install -r _ComfyUI_CharacterPose/requirements.txt
Restart ComfyUI; it's under CharacterPose/Warp. No models required.
Gotchas
- Turn the warp on only if you truly want pixels remapped - and even then, expect to run the result through
CP_CharacterRepair, because a piecewise-affine warp leaves artifacts. The README's workflow file for it is explicit: keepmethod=none. - Side-view sprites are the trap. A ¾ or side-view skeleton has keypoints that nearly line up, which is exactly the geometry that breaks global TPS.
mixblend mode looks like a mistake when you try it. It is, by design - the source calls it debug-only.
The honest summary: this is the pack's most featureful node and its most dangerous one. Use it for alignment + the blended guide, treat the geometric warp as a curiosity, and run the output through Repair. That's the path that actually works.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| source_pose | POSE | — | |
| target_pose | POSE | — | |
| method | COMBO | none | 3 options: none, piecewise_affine, tps |
| smoothing | FLOAT | 4.00–50 | — |
| warp_strength | FLOAT | 0.000–1 | — |
| max_displace_ratio | FLOAT | 0.200.05–2 | — |
| align_to_source | COMBO | true | 2 options: true, false |
| include_limb_mids | COMBO | false | 2 options: true, false |
| skeleton_blend | FLOAT | 0.700–1 | — |
| blend_mode | COMBO | overlay | 3 options: overlay, soft, mix |
| stick_grow | INT | 20–12 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| guided | IMAGE | — |
| skeleton | IMAGE | — |
| image_clean | IMAGE | — |
| aligned_target_pose | POSE | — |