Nodes/ComfyUI-COF/🖼️ COF Appearance
ComfyUI Node

🖼️ COF Appearance

Stop digging through reference folders, ask the file for the shot you need

By yannsouetre·Created 17 days ago·Updated a day ago· 1
🖼️ COF Appearance
  • cof
  • images
  • count
  • labels
◄kind▾►
◄include_offeredtrue►
◄pickmosaic_all►
◄subject▾►
◄angle▾►

Why you'd reach for this

Every face-consistency workflow in ComfyUI has the same unglamorous bottleneck: which image do you feed it. IP-Adapter wants a clean front-facing head shot. A multi-reference editing model wants a few angles plus the outfit. A character sheet wants the whole turnaround at once. If those references live in a folder called refs_final_v3, you're the one remembering which is which - and you're the one who wires the wrong one at 1am.

COF Appearance replaces that with two dropdowns. It takes the cof output of COF Load Character and gives you the preset's appearance images, filtered by type, filtered again by subject and angle, either one at a time or as a ready-made batch.

Consistency is now more an edit-from-a-reference problem than an inject-the-face one, and either way the reference is the input that matters.

How it works

The .cof file stores appearance assets inside variants - one garment, one hairstyle, one environment, each a consistent set - and each asset carries metadata: a kind (face, body, reference-set, character-sheet, hair, clothing, accessory, pilosity, feature, environment, intimate), a subject, and a camera angle. The node filters the resolved preset down by category, then by those tags, then hands back whatever's left as an IMAGE tensor.

Two filters do the heavy lifting:

  • kind - the enum lists only the types this preset actually has, with counts, e.g. clothing - 4 images. There are 13 possible entries, the pack's own references (face, reference set, sheet, body) pseudo-kind first, then all, then the real types. The node keeps its own kind even when it drops to - 0 images, which is why a node can sit there looking empty and still be fine.
  • include_offered - on by default. A preset has the variants it applies (this outfit, this place) plus variants offered with it (a spare outfit, an accessory) that aren't applied unless you ask. Flip this off and you get a narrower, more literal set.

The optional subject (any, head, body, hands, hair, outfit, detail) and angle (any, then front, left34, left, leftback34, back, rightback34, right, right34, top, low34) are exact-match filters on the asset metadata, not fuzzy ones. angle: front means assets tagged front, and if the file tags none that way you get zero images - so use them deliberately, not speculatively.

pick is the one people bounce off. Its options are generated from whatever matched:

  • mosaic_all - every matching image as one batch. Up to 24.
  • mosaic_page_1, mosaic_page_2… - 24 at a time, appearing only when there are more than 24.
  • image_001, image_002… - exactly one, by name.

The labels tell you what you're choosing: image_001 - Bright studio facing the park (environment) · background.desktop · 1920×1080 landscape. Genuinely useful metadata, and it comes out the other side as one line per image in labels.

Inputs and outputs that matter

Required: cof, kind, include_offered, pick. Optional: subject, angle. That's it - no strength, no max size (the loader's max_size sets the resolution).

Out: images (the chosen image, page, or batch), count (how many matched, before your pick narrowed it), labels (one line per match). Wire images into IP-Adapter, a reference-editing model's image input, or a Preview Image; wire labels into Preview Any when you're trying to work out why a filter came back thin.

One mechanical caveat that matters for anything downstream: a batch has to be a single rectangular tensor, so mixed-aspect images get letterboxed onto a white canvas at the batch's largest width and height. Fine for conditioning. Not the originals.

Install

It's one node in a pack with no dependencies. Either search "ComfyUI-COF" in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/yannsouetre/ComfyUI-COF

Then drop .cof files in ComfyUI/models/cof/ or ComfyUI/input/cof/, restart, and press R after adding a new file. Nothing to download, no model to place - the pack's pyproject.toml declares an empty dependency list.

Common issues

The kind list looks shorter than the docs say. It's built per preset, with counts. A preset with no hair variants simply doesn't show hair unless it's the node's current value. If you want to see a type that's missing, change presets - the lists follow the loader.

pick shows nothing but mosaic_all and then errors about 24 images. You have more than 24 matches and the mosaic cap is hard. Switch to mosaic_page_1 / mosaic_page_2, or narrow with kind first. The error message is explicit about it: "N images match: a mosaic holds 24 at most".

Blank 64×64 image. The preset has no image for that kind. The run continues on purpose - the pack treats missing content as non-fatal and says so in labels - so nothing crashes and you get to notice the white square.

Images don't update when you change the loader's preset. The browser extension refreshes the pickers connected to that loader. Check the cof wire is actually connected to this node; an unconnected Appearance node falls back to the static list and stays stale.

CategoryCOF

Inputs (6)

NameTypeDefaultDescription
cofCOF—
kindCOMBOthe appearance types this preset has, with their number of images
include_offeredBOOLEANtruealso the variants offered with this preset (outfits, accessories, poses… available but not applied by default)
pickCOMBOmosaic_allthe 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
subjectoptCOMBO7 options: any, head, body, hands, hair, outfit, +1
angleoptCOMBO11 options: any, front, left34, left, leftback34, back, +5

Outputs (3)

NameTypeDescription
imagesIMAGEthe chosen image, page or batch
countINThow many images match
labelsSTRINGone line per matching image: its name and what it shows