Get First Obj Ops
Pull one object back out of a group
- BPY_OBJS
- BPY_OBJ
Avatar Graph's Blender-object plumbing runs on two socket types: BPY_OBJ for a single object and BPY_OBJS for a group of them. Most of the pack's mesh-editing nodes (the Mesh_* family - bevel, bisect, and the rest) want a single BPY_OBJ. But plenty of upstream steps - grouping, joining, importing - naturally produce a BPY_OBJS bundle instead. Get First Obj Ops is the unwrapping step: hand it a group, get back one object.
How it works
It's genuinely just indexing. Give it a BPY_OBJS list and it returns whichever object sits first in that list - the one that was added or created earliest in whatever built the group. There's no selection logic, no "pick the biggest" or "pick the active one" - it's objects[0], full stop. If you need a specific object out of a group rather than whichever happens to be first, this node can't do that for you; you'd need to control the order things went into the group in the first place.
The input and output that matter
BPY_OBJS(optional) - the group to pull from. It's marked optional in the schema, but functionally you need to feed it something for the node to do anything useful.
Output is a single BPY_OBJ, ready to plug into any of the pack's Mesh_* nodes, Group Ops, or anything else that expects one object rather than a group.
How to install it
Via ComfyUI Manager: search "Avatar Graph" (avatar-graph-comfyui), install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui
pip install -r requirements.txt
The pack's one hard requirement: bpy==3.6.0, pinned in requirements.txt, and that wheel only resolves on Python 3.10.x - not 3.11, not 3.12. Windows users get Avatech's own bundled Python 3.10 ComfyUI zip via the README; on Mac/Linux, build a dedicated conda environment (conda create --name comfyui python=3.10) instead of fighting an existing one. The install also brings in segment-anything, mediapipe, and OpenCV - noticeably heavier than a typical node pack, so budget the time.
Common issues & troubleshooting
Output is empty / errors on an empty list. If whatever fed BPY_OBJS produced zero objects - a failed segmentation, an empty group upstream - indexing [0] on an empty list will fail. Trace back to whatever's supposed to be populating the group.
Got the "wrong" object. Since this is purely positional (first-added, not first-selected or "main"), if your group has more than one object and you're not getting the one you expected, check the order they were created or joined in upstream - that order is exactly what determines what "first" means here. There's nothing to configure on this node itself to change which one it picks.
This node doesn't seem necessary for your graph. If you only ever have a single BPY_OBJ flowing through in the first place, you don't need this - it exists specifically for the moment you've collected multiple objects into a group and need to hand just one back to a node that expects a singular object.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJSopt | BPY_OBJS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |