ComfyUI Node

Save Pose

Keep the Good Poses

By Spit8·Created 2 months ago·Updated 2 months ago· 1
Save Pose
  • pose
  • path
filenamecustom_pose

You spent ten minutes nudging a CP_PoseComposer3D into the perfect combat stance, or you extracted a great pose from a reference drawing. If you don't save it, that work evaporates the moment you change a seed. CP_SavePose writes any POSE object to disk as a .pose JSON file so you can reuse it in a future session - and, once you get it into the right folder, pick it from CP_PoseLibraryLoad's dropdown like a built-in.

How it works

It serializes the pose (the 18 COCO-18 keypoints plus canvas size) to JSON. The filename input gets .pose appended if you didn't include it, and the file lands in ComfyUI/output/poses/<name>.pose. Output is the absolute path as a string, so you can wire it into anything that wants to know where the file went.

The inputs

  • pose - any POSE: from CP_PoseComposer3D, CP_ExtractPose, CP_PoseLibraryLoad, or CP_WarpToPose's aligned_target_pose.
  • filename - default custom_pose.

One output node, one output: path.

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/Pose.

Gotchas

  • The output/input folder mismatch. SavePose writes to output/poses/, but CP_PoseLibraryLoad scans the built-in library and input/poses/. To load a pose you saved, copy it from output/poses/ to ComfyUI/input/poses/ and reload the workflow. This is the pack's one rough seam and it bites everyone eventually.
  • It's an output node, so it executes whenever the graph runs - fine, but know that re-running overwrites the same-named file silently.
  • .pose is plain JSON, human-readable. If you're comfortable editing keypoints by hand, saved poses are easy to tweak in any text editor.

Compose once, save, and your best poses become permanent library material. Just remember the copy-to-input step.

CategoryCharacterPose/Pose

Inputs (2)

NameTypeDefaultDescription
posePOSE
filenameSTRINGcustom_pose

Outputs (1)

NameTypeDescription
pathSTRING