π COF Postures
Pose images, OpenPose skeletons and silhouettes, straight out of the character file
- cof
- images
- count
- labels
What it's for
Pose control still works the old way: you need a target pose as an image. Either it's a photo you're copying the body language of, a rendered OpenPose skeleton, or a silhouette you're going to fill in. Most people scrape those from a video frame or a stock photo and hope the hands aren't a mess.
COF Postures assumes the pose set belongs with the character. A .cof can carry posture variants tagged as photo, photos, openpose or silhouette, and this node pulls them out of the file as an IMAGE batch you can drop straight into a ControlNet's image input.
It's the same machinery as COF Appearance - same picker, same batching - with the category swapped to postures and the subject/angle filters dropped. If you've used one, you know this one.
How it works
The reader resolves the preset's posture variants (applied, plus offered if you leave include_offered on), keeps the ones whose kind matches your selection, and tensorises the images. kind has five possible values:
all- everything in the posture category.photo/photos- a single pose photo vs a set of them. Yes, they're separate kinds, and yes, that's mildly annoying; the file author decides which they used, so check both before concluding a preset has no photos.openpose- pre-rendered skeletons, which is the one you want for a pose ControlNet.silhouette- body outlines, for shape-first conditioning.
The enum shows up with counts (openpose - 3 images), and - important - it lists only the kinds the current preset actually has. all and photo are always present, because the pack treats them as the fixed leading choices, and the node's current kind sticks around even at zero.
pick works exactly like the Appearance node's: mosaic_all for the whole matching set as one batch (24 max), mosaic_page_1/mosaic_page_2 beyond that, image_NNN for a single frame by name. The label format gives you the variant name, the kind, and the pixel size with orientation, which is how you find the landscape skeleton in a folder of portraits.
Inputs and outputs
Required: cof, kind, include_offered, pick. No optional inputs at all - there's no subject/angle here, so filtering is coarser than Appearance's.
images- the chosen pose image(s) as one ComfyUI IMAGE batch.count- how many matched beforepicknarrowed it. Useful as a sanity check:count: 0means yourkindis wrong for this preset, not that the node broke.labels- one line per match.
Wire images into a ControlNet Apply node's image slot, or into a pose preprocessor if the source is a photo rather than a skeleton. The one thing you should not do is assume openpose images need no preprocessing - a rendered skeleton from the file is usually in the right colour convention, but a photo is a photo and still needs a detector run over it. The distinction between "structure already extracted" and "raw reference" is the whole reason those kinds exist separately.
Install
No dependencies, no model downloads, nothing to compile - the pack is pure Python plus a small frontend extension, and pyproject.toml lists an empty dependency set.
cd ComfyUI/custom_nodes
git clone https://github.com/yannsouetre/ComfyUI-COF
Manager search: "ComfyUI-COF". Then:
mkdir -p ComfyUI/models/cof
cp your-character.cof ComfyUI/models/cof/
Restart ComfyUI, press R if you add another .cof later. The preview workflow (workflows/cof_preview.json) includes a Postures node, so you can confirm the plumbing works before you touch a ControlNet. If you're driving this from the API, kind and pick accept the bare tokens (openpose, image_002), so you don't need the full - label strings.
Common issues
count is zero and you got a blank 64Γ64 image. This preset carries no postures of that kind. It's deliberate: a missing category never stops the run, and the pack says so in labels. Try all.
The skeleton batch has white bars on the sides. Mixed aspect ratios get letterboxed onto a single canvas so they can live in one tensor. If a ControlNet is picking up the padding as composition, use image_NNN to send one pose at a time instead of a mosaic.
More than 24 poses. The mosaic cap is hard; use the page options or narrow the kind. The error is explicit rather than silently truncating, which is honestly the better failure.
Pose comes out mirrored or cropped relative to the skeleton. That's ControlNet resolution and aspect, not this node - resize the skeleton to your latent's proportions before the ControlNet, and keep in mind a silhouette wants a different control strength than a skeleton does. Those are knobs on the ControlNet, not on COF.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| cof | COF | β | |
| kind | COMBO | the posture types this preset has, with their number of images | |
| include_offered | BOOLEAN | true | also the variants offered with this preset (outfits, accessories, poses⦠available but not applied by default) |
| pick | COMBO | mosaic_all | the images that match, by name: mosaic_all = all of them as one batch (up to 24); beyond 24, mosaic_page_1, mosaic_page_2β¦ = 24 at a time; image_NNN = one image |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | the chosen image, page or batch |
| count | INT | how many images match |
| labels | STRING | one line per matching image: its name and what it shows |