Transform From Gizmo
The gizmo-handler node, which is exactly as useless in a graph as it sounds
- BPY_OBJ
- BPY_OBJ
Transform From Gizmo is the node you should know about mainly so you don't waste an hour trying to make it do something. It wraps bpy.ops.transform.from_gizmo, which in Blender is the operator that gizmo handlers call when you grab and drag a transform gizmo in the 3D viewport - the on-screen arrows, rings, and handles. It's an internal plumbing operator: it doesn't create a transformation by itself, it reads the state of a gizmo interaction that's happening somewhere in a viewport right now.
Headless ComfyUI has no viewport and no mouse. So this node, as wired here, does effectively nothing. It enters edit mode, calls the operator with no parameters and no gizmo to consult, and hands your BPY_OBJ back. You get a pass-through that looks busy.
This is the clearest example in the pack of what happens when you auto-generate a node for every Blender operator: some operators are only meaningful inside a real interactive session, and this is one of them. The generator couldn't know - it just saw a transform operator with no properties and wrapped it. Nobody is going to delete it, because deleting is also manual.
How it works
Like the other Transform_* nodes it inherits EditOps, so the wrapper deselects everything, sets your BPY_OBJ active, enters edit mode, invokes bpy.ops.transform.from_gizmo(), and returns to object mode. It takes only BPY_OBJ as input and returns BPY_OBJ unchanged. There are no parameters because the operator's only real input - the gizmo's current state - doesn't exist outside an interactive Blender session.
Could you ever use it? Theoretically, if you were driving Blender's operators from a script that faked a gizmo interaction, from_gizmo would be the final call. Practically, in a ComfyUI graph, no. If you see it in a downloaded workflow, treat it as a benign no-op placed there by accident or by an author who was poking at the node list.
Inputs that matter
- BPY_OBJ - optional; the object passes through.
Output: BPY_OBJ - unchanged. That's the feature.
Installing it
Part of the Avatar Graph pack. ComfyUI Manager → search "Avatar Graph", 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
Restart after. Pack gotchas: bpy==3.6.0 pins you to Python 3.10.x (3.11+ and the whole pack fails to import), and first launch downloads the SAM ViT-H checkpoint (~2.5 GB) to ComfyUI/models/sams plus two MediaPipe landmarker files.
Common issues
- "No module named bpy" → Python 3.10.x, same as every node in this pack.
- "The node does nothing" → correct, and it's not a bug. It's a gizmo interaction operator running with no gizmo.
- "It's in my workflow and I'm scared to remove it" → remove it. It's a pass-through; the graph will run fine without it.
One sentence of advice: don't build anything on this node. It's a fossil from the auto-generation process - harmless to leave in a chain, and best ignored until the pack's authors prune it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |