Object Call Is Modified
Object Call Is Modified — ComfyUI Node from Avatar Graph
- BPY_OBJ
- scene
- settings
- BPY_OBJ
This one comes from Avatar Graph, the Avatech AI pack that builds real-time interactive 2D avatars out of a single character image - blinking eyes, lip sync, the whole animated-portrait thing - using Blender's Python engine (bpy) as the mesh backend and Avatech's own "Shape Flow" runtime to drive it live. The README's own node table only advertises the headliners: Segmentation (SAM), Create Mesh Layer, Create Shape Flow, Avatar Main Output. Object Call Is Modified isn't on that list. It's one of a big batch of ObjectCall_* nodes that expose Blender's bpy.types.Object class more or less method-for-method as individual ComfyUI nodes - almost certainly generated by the pack's own generate_blender_types.py script rather than hand-written and documented.
What it actually does: calls object.is_modified(scene, settings), Blender's broader modifier check. It's Is Deform Modified's sibling node but wider scope - where that one only cares about deform-type modifiers (Armature, Cast, and friends), this one asks "is this object's evaluated geometry different from its base data because of any modifier at all" - Subdivision Surface, Boolean, Mirror, anything in the stack - for the given scene and settings ('PREVIEW' or 'RENDER', matching whichever context you're evaluating in). It's a read, not a write: a sanity check a pipeline might run before deciding whether it's worth re-baking an object's mesh.
Inputs match the schema exactly: BPY_OBJ (optional in the schema, but pointless without one - feed it from whatever mesh/object node sits upstream in your graph), scene, and a field typed " settings" - note the leading space, a quirk of the auto-generator falling back to naming the type after the field name when it couldn't map Blender's enum cleanly to a ComfyUI widget. There's no dropdown here; you wire the value in from elsewhere. Output is BPY_OBJ again, same object passed straight through rather than the boolean the underlying Blender call actually returns - these Object-Call nodes are built to chain, not to report.
Installing it means installing the whole pack. Via ComfyUI Manager: search "Avatar Graph" and install. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/avatechai/avatar-graph-comfyui, then cd avatar-graph-comfyui && pip install -r requirements.txt and restart. The requirement worth planning around: bpy needs Python 3.10.x exactly, so the README's advice to spin up a dedicated conda create --name comfyui python=3.10 env instead of reusing your existing Flux/SDXL environment is worth following rather than skipping. Restart ComfyUI with --enable-cors-header (plus --force-fp16 on macOS) - that flag is what lets ComfyUI talk to Avatech's live editor for the real-time avatar preview.
Troubleshooting: a Python version mismatch is the most likely wall you'll hit - bpy failing to import at ComfyUI startup is the classic symptom of running this pack on 3.11/3.12 instead of 3.10, and it's a genuinely common failure mode across Blender-Python-based ComfyUI nodes generally, not a bug specific to this one. Forgetting --enable-cors-header doesn't break execution - the graph still runs and you can still pull a .glb/.gltf off Avatar Main Output - you just lose the live preview pane, which the pack's FAQ confirms is intentional. And because this node (like its siblings) has zero individual documentation in the repo, if the behavior surprises you, Blender's own Object.is_modified() API reference is the actual source of truth here.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| sceneopt | scene | — | |
| settingsopt | settings | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |