AttribDelete V2 — Click-to-Delete Attribute UI for Houdini
Houdini’s built-in attribute delete SOP makes you type attribute names separated by spaces. That’s fine when you’re deleting one known attribute. It gets annoying when you’re cleaning up a mesh after a simulation, a VDB convert, or a boolean — you end up with a dozen attributes you didn’t ask for, half of which have names you have to look up in the geometry spreadsheet first.
AttribDelete V2 solves this by reading all the attributes on the input and showing them as clickable buttons.
What It Does
- Connects to any SOP output
- Reads all attributes at cook time — Point, Vertex, Prim, Detail
- Displays each attribute as a toggle button:
[ ]= keep,[x]= delete - Cook deletes everything marked
[x] - Disconnect the wire → buttons clear automatically (no stale state from a previous node)
- Negate mode — flip the logic: keep selected attributes, delete everything else
- Show/hide attribute classes to cut visual noise
- Works correctly with multiple copies of the node in the same network — each instance tracks its own selection independently
Download
Installation
- Download
sop_EMILSVFX.attribdelete.2.0.hdalc - Drop it into your
houdini21.0/otls/folder (adjust for your Houdini version) - If Houdini is already open: Assets → Install Asset Library → point to the file
- Find it in the Tab menu under
EMILSVFX
How It Works — Technical Notes
Per-instance state via hou.Node.cachedUserData()
The button states (kept/deleted) need to persist per node instance, not globally. Houdini’s cachedUserData() and setCachedUserData() store arbitrary Python objects on a node during the session — no serialisation needed. This is separate from userData(), which is saved to disk in the HIP file but requires string values. cachedUserData accepts any Python object, so the selection set is stored directly as a set of attribute name strings.
Auto-refresh on wire connect/disconnect
Houdini fires hou.nodeEventType.InputDataChanged when the input connection changes. The HDA catches this event and re-queries the input geometry. If there’s no input, the button list empties. If a new node is connected, the list repopulates and the previous selection is cleared — so you never see stale buttons from a prior connection.
Negate mode
Internally the cook logic switches between two modes:
- Normal: delete the union of
selected_attrs - Negate: delete
all_attrs - selected_attrs
Both paths call the same underlying attribute delete routine; only the set passed to it differs.
Per-class visibility toggles
Each attribute class (Point, Vertex, Prim, Detail) has a separate toggle in the UI. Hidden classes are still tracked in state — toggling visibility back on restores the previous selection for that class. The visibility state is also stored in cachedUserData.
Compatibility
| Houdini | Status |
|---|---|
| 19.5 | Tested |
| 20.x | Tested |
| 21.x | Tested |
Free to use, modify, share.