AttribDelete V2 — Click-to-Delete Attribute UI for Houdini

• 5 min read

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

Get AttribDelete V2

Installation

  1. Download sop_EMILSVFX.attribdelete.2.0.hdalc
  2. Drop it into your houdini21.0/otls/ folder (adjust for your Houdini version)
  3. If Houdini is already open: Assets → Install Asset Library → point to the file
  4. 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

HoudiniStatus
19.5Tested
20.xTested
21.xTested

Free to use, modify, share.