CCTech OpenPose Preprocessor ⚡
OpenPose skeletons without DWPose — and the license you need to read first
- image
- IMAGE
You want the person in your image to hit a specific pose - a dance move, a composition, a hand gesture - and OpenPose is still how you tell a ControlNet where the body goes. This node runs the classic three-CNN detector that predates DWPose: one network for body keypoints, one for hands, one for the face, and it renders the result as the familiar stick-figure skeleton on black.
Pose conditioning pairs beautifully with depth - OpenPose puts the person in position, depth puts them in the scene, and multi-ControlNet blends both. It's the same pose vocabulary every OpenPose-ControlNet checkpoint expects, so the output drops straight into the control_image input.
How it works
Under the hood are three separate CNNs from the Carnegie Mellon OpenPose lineage - body, hand, and face - ported as real architecture code from comfyui_controlnet_aux (Apache-2.0), not wrapped through some other pack. The weights auto-download from HuggingFace on first use into ComfyUI/models/openpose/. The interesting implementation bit: this node batches. Instead of running detection in a Python loop per frame, it stacks frames into the CNN forward passes in chunks, which matters if you're feeding it a video frame sequence rather than one image.
Inputs and outputs that matter
image- the photo or video frame with a person in it.resolution(default 512, 64–2048) - detection resolution; higher catches more detail but costs time and VRAM.detect_body,detect_hand,detect_face(all default on) - you can strip out what you don't need. For a face-focused ControlNet you'd leave face on and switch the others off.batch_size(optional, default 8, 1–64) - frames per stacked CNN forward. Higher is faster through a video, but each step eats more VRAM. It's in the optional section, so it defaults to 8 even in older saved workflows that don't wire it.
Output is one IMAGE: the skeleton rendered on a black canvas. Wire it into an OpenPose ControlNet's control_image. There's also a backward-compatible alias where an earlier build registered this node under the bare id OpenPose - same class, both ids resolve, so old saved workflows keep loading.
The license, before anything else
Read the docstring in the node, because this is the one genuinely commercial-relevant catch in the pack: the underlying OpenPose architecture and checkpoints carry CMU's license - academic or non-profit, noncommercial research use only. The wrapper code here is Apache-2.0, but the weights and architecture lineage are not. That's the same situation as every other ComfyUI pack shipping this detector, including comfyui_controlnet_aux itself. If you're using it commercially, this isn't the pose node you want - check vendor/openpose.py's header for the exact text and shop around for a differently-licensed pose detector.
Installing it
Install once for the whole pack: ComfyUI Manager → search "ComfyUI-ControlNet-Nodes", or
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-ControlNet-Nodes
then restart ComfyUI. It shows up under 🤖 CCTech/Preprocessors. No extra dependencies beyond the pack's own (huggingface_hub, opencv-python).
Common issues
First run downloads three checkpoints (body, hand, face), so don't panic when the queue stalls there. If hands look mangled, that's the pre-DWPose detector showing its age - DWPose genuinely does better hands, and this node doesn't try to pretend otherwise. If you're only ever doing single images, you can leave batch_size alone; it only matters when a frame sequence is coming through, and if you're pushing it past the default watch your VRAM.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| resolution | INT | 51264–2048 | — |
| detect_body | BOOLEAN | true | — |
| detect_hand | BOOLEAN | true | — |
| detect_face | BOOLEAN | true | — |
| batch_sizeopt | INT | 81–64 | Frames per stacked CNN forward - higher is faster, uses more VRAM. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |