Ok, I finally figured this all out.
When bootstrapping tk-houdini, there are some pre-requisites that must be met :
- TK_HOUDINI_TMP must be set
- TK_HOUDINI_TMP path must be added to HOUDINI_PATH (is this not anywhere in the docs or code docstrings? )
- you must set HOUDINI_NO_DEFAULT_SHELF_TOOLS=1 environment variable to prevent the minutes of delay when launching Houdini.
What I don’t understand is that it’s only when SG is bootstrapped that houdini builds a menu file in the temp location. This menu file creation is VERY slow. If you clear your houdinig temp dir, you’ll see the file slowly get generated with a tmp name : hfs113814-0.tmp
Why does this file only get generated when SG is bootstrapped?
If I set HOUDINI_NO_DEFAULT_SHELF_TOOLS=1, will that disable some SG features (eg the shogtun PDG nodes)?
The contents of this file is :
<?xml version="1.0" encoding="UTF-8"?>
<shelfDocument>
<!-- This file contains definitions of shelves, toolbars, and tools.
It should not be hand-edited when it is being used by the application.
Note, that two definitions of the same element are not allowed in
a single file. -->
<tool name="shop_gen_geometry" label="Generic geometry" icon="SHOP_geometry">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_geometry</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Procedural</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_geometry')]]></script>
<keywordList>
<keyword>Mantra</keyword>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_photon" label="Generic photon" icon="SHOP_photon">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_photon</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Photon</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_photon')]]></script>
<keywordList>
<keyword>Mantra</keyword>
</keywordList>
</tool>
<tool name="shop_rsl_vopshaderclass" label="RSL Shader Class Builder" icon="SHOP_material">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/rsl_vopshaderclass</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Co-Shader</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'rsl_vopshaderclass')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_displace" label="Generic displace" icon="SHOP_displace">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_displace</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Displacement</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_displace')]]></script>
<keywordList>
<keyword>Mantra</keyword>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_shadow" label="Generic shadow" icon="SHOP_shadow">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_shadow</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Light Shadow</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_shadow')]]></script>
<keywordList>
<keyword>Mantra</keyword>
</keywordList>
</tool>
<tool name="shop_gen_surface" label="Generic surface" icon="SHOP_surface">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_surface</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Surface</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_surface')]]></script>
<keywordList>
<keyword>Mantra</keyword>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_interior" label="Generic interior" icon="SHOP_fog">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_interior</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Interior</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_interior')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_light" label="Generic light" icon="SHOP_light">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_light</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Light</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_light')]]></script>
<keywordList>
<keyword>Mantra</keyword>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_class" label="Generic class" icon="SHOP_material">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_class</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Co-Shader</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_class')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_fog" label="Generic fog" icon="SHOP_fog">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_fog</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Atmosphere</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_fog')]]></script>
<keywordList>
<keyword>Mantra</keyword>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_coshader" label="Generic coshader" icon="SHOP_coshader">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_coshader</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Co-Shader</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_coshader')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_gen_image3d" label="Generic image3d" icon="SHOP_image3d">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_image3d</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Image 3D</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_image3d')]]></script>
</tool>
<tool name="shop_gen_generic" label="Generic generic" icon="SHOP_generic">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/gen_generic</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Generic</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'gen_generic')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="shop_rsl_vopstruct" label="RSL Struct Builder" icon="SHOP_material">
<toolMenuContext name="viewer">
<contextNetType>SHOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Shop/rsl_vopstruct</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<toolSubmenu>Co-Shader</toolSubmenu>
<script scriptType="python"><![CDATA[import shoptoolutils
shoptoolutils.genericTool(kwargs, 'rsl_vopstruct')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="vop_CVEX_shader" label="CVEX Encapsulated Shader" icon="VOP_CVEX_shader">
<toolMenuContext name="viewer">
<contextNetType>VOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Vop/CVEX_shader</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<script scriptType="python"><![CDATA[import voptoolutils
voptoolutils.genericTool(kwargs, 'CVEX_shader')]]></script>
<keywordList>
<keyword>Mantra</keyword>
</keywordList>
</tool>
<tool name="vop_buildarray" label="Build Array" icon="VOP_buildarray">
<toolMenuContext name="viewer">
<contextNetType>VOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Vop/buildarray</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<script scriptType="python"><![CDATA[import voptoolutils
voptoolutils.genericTool(kwargs, 'buildarray')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="vop_ris_RSLmaterial" label="RSL Material" icon="VOP_ris_RSLmaterial">
<toolMenuContext name="viewer">
<contextNetType>VOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Vop/ris_RSLmaterial</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<script scriptType="python"><![CDATA[import voptoolutils
voptoolutils.genericTool(kwargs, 'ris_RSLmaterial')]]></script>
<keywordList>
<keyword>RenderMan</keyword>
</keywordList>
</tool>
<tool name="vop_for" label="For Loop" icon="VOP_for">
<toolMenuContext name="viewer">
<contextNetType>VOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Vop/for</contextOpType>
</toolMenuContext>
<toolSubmenu>Digital Assets</toolSubmenu>
<script scriptType="python"><![CDATA[import voptoolutils
voptoolutils.genericTool(kwargs, 'for')]]></script>
</tool>
<tool name="top_pdg_downloadfile" label="Download File" icon="TOP_downloadfile">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_downloadfile</contextOpType>
</toolMenuContext>
<toolSubmenu>Files</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_downloadfile')]]></script>
</tool>
<tool name="top_pdg_partitionbyrange" label="Partition by Range" icon="TOP_partitionbyrange">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_partitionbyrange</contextOpType>
</toolMenuContext>
<toolSubmenu>Partitioner</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_partitionbyrange')]]></script>
</tool>
<tool name="top_pdg_partitionbyattribute" label="Partition by Attribute" icon="TOP_partitionbyattribute">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_partitionbyattribute</contextOpType>
</toolMenuContext>
<toolSubmenu>Partitioner</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_partitionbyattribute')]]></script>
</tool>
<tool name="top_pdg_renderifd" label="Render IFD" icon="TOP_renderifd">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_renderifd</contextOpType>
</toolMenuContext>
<toolSubmenu>Render</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_renderifd')]]></script>
</tool>
<tool name="top_pdg_usdimportprimitives" label="USD Import Primitives" icon="TOP_usdimportprimitives">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_usdimportprimitives</contextOpType>
</toolMenuContext>
<toolSubmenu>USD</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_usdimportprimitives')]]></script>
</tool>
<tool name="top_pdg_shotgundownload" label="Download" icon="TOP_shotgundownload">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_shotgundownload</contextOpType>
</toolMenuContext>
<toolSubmenu>Shotgun</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_shotgundownload')]]></script>
</tool>
<tool name="top_pdg_shotgunupload" label="Upload" icon="TOP_shotgunupload">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_shotgunupload</contextOpType>
</toolMenuContext>
<toolSubmenu>Shotgun</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_shotgunupload')]]></script>
</tool>
<tool name="top_pdg_partitionbytile" label="Partition by Tile" icon="TOP_partitionbytile">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_partitionbytile</contextOpType>
</toolMenuContext>
<toolSubmenu>Houdini</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_partitionbytile')]]></script>
</tool>
<tool name="top_pdg_ropfetch" label="Rop Fetch" icon="TOP_ropfetch">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_ropfetch</contextOpType>
</toolMenuContext>
<toolSubmenu>Houdini</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_ropfetch')]]></script>
</tool>
<tool name="top_pdg_topfetchinput" label="Top Fetch Input" icon="TOP_topfetchinput">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_topfetchinput</contextOpType>
</toolMenuContext>
<toolSubmenu>Houdini</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_topfetchinput')]]></script>
</tool>
<tool name="top_pdg_geometryimport" label="Geometry Import" icon="TOP_geometryimport">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_geometryimport</contextOpType>
</toolMenuContext>
<toolSubmenu>Houdini</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_geometryimport')]]></script>
</tool>
<tool name="top_pdg_fileremove" label="File Remove" icon="TOP_fileremove">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_fileremove</contextOpType>
</toolMenuContext>
<toolSubmenu>Files</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_fileremove')]]></script>
</tool>
<tool name="top_pdg_invoke" label="Invoke" icon="TOP_invoke">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_invoke</contextOpType>
</toolMenuContext>
<toolSubmenu>Houdini</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_invoke')]]></script>
</tool>
<tool name="top_pdg_pythonscript" label="Python Script" icon="TOP_pythonscript">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_pythonscript</contextOpType>
</toolMenuContext>
<toolSubmenu>Python</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_pythonscript')]]></script>
</tool>
<tool name="top_pdg_filterbyexpression" label="Filter by Expression" icon="TOP_filterbyexpression">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_filterbyexpression</contextOpType>
</toolMenuContext>
<toolSubmenu>Utility</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_filterbyexpression')]]></script>
</tool>
<tool name="top_pdg_error" label="Error" icon="TOP_error">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_error</contextOpType>
</toolMenuContext>
<toolSubmenu>Utility</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_error')]]></script>
</tool>
<tool name="top_pdg_partitionbynode" label="Partition by Node" icon="TOP_partitionbynode">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_partitionbynode</contextOpType>
</toolMenuContext>
<toolSubmenu>Partitioner</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_partitionbynode')]]></script>
</tool>
<tool name="top_pdg_partitionbyframe" label="Partition by Frame" icon="TOP_partitionbyframe">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_partitionbyframe</contextOpType>
</toolMenuContext>
<toolSubmenu>Partitioner</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_partitionbyframe')]]></script>
</tool>
<tool name="top_pdg_partitionbycombination" label="Partition by Combination" icon="TOP_partitionbycombination">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_partitionbycombination</contextOpType>
</toolMenuContext>
<toolSubmenu>Partitioner</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
toptoolutils.genericTool(kwargs, 'pdg_partitionbycombination')]]></script>
</tool>
<tool name="top_pdg_wedge" label="Wedge" icon="TOP_wedge">
<toolMenuContext name="viewer">
<contextNetType>TOP</contextNetType>
</toolMenuContext>
<toolMenuContext name="network">
<contextOpType>Top/pdg_wedge</contextOpType>
</toolMenuContext>
<toolSubmenu>Data</toolSubmenu>
<script scriptType="python"><![CDATA[import toptoolutils
<truncated>