Nodes/ComfyUI-COF/🧊 COF 3D
ComfyUI Node

🧊 COF 3D

COF 3D doesn't load a mesh β€” it gets the character's 3D files to where Load 3D can see them

By yannsouetreΒ·Created 17 days agoΒ·Updated a day agoΒ· 1
🧊 COF 3D
  • cof
  • paths
  • labels
  • count
β—„pickallβ–Ί

Set expectations first

There's no MESH output. No geometry, no UVs, no viewer. COF 3D takes the cof wire, copies the preset's 3D files out of the archive into ComfyUI's input tree, and returns paths as STRING. Then you add a 3D loader - usually core's Load 3D - and pick the file from its dropdown, because the node has just put it where that loader looks.

Read that as a design choice rather than a limitation. ComfyUI has no standard tensor type for a mesh, so any pack that claims to "pass 3D" is really passing a path anyway. This one is honest about it: an explicit export node, then a loader that owns the format handling.

What's in the box

The .cof volume-3D category can carry VRM, GLB, glTF, USDZ, OBJ, FBX, STL, 3MF, PLY and splat-ish formats - the extractor whitelists vrm, glb, gltf, obj, fbx, stl, 3mf, ply, duf and friends. It doesn't care which; it copies and returns.

pick is the only real decision. Values are all and item_001 … item_064, and in the UI the labels are filled from the file, so you're reading something like item_002 - Standing A-pose Β· character_a.vrm rather than a numbered void. Only the entries that match the current preset appear. all exports everything, which is usually what you want the first time and rarely what you want afterwards - the export folder accumulates.

Where it writes:

ComfyUI/input/3d/cof-<cof-file-stem>/

Note input/3d, not models. It's not a model; it's an asset the Load 3D node reads from the input directory. Note also the cof-<stem> subfolder - per-file, so two characters can both ship body.vrm without stomping each other.

Inputs and outputs

Required: cof, pick. Nothing else, no optional sockets.

  • paths - newline-separated absolute paths of the exported files.
  • labels - one line per file the preset has (item_001: …), or (this preset has no 3D file) if it has none.
  • count - how many files the preset has, not how many you exported. So count: 4 with one path means you picked item_001 out of four. That distinction matters when you're debugging a half-empty export.

Wire paths into Preview Any to check where things landed. There's no automatic handoff to a loader, so the loop the pack assumes is: run once, note the filenames, add your 3D loader, pick from its list. Annoying? A little. Also the only shape that works when the loader is someone else's node.

What you'd actually use it for

Be realistic about the 3D half of this. Image-to-3D output is impressive in silhouette and bad in the ways that matter for production - triangle-soup topology, machine-generated UVs, no rig - and it's fine for static props, backgrounds and 3D printing while being a retopology project for anything that has to deform. A .cof-packed VRM is the opposite kind of asset: a hand-made or properly rigged character mesh, which is exactly the thing you'd want for a rendered turnaround, a compositing pass, or as a reference frame rendered from a camera angle you can't prompt reliably.

So the practical workflow isn't "generate 3D inside the graph". It's: export the authored model, load it, render or composite it. The generative-3D stack and the authored-asset stack are different jobs, and this node serves the second.

Install

The pack has no Python dependencies, and there's nothing extra for this node specifically - no 3D library, no viewer.

cd ComfyUI/custom_nodes
git clone https://github.com/yannsouetre/ComfyUI-COF
mkdir -p ComfyUI/models/cof
cp your-character.cof ComfyUI/models/cof/

Restart. Press R after adding a new .cof. The preview workflow workflows/cof_preview.json includes a COF 3D node wired to Preview Any, so you can confirm the paths without installing a loader. For actually loading the result you need core's 3D nodes (they list input/3d) or a third-party loader - that's a separate install and, depending on which one, a separate set of wheels.

Common issues

paths is empty, count is 0. The preset genuinely has no 3D variants. Nothing errors - the pack treats an empty category as normal, which is why you get (this preset has no 3D file) in labels rather than a traceback.

Load 3D doesn't see the new files. Its list is built from the input directory at import. Refresh isn't enough for a folder listing - restart ComfyUI.

Re-running floods input/3d. Every run re-extracts. Export once, then disconnect or bypass the node; the paths stay valid until you clear the input folder.

"refusing to extract …". The whitelist rejected the file extension. A .cof can reference a format the extractor doesn't know (splat formats with unusual extensions are the usual suspect). It fails visibly rather than writing a junk file, which is the right trade.

CategoryCOF

Inputs (2)

NameTypeDefaultDescription
cofCOFβ€”
pickCOMBOallthe preset's files by name; all = every one

Outputs (3)

NameTypeDescription
pathsSTRINGβ€”
labelsSTRINGβ€”
countINTβ€”