Object Call Evaluated Get
Reading a mesh's actual current shape, post shape-keys
- BPY_OBJ
- depsgraph
- BPY_OBJ
Out of the whole tail of raw bpy.types.Object wrappers in Avatar Graph (avatechai/avatar-graph-comfyui), ObjectCall_EvaluatedGet is one of the few that's genuinely close to the pack's own core mechanism. Avatar Graph's headline trick - rigging a still character portrait into a live, blinking, lip-syncing 2D avatar - works by driving Blender shape keys at runtime through its "Shape Flow" system. This node is how you'd get at the result of that.
How it works
It maps to Object.evaluated_get(depsgraph), documented as: "get corresponding evaluated ID from given evaluated depsgraph." In Blender, an object's raw data - its base mesh, its rest-pose shape keys - is separate from its "evaluated" state: what it actually looks like once every modifier, shape key value, and constraint currently in effect has been applied. If you query the raw object, you get the resting/base mesh. If you query the evaluated object (via this call, against Blender's dependency graph), you get the mesh exactly as it currently appears - mid-blink, mouth open, whatever the Shape Flow runtime has dialed in at that moment.
Why you'd reach for it
Anywhere downstream needs the character's actual current shape rather than its neutral base mesh - baking a texture onto the currently-deformed surface, measuring or exporting the posed geometry, running a point query against what's actually on screen right now. Skipping this and operating on the raw object instead is a classic Blender scripting mistake: you get the wrong mesh and can't figure out why your result doesn't match what's rendered.
Inputs and outputs
- BPY_OBJ (optional) - the object whose evaluated state you want.
- depsgraph (optional, default
null) - Blender's dependency graph, required because it's what actually runs the modifier/shape-key stack and produces the evaluated result.
Output is a single BPY_OBJ. Here the passthrough distinction matters: this is one of the few nodes in the batch where the output is meaningfully different from the input - it represents the evaluated object, not merely the same handle echoed back untouched.
Installing it
Avatar Graph pulls in Blender's bpy module, which makes it a real install rather than a drop-in - it's strict about Python version. 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" from 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
The Python-version pin is where almost everyone gets stuck first - bpy needs 3.10.x, not newer. Specific to this node: without a valid depsgraph, there's nothing for it to evaluate against, so make sure that input is actually wired to something real rather than left at its null default. Given how central "evaluated vs. raw" state is to anything shape-key driven, this is arguably the most conceptually useful node in the whole batch - even though, like the rest, it's absent from the README's documented node table and this description comes from Blender's own Object.evaluated_get() API docs rather than anything Avatech published.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| depsgraphopt | depsgraph | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |