On this page

Overview

You can create a named “bundle” of nodes and use that name prefixed with a @ sign (for example, @lights) to stand for the contents of the bundle in any parameter that accepts a list of nodes.

Tip

Bundles were originally created to help with light linking. However, the current recommended way to do automatic light linking is to use categories, which are work through tagging rather than explicitly building lists of nodes.

Bundles may still be useful in certain circumstances.

The bundle list shows all bundles in the current scene. Bundles are groups of nodes, potentially from different networks. Bundles let you refer to a group of nodes by name instead of listing them explicitly. Bundles are especially useful for light linking.

To use a bundle anywhere Houdini expects a list of nodes by using @‹bundle. For example, if you have a bundle named keylights, you can use @keylights to refer to it in a light mask.

Bundles will only show in choice menus when the filter is set appropriately. For example, for a choice menu that only accept objects (such as Candidate Objects in a ROP), the filter in the bundle needs to be set to Geometry Only.

Normal (manual) bundles

You can set the contents of normal bundles by dragging nodes onto the bundle in the bundle list pane or by using the toolbar buttons (see below).

To...Do this

Create a new bundle

Choose Bundle ▸ New Bundle, or click New Bundle in the toolbar.

Create a bundle from the current selection

Right-click the network editor background and choose Add ▸ Add bundle.

Make a bundle only able to contain certain types of nodes

Select the bundle in the list on the left and use the Filter menu at the bottom.

Add nodes to a bundle

Drag the node(s) from a network editor and drop it on the bundle name in the list on the left.

or

  1. Select the bundle in the list on the left.

  2. Select the node(s) in the network editor, then click Add selected in the toolbar.

Remove a node from a bundle

  1. Select the bundle in the list on the left.

  2. The list on the right shows the contents of the bundle. Select the node you want to remove from the list on the right and choose Edit Contents ▸ Remove or press Delete.

or

  1. Select the bundle in the list on the left.

  2. Select the node(s) you want to remove in the network editor, then click Remove selected in the toolbar.

View and edit the flags of nodes in a bundle

  1. Select the bundle in the list on the left.

  2. The list on the right shows the contents of the bundle. The columns to the right of each node name show the state of the node’s Selectable, Display, Bypass, and Template flags (if the node has those flags).

  3. Click in the columns to toggle the flags for individual nodes, or use the buttons on the toolbar to toggle the flags for all nodes in the selected bundle.

Rename a bundle

Click the bundle’s name in the list on the left.

Duplicate an existing bundle

Select the bundle in the bundle list pane and choose Bundle ▸ Duplicate.

Merge the contents of multiple bundles into a single bundle

Select the bundles you want to merge in the bundle list pane and choose Bundle ▸ Merge.

Delete a bundle

Select the bundle in the bundle list pane and choose Bundle ▸ Delete.

Convert Normal Bundle to Smart Bundle

Select the bundle in the bundle list pane and choose Bundle ▸ Convert To Smart Bundle.

Toolbar

Creates a new bundle.

Creates a new smart bundle (see below).

Set the contents of the displayed bundle to the current selection.

Adds the current selection to the displayed bundle.

Removes the current selection from the displayed bundle.

Turns the select flag on or off for all nodes in the bundle that have the flag.

Turns the display flag on or off for all nodes in the bundle that have the flag.

Turns the bypass flag on or off for all nodes in the bundle that have the flag.

Turns the template flag on or off for all nodes in the bundle that have the flag.

Turns the expose flag on or off for all nodes in the bundle that have the flag.

Selects the contents of the displayed bundle.

Adds the contents of the displayed bundle to the current selection.

Removes the contents of the displayed bundle from the current selection.

Smart bundles

Normally you define the contents of bundles by dragging nodes onto the bundle in the bundle list pane. However, you can also define smart bundles. These are like smart playlists in iTunes: they automatically include all nodes that match a pattern you define.

To...Do this

Create a smart bundle

Choose Bundle ▸ New Smart Bundle, or click New Smart Bundle in the toolbar.

Edit a smart bundle’s matching pattern

Double-click the smart bundle’s icon.

Nodes whose paths match this pattern will be put into the bundle. As nodes are created or deleted, the contents of the bundle update automatically.

You can also use a space-separated list of patterns, in which a node will be included if its path matches all the patterns.

Convert a smart bundle to a normal bundle

  • Select the smart bundle in the list on the left and choose Bundle ▸ Convert to Normal Bundle.

  • If you manually edit the contents of a smart bundle (by adding or removing nodes), Houdini will convert the bundle into a normal bundle.

Smart bundle patterns

  • Use * to match any string.

  • Use ? to match any single character.

  • Use ^ to match only if the following pattern doesn’t match.

  • Use % to match anything up to but not including the next /

  • Use ( , | , and ) to match any of the | separated strings you specify.

  • Patterns that don’t contain a slash will match any node where the pattern matches the node’s name.

  • Putting a star at the end of a pattern, e.g. /obj/model*, will match nodes under /obj/ whose names start with model, and any of their children, because * matches slashes (/) in the path.

    To match nodes whose names start with model but not their children, use the compound pattern: /obj/model* ^/obj/model*/*. The ^ in front of the second pattern means to not include nodes matching /obj/model*/*.

Example Smart Bundle Patterns

/obj/%

Match any nodes at the object level, but none of their children.

/obj/node(12|13|14)/child

Match the nodes with any of the following paths:

/obj/node12/child, /obj/node13/child, obj/node14/child

/obj/*/child

Match any node called “child” that is a subchild of obj. (i.e. * will match anything in between “/obj/” and “/child”)

Adapting to categories

It’s possible through some scripting to use the names of the bundles an object belongs to as category names.

Try putting the following function in the Python session module (Windows ▸ Edit Python Source).

def bundleList():
    node = hou.pwd()
    bundles = []
    for b in hou.nodeBundles():
        if b.containsNode(node):
            bundles.append(b.name())
    return ' '.join(bundles)

Then put pythonexprs('hou.session.bundleList()') in the Categories parameter of geometry nodes. You should have the bundle names showing up as categories for your objects.

Panes

General

Animation

Rendering

Advanced

Other