USD pinning does not freeze version=hero during Deadline renders

Hello all,

We are using Houdini with the AYON USD resolver and submitting a USD render sequence to Deadline.

The render scene contains several AYON references. When a reference uses version=hero, the generated *_pin.json maps it to a path inside /publish/.../hero/. If a new hero is published while the Deadline job is rendering, later frames appear to pick up the updated published versions, so the sequence changes during the same job.

With version=latest, the same pinning process maps the URI to a numbered path such as /v001/, and that reference stays stable.

Expected behavior: At job submission, pin version=hero to the specific published content that was hero at that moment, so every worker and frame uses the same version.

Questions:

  1. Is this the intended behavior of USD pinning, or is the /hero/ destination a bug?
  2. Is there a supported setting or workflow to freeze hero references to an immutable version for the duration of a Deadline job, while keeping version=hero in the artist’s working scene?
  3. If a code change is needed, should the pinning generator map the hero URI to its numbered source version, or is there another recommended way to preserve the exact hero USD and its nested dependencies?

thanks in advance for your help

Without testing I can confirm this is most likely the current behavior. What you’re describing, I can see the reasoning for it and from the notion of “pinning” may make more sense. Technically hero isn’t a dynamic endpoint (it’d always point to a singular hero that doesn’t move) and hence we never pinned it to an explicit version.

What you’re describing though, to pin hero to the current version at submission time does make sense but it also somewhat defeats the purpose of using hero versions to begin with? :slight_smile: Anyway, I’m not the oracle on hero versions (in production I dislike them myself) so I’d say opinions here come best from those who do use it. In this case I agree with your thought process and I’d argue we’d need a settings that says that the pinning should pin hero versions to their current version instead.

To make that work:

  • Add a setting to pin hero_to_real_version
  • When enabled, the pinning JSON would map it the hero version url to the current version = abs(hero.version) and then take that entities URL (because hero versions are the negative version of the real numbered version.
  • So yes, pinning generator should then map hero to the current numbered source version.

or is there another recommended way to preserve the exact hero USD and its nested dependencies?

I’m not sure what you’d lose by pinning the hero version to the numbered source version?