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

Object Call Crazyspace Displacement To Original

Mapping a deformed vertex offset back to the base mesh

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

This is about as deep-cut as Avatar Graph (avatechai/avatar-graph-comfyui) gets. The pack's headline feature - rigging a still character portrait into a live, blinking, lip-syncing 2D avatar - never touches this node directly. ObjectCall_CrazyspaceDisplacementToOriginal is a raw wrapper around one of Blender's more obscure mesh-deformation utilities, exposed here because the pack's generator wraps essentially the whole bpy.types.Object API, not because the avatar-rigging workflow calls for it.

How it works

It maps to Object.crazyspace_displacement_to_original(vertex_group_index, vertex_index, displacement), documented as: "convert a difference of vertex coordinates to a difference of coordinates in original space." "Crazyspace," in Blender's own terminology, is the coordinate space a vertex sits in after modifiers and shape keys have deformed it - as opposed to "original space," the mesh's plain undeformed coordinates. This call answers a specific question: if you nudge a vertex by some offset while looking at its currently-deformed (post-modifier) position, what offset does that correspond to back in the mesh's original, undeformed data?

Why you'd reach for it

Only relevant if you're writing something sculpt-tool-like - logic that lets you interactively push a vertex around in its deformed, on-screen position and needs to translate that nudge back into an edit on the base mesh. For a pack built entirely around shape-key-driven avatar rigs (Avatar Graph's "Shape Flow" system), that's a real question in principle, just not one the pack's documented nodes expose a friendly interface for.

Inputs and outputs

  • BPY_OBJ (optional) - the deformed object.
  • vertex_index (optional INT, default 0) - which vertex you're querying.
  • One additional field keyed " 0" (default null) - another visible seam in this pack's auto-generation, where the real method's other two parameters (vertex_group_index, displacement) evidently didn't flatten cleanly into named inputs.

Output is a single BPY_OBJ, the object passed straight through - the computed original-space displacement itself isn't exposed as a separate wire.

Setup this node needs first

This call reads from a cache that has to be populated ahead of time by ObjectCall_CrazyspaceEval - calling this node cold, before that one, has nothing to work from.

Installing it

Avatar Graph depends on Blender's bpy module, which is strict about Python version - expect a real install. On Windows, use the author's bundled Python 3.10 environment (linked in their README), unzipped into your ComfyUI folder and launched via the included .bat, then install "Avatar Graph" through ComfyUI Manager. On macOS/Linux, pin your ComfyUI environment to Python 3.10.x exactly - conda is the cleanest way (conda create --name comfyui python=3.10). Then cd ComfyUI/custom_nodes, git clone https://github.com/avatechai/avatar-graph-comfyui.git (their README's own manual-install command points to a stale org, avatechgg - the repo lives under avatechai). cd avatar-graph-comfyui && python -m pip install -r requirements.txt, then restart with python main.py --enable-cors-header (Mac: also --force-fp16). That flag opens CORS so the hosted viewer at editor.avatech.ai can talk to your local ComfyUI; skip it if you're exporting .glb/.gltf from Avatar Main Output instead.

Common issues

Python-version mismatch trips up the install before anything else - bpy needs 3.10.x. Beyond that, this node is genuinely obscure even by this batch's standards: with one parameter missing a clean key and the computed result not wired out, treat it as a building block for a custom Python-scripted deformation tool rather than something you'd drop into a normal rigging graph. There's no author documentation for it at all, so this description is grounded in Blender's own Object.crazyspace_displacement_to_original() API docs.

Categoryblender

Inputs (3)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
vertex_indexoptINT0
0opt 0

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ