Houdini TOPs automations

OK, that’s definitely helpful.

I guess what we would be interested in is some sort of AYON Create → Houdini TOPs options that could control the publish node (possibly with TOPs variables). It could be something like “here are 55 building variants that we’ve asked for in the project” or some tray publishing version like “here are 33 variants for the pecan tree item for this library project.”

There’s also the scenario of “here are a bunch of fbx files with textures that need to be published as USD files for a library.” Bane of my existence but way nicer with TOPs automation.

Is that how other people are thinking about automation in Houdini? How does that fit into AYON world? Does this already exist, and I haven’t gotten there yet?

There have been some prototypes with TOPs - but nothing is out there in the open in a way that it’s merged into the main branch.

There’s currently a myriad of prototypes being investigated:

  1. A generic AYON Publish ROP. A ROP, that will consider its direct inputs to be representations to a product and will then publish the product using the expected files of the input ROPs, which could be any Alembic ROP, USD ROP. That work is being done here: AYON Publish ROP: Generic publish ROP in `/out` by Lypsolon · Pull Request #122 · ynput/ayon-houdini · GitHub.

Technically this ROP could be used in a TOPS network with the input attributes for the target product type and variant updated by the TOPs network as it renders. Like using TOPs variables assigned to some of its parameters.

  1. Being able to make any ROP node ‘publishable’ by imprinting custom attributes into it. Which is here: Houdini: Publish any ROP node (Generic Creator) by BigRoy · Pull Request #2 · ynput/ayon-houdini · GitHub (But I have a feeling a lot of this may be superseded by the dev done in point 1.)

  2. Some TOPs examples were once drafted as a “Dynamic Runtime Creator” which could be used as a means to create ‘runtime instances’ just for publishing them. Some of that prototype can be found here: Publishing: Low-level dynamic runtime instance creator by BigRoy · Pull Request #691 · ynput/ayon-core · GitHub

  3. There is work being done on pinpointing an improved publishing API at the AYON core - which could make it easier to ingest it anywhere without conforming to the usual required needs of a host integration. Being able to just say “this file (or set of files) is something I want to publish” with a few lines of code would make e.g. a great entry point for TOPs. The tricky thing there is that we have an ecosystem of ‘validations’ and ‘secure consistent publishes’ and are investigating how much we should let go to support simple API for these free-form publishes or whether there’s need (and possibility) to still allow those to conform to the regular validations without getting in the way. So that even if you publish a model through TOPs it still adheres to the rules of a model product type for example. I’m not sure where to link best to for this point though. :slight_smile:

Nonetheless - a lot of these are investigations and prototypes of what could serve the Houdini users best in the long run. As such, any examples you could set up - even if almost like a node-based ‘pseudocode’ of how you’d like it to work or ideas you have are more than welcome.

However, likely best suited for a separate thread than this one on here :wink: We might even want to separate your post and my reply into the spun off thread then to give it a clear topic title here.

@mustafa_jafar should we separate? and did you have anything to bring to the table here?

1 Like

Let me share my 2 cents/ summarizing @BigRoy’s notes.

  1. Generic AYON Publish ROP: Publish output files of the input nodes.
    image
  2. Make any ROP publishable: Adds Extra tab with AYON parameters and a publish button.
  3. Low Level publishing API: Personally, This one has two meanings as shown in point 3 and 4 above,
    • Dynamic Runtime Creator: Publishing from code pyblish way which just runs the AYON publish workflow from code. (you still need to create publish instances and publish through pyblish api which runs the pipeline plugins, this not only runs the validations but also keep the current features e.g. extract review will still work with render instances.) I like to think of it like using tray publisher but from code.
      Anyways, here’s we used it in TOPs.

    • Low Level AYON publish library: which as far as I can tell is only about registering the files in the DB and move the files to their publish location with the proper naming. this logic lives in the pipeline plugin integrate.py which uses ayon_api.operations.OperationsSession to register the files.

Thanks for this, both of you. I’m trying to understand the Houdini and ingest/editorial sides of the process which feel more untamed by their nature. I appreciate the primer and will hang out in the PRs more often.

We currently have a TOPs setup that creates USD files, thumbnails, proxies, and turntables and dumps them to Das Element. I think the Dynamic Runtime example will work well within this setup. I’ll let you know what I run into and share my results.

Thanks again!

1 Like