Object Call Visible In Viewport Get
Per-viewport visibility, not global
- BPY_OBJ
- viewport
- BPY_OBJ
Like its sibling Object Call Visible Get, this node's name promises a check that its outputs don't actually surface - no boolean socket, just BPY_OBJ passed through. It wraps Blender's Object.visible_in_viewport_get(viewport), which answers a narrower question than the global visibility check: is this object visible in this specific 3D viewport, accounting for that viewport's own local overrides (local view / isolation mode, per-viewport collection visibility) rather than the file-wide state.
Where it fits in Avatar Graph
Avatar Graph (avatechai/avatar-graph-comfyui) rigs a flat character image into an interactive avatar - segmentation, mesh layers, a "Shape Flow" runtime graph, export through Avatar Main Output. The README documents a handful of nodes for that pipeline, and this isn't one of them. It's part of the much larger family the pack generates by wrapping Blender's own Object API almost 1:1 as nodes - this specific one is scripting-level plumbing for multi-viewport setups, well outside anything the rigging tutorial touches.
How it works
Blender lets each open 3D viewport carry its own local visibility state - you can isolate an object in one viewport (/ for local view) without hiding it everywhere else, or toggle a collection off in one viewport's overlay settings while it stays visible in another. visible_in_viewport_get() checks visibility scoped to one particular viewport rather than the object's global state, which matters if a script (or, here, a graph) needs to reason about what's actually on screen in a specific view rather than in the file as a whole.
Inputs and outputs
BPY_OBJ(optional) - the object being checked. Unwired, defaults to the active object.viewport(optional, default null) - the specific viewport space to check against. There's no widget for this; it's a socket, so something upstream needs to actually produce a viewport reference to wire in - there's noObject_*node in this pack's schema whose job is obviously "give me a viewport."
Output: BPY_OBJ, passed through, matching the rest of this node family.
How to install it
Through ComfyUI Manager: search "avatar-graph-comfyui", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && python -m pip install -r requirements.txt
bpy needs Python 3.10.x specifically - nothing later. The README ships a prebuilt Python 3.10 ComfyUI zip for Windows for exactly this reason; on Mac/Linux, set up a dedicated conda env (conda create --name comfyui python=3.10) rather than reuse whatever you've already got. Restart with --enable-cors-header if you want the live avatar preview to talk to editor.avatech.ai - exports work fine without it.
Common issues & troubleshooting
Install trouble is almost always the Python version - dropping this pack into a 3.11/3.12 environment, which is the default on most current ComfyUI installs, will fail to import bpy at all. There's also a documented case of installing Avatar Graph on ComfyUI Desktop leaving the install badly broken (an oversized logo, a stray audio-permission popup) badly enough that a full reinstall didn't clean it up - test it in a spare, portable ComfyUI instance first if you're not already isolated on 3.10.
Practically speaking, this is the least likely node in the whole pack for a beginner to have a real use for: it needs an actual viewport reference wired in, which nothing else in this pack's node list obviously supplies, and even a successful check never leaves the node as a usable value. If you landed here trying to conditionally skip work based on what's visible on screen, this specific node isn't the tool - you'd need scripting elsewhere in the graph that actually exposes the result.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| viewportopt | viewport | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |