ComfyUI Node

Character Render

The All-in-One SDXL Pose Generator (and Why It's Now the Legacy Path)

By Spit8·Created 2 months ago·Updated 2 months ago· 1
Character Render
  • character
  • pose_image
  • model
  • clip
  • vae
  • control_net
  • ipadapter
  • clip_vision
  • image
  • latent
positivesame character, full body sprite, clean lines, consistent outfit, high quality
negativeblurry, deformed hands, extra limbs, different character, watermark, text
seed0
steps28
cfg6.5
sampler_name
scheduler
width1024
height1024
controlnet_strength0.85
ipadapter_weight0.75

CP_CharacterRender is a whole SDXL pipeline squeezed into one node: identity injection via IP-Adapter, pose lock via ControlNet OpenPose, a full sampler run, and a VAE decode - with the character and a pose skeleton in, a finished image out. If you want to see what this pack does end-to-end without building a single intermediate step by hand, this is the node that does it.

Fair warning up front: this is the classic path, and the README is candid that the fast path moved on. Since Flux.2 Klein and Qwen-Image-Edit arrived, the recommended flow is "Klein + CP_PoseTransferPrep" or "Qwen-Edit + ControlNet Union." Those are instruction-edit models that re-emit your sprite in a new pose, and they made the "encode identity + IP-Adapter + ControlNet + full KSampler" dance mostly obsolete. This node still works, still runs fully local on an SDXL checkpoint, and is a great way to understand the machinery - but if you're starting fresh, start with the Klein workflow instead.

How it works

It does three things in sequence. First, it applies IP-Adapter with your character's reference image and ipadapter_weight (default 0.75) to inject identity. Then it applies the ControlNet OpenPose condition from pose_image at controlnet_strength (0.85) to lock the pose. Then it runs a KSampler from an empty latent at your width/height and decodes.

The inputs that matter

  • character - from CP_CharacterEncode or Load Character. Its reference image drives the IP-Adapter.
  • pose_image - the skeleton image the pose gets locked to. From CP_ApplyPose, a sheet node, or CP_WarpToPose.
  • model / clip / vae - an SDXL checkpoint loaded the normal ComfyUI way.
  • control_net - required, and it must be an SDXL-architecture OpenPose ControlNet. This is a common footgun: a FLUX ControlNet here fails silently-ish, because the architecture is entirely different.
  • positive / negative - plain strings, sensible sprite-oriented defaults already filled in.
  • seed / steps / cfg / sampler_name / scheduler - a standard KSampler panel (steps 28, cfg 6.5 by default).
  • ipadapter / clip_vision - optional; pass them and identity injection turns on. Without them the node still runs, but it's generating a pose with no idea who the character is, which defeats the purpose.

Outputs: image and latent (the pre-decode latent, if you want to do something with it).

Installing

It's part of Spit8/_ComfyUI_CharacterPose:

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

For IP-Adapter you also need ComfyUI_IPAdapter_plus installed - the node finds it dynamically and errors politely if it's missing. Restart ComfyUI; it lands under CharacterPose/Render.

Gotchas

  • The ControlNet and the checkpoint must be the same architecture. SDXL checkpoint + SDXL OpenPose ControlNet. This trips up more people than anything else in this pack.
  • IP-Adapter at 0.75 is strong - the reference wins over the prompt, which is what you want for identity. Drop it if the pose starts fighting the character.
  • It's an SDXL full-render node, so it's slow compared to the ~4-step Klein path. Use it when you want the classic pipeline, not when you want speed.

Honest verdict: great node, legacy timing. If you're here to actually ship sprite sheets in 2026, the Klein path in PoseTransferPrep is where the pack wants you. Come back to this one when you want to see the old machinery up close.

CategoryCharacterPose/Render

Inputs (19)

NameTypeDefaultDescription
characterCHARACTER
pose_imageIMAGE
modelMODEL
clipCLIP
vaeVAE
control_netCONTROL_NET
positiveSTRINGsame character, full body sprite, clean lines, consistent outfit, high quality
negativeSTRINGblurry, deformed hands, extra limbs, different character, watermark, text
seedINT00–18446744073709550000
stepsINT281–100
cfgFLOAT6.50–30
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
widthINT102464–4096
heightINT102464–4096
controlnet_strengthFLOAT0.850–2
ipadapter_weightFLOAT0.750–2
ipadapteroptIPADAPTER
clip_visionoptCLIP_VISION

Outputs (2)

NameTypeDescription
imageIMAGE
latentLATENT