Object Set Is Holdout
Punch a hole in your scene with holdout
- BPY_OBJ
- BPY_OBJ
ObjectSet Is Holdout is one of the few genuinely useful switches in the ObjectSet_* family, so it deserves a real explanation. In Blender's Cycles renderer, marking an object as a holdout turns it into a hole: it renders as fully transparent, and it knocks out everything behind it in the frame - like a black hole that eats whatever is behind that object.
That sounds weird until you hit the compositing use case, which is where avatar work lives. Say you've placed your rigged character in front of a plane, and you want the final render to show the character standing in your scene but not the plane itself - you want the character cut out cleanly against transparency so you can drop it over video. Mark the plane as a holdout and the plane renders as transparent, carving the character's silhouette out of whatever backdrop sits behind it. It's the standard trick for creating matte-like cutouts inside a 3D scene instead of doing the keying in post.
The node maps to Blender's is_holdout property. Default is false (normal object); set value to true to make the object eat the pixels behind it. One thing to know: holdout is a Cycles renderer behavior, so it shows up in the render output and in anything you export from Avatar Main Output - not in Blender's default solid viewport.
How it works
Standard ObjectSet_* mechanics - the node is auto-generated from a dump of Blender's bpy.types.Object properties, does a setattr on the BPY_OBJ passing through, and hands the object back unchanged so you can chain on.
Inputs that matter:
BPY_OBJ- the object to turn into a holdoutvalue- boolean, defaultfalse;truemakes it a hole
Output: the same BPY_OBJ.
Installing Avatar Graph
This node ships with the whole pack:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && pip install -r requirements.txt
Or ComfyUI Manager → Install Custom Nodes → search Avatar Graph → restart. Pack-level requirements: bpy==3.6.0 means Python 3.10 (Windows gets a bundled 3.10 environment from the README; macOS/Linux want a conda env), and the first launch auto-downloads the SAM ViT-H model into ComfyUI/models/sams plus the mediapipe face/pose landmarkers.
Common issues
Holdout and shadow catcher get conflated constantly, but they're opposites in spirit. A shadow catcher keeps only the shadows cast on it; a holdout removes everything behind it. If you set a holdout expecting a shadow-receiving floor, you'll get a hole instead - and vice versa. Also remember the pack resets its Blender scene to factory settings on every graph run, so the holdout flag has to be set in the chain each run. And since holdout is render-side, don't expect the embedded preview to show it the same way the final output does.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| valueopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |