Render Pose JSON (Animal)
Turn animal keypoints back into a skeleton image
- kps
- IMAGE
This is the render-back half of the animal pose workflow. The AnimalPose preprocessor gives you two things: a skeleton image and the underlying keypoint data (POSE_KEYPOINT, in the AP10K animal format). Render Pose JSON (Animal) takes that keypoint data and draws it back into a skeleton image. Why would you want that? Because the keypoints are editable and the rendered image isn't. Save the pose, tweak the joints in an editor, load it back, and re-render a fresh, clean skeleton to feed your ControlNet - this node is the step that turns edited animal keypoints back into a usable hint image.
How it works
Animal pose detection uses the AP10K scheme - 17 keypoints laid out for four-legged anatomy, a cousin of human OpenPose but tuned for quadrupeds. AnimalPosePreprocessor detects animals and outputs those keypoints as structured JSON. This node reverses the last step: it reads a POSE_KEYPOINT and rasterizes it into an IMAGE - the animal skeleton drawn on a canvas. That image is what an animal-pose ControlNet actually consumes. So the round trip is: detect (AnimalPose) → optionally save and hand-edit the JSON → render (this node) → condition (animal-pose ControlNet).
The value is entirely in that editability. A detected pose with a mangled leg or a missing tail can be fixed at the keypoint level and re-rendered cleanly, rather than fighting the detector on a bad reference. It's also how you'd drive an animal pose from keypoints generated or modified programmatically.
The inputs and output
Minimal, as postprocess nodes go:
kps(POSE_KEYPOINT) - the animal keypoint data. Wire this from AnimalPosePreprocessor's keypoint output, or from a loaded/edited pose JSON.
The single output is an IMAGE - the rendered animal skeleton - which goes into your ControlNet Apply node alongside an animal-pose ControlNet (control_sd15_animal_openpose on SD 1.5).
Installing it
ComfyUI Manager: search ComfyUI's ControlNet Auxiliary Preprocessors, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Fannovel16/comfyui_controlnet_aux
pip install -r requirements.txt
Restart ComfyUI. No model download - rendering keypoints to an image is pure drawing. The AnimalPose detector (which produces the keypoints) and the animal-pose ControlNet (which consumes the skeleton) are the separate pieces that need their own weights.
Where people get burned
The main confusion is what this node is for. If you just want to detect an animal's pose and condition on it, AnimalPosePreprocessor already outputs a skeleton image directly - you don't strictly need this node in the simple case. Render Pose JSON (Animal) earns its keep specifically when you're editing or re-rendering keypoints. Second, feed it the right data: it wants animal (AP10K) keypoints, not human OpenPose keypoints - the skeletons are different schemes and mixing them produces nonsense. And the constant: the rendered skeleton does nothing without an animal-pose ControlNet loaded downstream, and that's an SD 1.5-era model, so this lives in an SD 1.5 workflow.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| kps | POSE_KEYPOINT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |