Nodes/Avatar Graph/Object Call Crazyspace Displacement To Deformed
ComfyUI Node

Object Call Crazyspace Displacement To Deformed

Blender's deepest internals, exposed as a node

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Object Call Crazyspace Displacement To Deformed
  • BPY_OBJ
  • 0
  • BPY_OBJ
vertex_index0

This is about as far into Blender's internals as Avatar Graph's node set goes. Like Object Call Cache Release, the ObjectCall_ prefix tells you this isn't a menu operator - it's a direct call to Object.crazyspace_displacement_to_deformed(), part of a small trio of methods Blender exposes specifically for tool authors who need to edit a mesh correctly while modifiers are deforming it live.

How it works

"Crazyspace" is Blender's own term for a real problem: when an object has non-linear deforming modifiers on it - Mirror, Subsurf, Armature, anything that bends or folds geometry - a straight-line offset applied to a vertex in the mesh's original (undeformed) coordinates doesn't land where you'd expect once those modifiers evaluate. Move a vertex "up" on the base mesh, and under a Subsurf it might visually end up somewhere else entirely, because the modifier stack isn't a simple 1:1 mapping.

crazyspace_displacement_to_deformed() is the correction function: hand it a displacement you computed in the mesh's base space, and it converts it into the equivalent displacement in deformed (final, on-screen) space - the coordinate system that actually matches what you see in the viewport or the exported result. This exists so tools that let you drag or nudge geometry interactively can make the drag match what you're looking at, even with heavy modifiers stacked on top.

The inputs and outputs that matter

  • BPY_OBJ - the object whose crazyspace correction you're computing against.
  • vertex_index (default 0) - which vertex the displacement correction applies to.

The schema lists one additional, unnamed parameter that doesn't carry a usable label - a quirk of how this particular method's arguments got auto-generated from Blender's API rather than a real, documented input; there's nothing safe to say about what it configures, so don't rely on it.

Output is the same BPY_OBJ.

How to install it

Through ComfyUI Manager - search "Avatar Graph" - or manually: cd ComfyUI/custom_nodes && git clone https://github.com/avatechai/avatar-graph-comfyui, cd avatar-graph-comfyui && pip install -r requirements.txt, restart. The pack needs Python 3.10.x specifically because bpy (Blender-as-a-library) only ships wheels for that version - anything newer and the install fails, or the blender-category nodes simply don't show up. Dedicated conda env at 3.10 on macOS/Linux; Avatech's prebuilt Python-3.10 ComfyUI zip on Windows, pack installed via Manager on top.

Common issues & troubleshooting

You don't understand what this does, and that's fine. This is genuinely internal tooling-author territory - Blender exposes it for people building custom sculpt/mesh-edit tools that need to work correctly under modifiers, not for typical graph-building. If you're not intentionally computing a displacement in base-mesh space and converting it, you almost certainly don't need this node.

It's missing from the README entirely. It is - along with the rest of this pack's blender-category nodes, it's an auto-generated passthrough from Blender's own API (via the pack's generate_blender_types.py script), not a hand-documented Avatech feature. Blender's Python API reference for Object.crazyspace_displacement_to_deformed is the actual source of truth if you're doing something advanced enough to need this.

Results look wrong or do nothing visible. Without the companion crazyspace_eval() call first (to build the crazyspace data) and a real displacement value computed against it, this correction has nothing meaningful to act on - it's one piece of a three-part internal API, and Avatar Graph exposes just this one piece as a standalone node.

Categoryblender

Inputs (3)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
vertex_indexoptINT0
0opt 0

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ