ComfyUI Node

Pose Transfer Prep

The One Node That Runs the Whole Fast Pipeline

By Spit8·Created 2 months ago·Updated 2 months ago· 1
Pose Transfer Prep
  • image
  • pose_keypoint
  • dwpose_image
  • source_pose
  • guide
  • edit_prompt
  • pose
  • source_pose
  • preview_pose
  • caption
  • caption_backend
pose_sourcelibrary
actionidle
camera_presetSE
propnone
align_to_sourcetrue
auto_captiontrue
prop2none
yaw0
pitch0
roll0
use_manual_camerafalse
caption_override
extra_prompt
width0
height0
pose_prompt
llm_base_urlhttps://api.openai.com/v1
llm_modelgpt-4o-mini
llm_api_key

This is the node the README points you at first, and it's the pack's real headline act. CP_PoseTransferPrep takes a single sprite and does everything - captions the character, composes a 3D pose with camera angle and props, aligns it to your sprite - and hands you two things: a guide image and an edit_prompt string. Feed those to Flux.2 Klein with the sprite as a second reference and you get your hero in a new pose in roughly four steps.

It collapses what used to be a five-node graph (caption + palette + 3D compose + align + prompt assembly) into one box. If you're evaluating this pack, this is the node that either convinces you or doesn't.

How it works

Three stages inside:

  1. Caption - if auto_caption is on (default), it runs the Florence-2 + palette hex color-lock machinery (see CP_CharacterCaption) to describe the character. No transformers installed? It still injects the K-means color palette, just without the rich caption.
  2. Compose - the CP_PoseComposer3D machinery: pick an action (library) or describe a pose (text → LLM → joint angles), pick a camera preset and props, get a projected OpenPose guide.
  3. Align - if align_to_source is on (default), the target pose is scaled and translated to match your sprite's size, so the guide lines up with the character instead of floating somewhere else on the canvas.

The inputs that matter

  • image - your sprite. The whole point of the node.
  • action / camera_preset / prop - the pose: e.g. run_02, SE, sword.
  • pose_source - library (default) or text (LLM-driven, same OpenAI-compatible config as the composer).
  • auto_caption - on by default. Turn it off if you're passing caption_override.
  • pose_keypoint / dwpose_image - optional source pose from a DWPreprocessor. Wire POSE_KEYPOINTpose_keypoint for alignment plus a stick overlay; IMAGEdwpose_image for pixel-perfect sticks. Without either, the node shows the sprite alone - it deliberately does not invent a fake T-pose placeholder.

Outputs: guide (the aligned OpenPose guide image - ref 2 in the Klein workflow), edit_prompt (the assembled prompt), pose (the POSE object), source_pose and preview_pose (preview images), caption, and caption_backend (tells you whether you got real Florence-2 output or the heuristic fallback).

Installing

Same pack as the rest:

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

Then load the example workflow workflows/pose_transfer_flux_klein.json, and drop the Klein models in place: flux-2-klein-4b-fp8.safetensors in models/diffusion_models/, qwen_3_4b.safetensors in models/text_encoders/, flux2-vae.safetensors in models/vae/. For the caption side, install transformers (Florence-2 weights download on first run). Restart ComfyUI; the node is under CharacterPose/Pose.

Gotchas

  • Klein has no OpenPose ControlNet. If you need a hard pose lock, this fast path won't do it - that's what the Qwen-Image-Edit + ControlNet Union workflow is for. Prep is soft guidance: ref2 shows the model where limbs go.
  • Bones in the output? The anti-skeleton wording is already in the prompt. Change the seed - that's the README's own advice.
  • Side-view bias is real. A ¾ sprite becomes a ¾ pose, not a true front view; generative models approximate the rest. Qwen-Edit 2511 handles it better, but don't expect miracles.
  • Check caption_backend. If it says fallback_heuristic, install transformers for actually usable captions.

One node, whole pipeline, ~4 steps. It's the reason to care about this pack at all.

CategoryCharacterPose/Pose

Inputs (23)

NameTypeDefaultDescription
imageIMAGE
pose_sourceCOMBOlibrary2 options: library, text
actionCOMBOidle16 options: cast, fight_01, fight_02, idle, jump, ride_idle, +10
camera_presetCOMBOSE8 options: S, SE, E, NE, N, NW, +2
propCOMBOnone6 options: none, sword, shield, staff, bow, horse
align_to_sourceBOOLEANtrue
auto_captionBOOLEANtrue
pose_keypointoptPOSE_KEYPOINT
dwpose_imageoptIMAGE
prop2optCOMBOnone6 options: none, sword, shield, staff, bow, horse
yawoptFLOAT0-180–180
pitchoptFLOAT0-60–60
rolloptFLOAT0-30–30
use_manual_cameraoptBOOLEANfalse
caption_overrideoptSTRING
extra_promptoptSTRING
source_poseoptPOSE
widthoptINT00–4096
heightoptINT00–4096
pose_promptoptSTRING
llm_base_urloptSTRINGhttps://api.openai.com/v1
llm_modeloptSTRINGgpt-4o-mini
llm_api_keyoptSTRING

Outputs (7)

NameTypeDescription
guideIMAGE
edit_promptSTRING
posePOSE
source_poseIMAGE
preview_poseIMAGE
captionSTRING
caption_backendSTRING