Skip to content

Python example scripts

Used to untangled networks

python
import hou
OFFSET = -1.0
# Process a single node
def create_null_merge(node : hou.Node, base_name : str):
node : hou.Node
node_name: str = node.name()
node_path : str = node.path()
node_position = node.position()
root: str = node_path[:node_path.rfind("/")]
null_node : hou.Node = hou.node(root).createNode("null")
null_pos : hou.Vector2 = hou.Vector2(node_position[0], node_position[1] + OFFSET)
null_node.setPosition(null_pos)
null_node.setInput(0, node)
null_node.setName(base_name, unique_name=True)
merge_node :hou.Node = hou.node(root).createNode("object_merge")
new_offset = OFFSET*2
merge_node_pos : hou.Vector2 = hou.Vector2(node_position[0], node_position[1] + new_offset)
merge_node.setPosition(merge_node_pos)
merge_node_name : str = f'merge_{base_name}'
merge_node.setName(merge_node_name, unique_name=True)
rel_path : str = merge_node.relativePathTo(null_node)
merge_node.parm("objpath1").set(rel_path)
# Main
nodes = hou.selectedNodes()
if (len(nodes) == 0):
hou.ui.displayMessage("Please select a node")
exit()
input : tuple = hou.ui.readInput("Enter Null node", initial_contents="Node name")
base_name: str
base_idx : int
base_idx, base_name = input
if base_name == "":
hou.ui.displayMessage("Empty name!")
exit()
print(f'Using {base_name} for null node')
for node in nodes:
create_null_merge(node, base_name)
print("Done")

Reference: Step-by-Step Guide: How to Place Nodes in Houdini with Python