Object Call User Of Id
Count how many times a datablock gets referenced
- BPY_OBJ
- id
- BPY_OBJ
Quick flag before anything else: this node's name promises a count, but look at the outputs and there's no number socket anywhere - just BPY_OBJ. It's a direct wrap of Blender's ID.user_of_id(id), whose real job is to count how many times a given datablock is referenced by this object, but the node schema only exposes the passthrough object, not that count. If you're expecting to pull an integer out of this node into a comparison or a switch, you can't - not from this socket, anyway.
Where it fits in Avatar Graph
Avatar Graph (avatechai/avatar-graph-comfyui) turns a flat character image into a rigged, interactive avatar - segmentation, mesh layers, a "Shape Flow" runtime graph, export via Avatar Main Output. The README covers a small documented set of nodes for that flow; this isn't one of them. It's part of the much larger auto-generated family that exposes Blender's own Object/ID API 1:1 as nodes, and user_of_id in particular is a diagnostic method meant for scripted introspection - checking whether an object still references some specific mesh, material, or image datablock - rather than anything the rigging pipeline calls day to day.
How it works
Blender objects reference other datablocks constantly: a mesh through object.data, materials through slots, modifiers pointing at other objects. user_of_id(id) walks the object looking for references to the specific id you pass it and returns how many it finds. It's read-only - nothing about the object or the referenced datablock changes when you call it.
Inputs and outputs
BPY_OBJ(optional) - the object being inspected. Unwired, it defaults to Blender's active object.id(optional, default null) - the datablock you're checking references for. There's no widget here; this is a socket, so whatever produces a compatible reference upstream needs to be wired in directly.
Output: BPY_OBJ, the same object passed through, consistent with every other node in this family - you keep chaining Object_* nodes off it rather than branching on the count this operator actually computes.
How to install it
ComfyUI Manager: search "avatar-graph-comfyui", install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && python -m pip install -r requirements.txt
The real gotcha is Python version: bpy requires Python 3.10.x specifically. Windows users get a prebuilt Python 3.10 ComfyUI zip in the README; on Mac/Linux, build a dedicated conda env (conda create --name comfyui python=3.10) rather than trying to bolt bpy onto whatever you already have. Restart with --enable-cors-header if you want the live avatar preview panel to work - exports still function without it.
Common issues & troubleshooting
Most install pain traces back to that Python pin - dropping this pack into a 3.11/3.12 environment (the default on newer ComfyUI installs) just won't import. There's also a real report of Avatar Graph leaving a ComfyUI Desktop install in a broken state (oversized logo, a stray audio-permission popup) that survived even a full reinstall - try it in a spare ComfyUI instance first if you're not already isolated on 3.10.
For this specific node: if you were hoping to use it for conditional logic ("only continue if this object still references that mesh"), you'll need to do that check somewhere the count is actually surfaced - a Python-based helper node, or logic you build outside this node entirely. Don't spend time debugging why the "count" output is missing; per the schema, it was never wired to one.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| idopt | id | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |