Nomad Link (Houdini): duplicated Link Out nodes share a mesh_id and overwrite each other

THE PLATFORM: Windows, etc
NOMAD APP VERSION: 2.9.29

Houdini 22.0.368, Windows. Two Nomad Link Out nodes, two different pieces of geometry — only one object ever arrives in Nomad. Each send replaces the previous one.

Repro

  1. Drop a Nomad Link Out, connect, Send to Nomad. Nomad acks and the node’s hidden meshid parm gets filled in.
  2. Copy that node (or copy the containing object) to make a second Out node on different geometry.
  3. Send from both.

The copy inherited the acked meshid, so both nodes address the same Nomad object and the second send replaces the first. Nothing in the UI shows this, since meshid and geoid are hidden parms.

Confirming it — Python Shell, one line:

import hou; [print(n.path(), "| meshid:", repr(n.evalParm("meshid")), "| geoid:", repr(n.evalParm("geoid"))) for n in hou.nodeType(hou.sopNodeTypeCategory(), "nomad_link_out").instances()]

In my scene both rows printed the same meshid. Clearing the parm on both nodes fixes it immediately — _mesh_id() falls back to the path-derived UUID, which is unique per node, and Nomad’s next ack assigns each one a fresh id:

import hou; [n.parm("meshid").set("") for n in hou.nodeType(hou.sopNodeTypeCategory(), "nomad_link_out").instances()]

Cause

In python/nomad_link/nodes.py:

def _mesh_id(node):
    return node.evalParm("meshid") or uuid.uuid5(ID_NAMESPACE, node.path()).hex

The path hash is unique per node, but the acked parm takes priority and copies right along with the node. _geometry_id has the same shape, so a duplicated geoid would make Nomad treat two nodes as instances of one geometry.

What I did locally

I have _mesh_id/_geometry_id check whether another Out SOP already carries the id and, if so, clear the parm and use the path hash — so it self-heals on the next send while a renamed node still keeps its Nomad object. It works, but the resolution order is arbitrary (the first of the pair to send is the one that gives up the id), so I’m not proposing it as the fix.

Clearing meshid/geoid in an OnCreated handler on the HDA seems more predictable — a duplicated node would never carry the id in the first place. Your call which way is right.

Worth noting tests/test_nodes.py can’t catch this: fake_hou.hou.nodeType returns None, so _instances() is always empty and any collision logic there is unexercised.

Great plugin otherwise — the live delta sync into a SOP network is excellent.

WIth the help of Claude :backhand_index_pointing_up: Sorry if using Ai for this kind of thing is frowned upon! I recently have switched from C4D and ZBrush over to Houdini and Nomad Sculpt! It’s AMAZING!!! Great work. I have consistent work where I need to send multiple meshes to Nomad from Houdini and ran into the geometry getting overwritten and used Claude to help troubleshoot while I was under a deadline.

Thank you!

Thanks for the report!

The houdini link was done (AI-vibe coded) by @mestela

I don’t know much about houdini but I tested the link and could replicate the issue.
The issue should now be fixed.

Nice one! Yeah, I just asked claude to follow the instructions in the nomad link repo, make al link for houdini, then i ran a few tests on my scenes until it looked correct in lops. I was pretty sure there was gonna be bugs. :slight_smile:

wow, good to know, well it works great other than that one issue of the geo getting replaced! Having the Houdini to Nomad Link is AMAZING!

WOW, that’s great! I’ll try the new version, Claude fixed it on my end as well but I wanted to report it anyhow. Really awesome, the link to Houdini is really fantastic!