Nodes/Avatar Graph/Object Origin Set
ComfyUI Node

Object Origin Set

Move it to geometry, cursor, or center of mass

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Object Origin Set
  • BPY_OBJ
  • BPY_OBJ
type
center

Object_OriginSet is the flexible version of Object_OriginClear. Instead of just parking the origin at the world, it lets you decide where the origin goes - to the geometry, to the 3D cursor, to the center of mass or volume. It's the generated wrapper for bpy.ops.object.origin_set(), and it's one of the few Object_* nodes you'll genuinely reach for in an avatar pipeline.

Why this matters for avatars

Meshes created from segmented images come out with origins wherever the generation happened to put them. Before you parent layers together or hand them to shape flows, you want the origin somewhere sensible. This node is how you make that choice explicit.

The inputs that matter

  • BPY_OBJ (in/out) - the object to fix.
  • type - the big one:
    • ORIGIN_GEOMETRY - move the origin to the mesh's center. The classic "my origin is in outer space" fix, and the one you'll use most.
    • GEOMETRY_ORIGIN - the opposite: keep the origin where it is and move the geometry so it sits at the origin.
    • ORIGIN_CURSOR - drop the origin at the 3D cursor.
    • ORIGIN_CENTER_OF_MASS - origin at the center of mass.
    • ORIGIN_CENTER_OF_VOLUME - origin at the center of volume.
  • center - only relevant for the center-of-mass/volume types: MEDIAN or BOUNDS. Median uses the weighted average of the geometry; Bounds uses the bounding box center.

Output: the same BPY_OBJ, ready to chain.

How it works

Standard Object_* plumbing: the node sets your BPY_OBJ active in the shared headless Blender scene, runs the operator with the chosen type and center, and returns the object. Simple, deterministic, no hidden state beyond the object itself.

When to reach for it

Right after creating a mesh layer, before parenting or shape flow. ORIGIN_GEOMETRY gives you a clean, centered pivot so rotation and scale behave like you expect. It's a small node with outsize impact on how well the rest of your rig behaves.

Installing it

Comes with Avatar Graph:

  • ComfyUI Manager: search "Avatar Graph", install, restart.
  • Or:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && python -m pip install -r requirements.txt

Pack-wide caveat: bpy==3.6.0 only supports Python 3.10. On 3.11+ you get "no module named bpy" and the pack won't load. Windows: the README's bundled ComfyUI_3.10.7z + run_nvidia_gpu_3.10.bat. Elsewhere: conda with python=3.10.

Gotchas

  • The two directions (GEOMETRY_ORIGIN vs ORIGIN_GEOMETRY) are easy to flip - if your mesh teleports after running, you picked the wrong one. That's the expected behavior of that operator, not a bug.
  • center only matters for the center-of-mass/volume types.
  • Scene resets each run; the object must come from an upstream node in the same graph.
Categoryblender

Inputs (3)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
typeoptCOMBO5 options: GEOMETRY_ORIGIN, ORIGIN_GEOMETRY, ORIGIN_CURSOR, ORIGIN_CENTER_OF_MASS, ORIGIN_CENTER_OF_VOLUME
centeroptCOMBO2 options: MEDIAN, BOUNDS

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ