LOPs - PY - delete hidden instance

import hou
from pxr import Usd, UsdGeom, Vt, Gf

# Get current LOP node and stage
node = hou.pwd()
stage = node.editableStage()
primpath_path = node.parm("instpath").eval()
instancer_prim = stage.GetPrimAtPath(primpath_path)

if instancer_prim and instancer_prim.IsValid():
# Get specific attributes
attributes = {
"protoIndices": Vt.IntArray,
"positions": Vt.Vec3fArray,
"orientations": Vt.QuathArray,
"scales": Vt.Vec3fArray,
}
invisible_ids_attr = instancer_prim.GetAttribute("invisibleIds")
invisible_ids = set(invisible_ids_attr.Get() or []) if invisible_ids_attr else set()
# Process hardcoded attributes
for attr_name, vt_type in attributes.items():
attr = instancer_prim.GetAttribute(attr_name)
if attr:
values = attr.Get() or []
attr.Set(vt_type([values[i] for i in range(len(values)) if i not in invisible_ids]))
# Process primvars dynamically
for attr in instancer_prim.GetAttributes():
attr_name = attr.GetName()
if attr_name.startswith("primvars:"):
attr_value = attr.Get() or []
if isinstance(attr_value, (Vt.IntArray, Vt.FloatArray, Vt.Vec3fArray, Vt.QuathArray)):
attr.Set(type(attr_value)([attr_value[i] for i in range(len(attr_value)) if i not in invisible_ids]))
# Clear invisibleIds
if invisible_ids_attr:
invisible_ids_attr.Set(Vt.Int64Array([]))
#print(f"Removed {len(invisible_ids)} invisible instances and updated all primvars.")