Deadline submit to specific Houdini version
28 Oct 2021
Deadline is setup in such a way it will render using a specific fixed version Houdini that is set in the plugin’s prefs. This can cause issues when forgetting to update deadline after installing newer builds or when you want to render using a specific one. And for legacy projects it can also be a good thing to be able to submit to deadline for some older version of Houdini, for example the exact version that was used to author the hip file. And besides Houdini itself, loading a specific version of Redshift or any other plugin can be required as well. This post will give a few pointers on how to set up in a flexible way.
Step 1: Make Houdini send it’s full version information when submitting
If you havent already make a “/custom” folder in your Deadline repo and copy the “/submisson/Houdini” and “plugin/Houdini” folders so we can customize them separately from the native Deadline files. (More about “/custom” folder )
You should end up with something like this:
Then edit “\DeadlineRepository10\custom\submission\Houdini\Main\SubmitHoudiniToDeadlineFunctions.py” and add these lines:
fversion= "FullVersion=%s.%s.%s\n" % ( ver[0], ver[1],ver[2] )
print("Sending FullVersion Info: "+ fversion )
fileHandle.write( fversion )
The end result looks should look like this, new lines are highlighted:
This will add a ‘FullVersion’ parameter to the plugin info data that is submitted to deadline, you can double check by inspecting the properties of a submitted job:
Step2: Making the workers use fullversion info to select the corresponding hython.exe
In “DeadlineRepository10\custom\plugins\Houdini\Houdini.py” is a function called “RenderExecutable” that returns the path to the, you guessed it, render executable. A path to hython.exe in the case of Houdini.
Just add these lines and leave the ‘xxx’ in there:
fullversion = self.GetPluginInfoEntryWithDefault( "FullVersion", "none" )
self.LogInfo( "fullversion: "+ fullversion )
if fullversion!="none":
houdiniExeList = houdiniExeList.replace( "xxx", fullversion )
These lines will replace any ‘xxx’ found in the list of possible hython.exe paths from the plugin config with the “fullversion” string from the plugin info data we added above.
And finally add the ‘xxx’ paths in the Houdini plugin settings:
You can also add extra non ‘xxx’ paths in there to default to a fixed version when there is no fullversion info send etc. If you now submit a job and inspect the deadline logs you would see something like this:
line 19 in the log is the output from the code we added in step 2 (see the self.LogInfo( "fullversion: "+ fullversion)
on line 98 )
Step 3: Load version specific items using expressions in the package files
And a quick tip to end with, if you are using packages to include 3th party additions to Houdini you can do some basic conditional expression in there. Take my redshift package’s json for example:
It includes a different redshift version for legacy projects that aren’t setup for the newer Redshift OCIO workflow that was added in v3.0.46. Also note the ‘$houdini_version’ tokens in there to automatically have Houdini load it’s correct plugin. All Houdini versions should work fine with this single json file provided here is actually a redshift plugin available for that version of Houdini.
(For info on how to install different Redshift versions side by side check here: https://www.patreon.com/posts/redshift-custom-23119166 )