Distributing Shelf Tools

   7263   9   2
User Avatar
Member
319 posts
Joined:
Offline
Hello all,

I have a question about distributing shelf tools. Say you have a few simple tools on a custom shelf written in Python and you want to make them available to be people to download from the web. The simplest way I can see is to save the shelf into a .shelf file, say custom_tools.shelf. This is fine, but what is the best way of making each tool available for download individually? The only way off the top of my head that I can think of is:-

a) Make individual .shelf files for each tool. This is not preferable to me as this would result in a new shelf for each tool (or am I wrong?). If each tool was saved to a .shelf file of the same name, I am assuming when installing the tools one tool would replace another rather than being appended to the tools already present in the shelf?

b) Make a standard digital asset with a null inside and embed the tool into that. But this would create a node each time the tools is used, which isn't what I want either for a tool which is very simple and purely code based (or am I wrong about this too?!)

I'm sure there is something simple I don't know (distributing tools is not something I do very regularly at all!), any help would be great.

Thanks!

Dean.
User Avatar
Member
1908 posts
Joined: Nov. 2006
Offline
I'd suggest going the way of each tool in a .shelf file with the same name to make things easier. This is how I have it for my website.

There are pros and cons to this however. This doesn't mean a new shelf for each tool. A .shelf file can have two purposes, defining one or more tools and/or defining shelves/shelf layout. The upside is flexibility and such, but the downside is that you don't really get control of the tools placement on a specific shelf. If I release a tool I can add shelf layout tags to the file but there's no way to append to a shelf, only absolute layout. Basically everyone who downloads it has to add it to the shelf on their own. The other option is including a separate .shelf file that lays out things, but then if you don't have all the tools it's trying to layout then you just get useless and missing tools on your shelf.

The digital asset idea is also valid though and it doesn't necessarily have to create a node. If you were to create a digital asset you can just remove the default tool code that actually creates the asset and really make it do whatever you want. It doesn't need to actually create a node if you don't want it to.

There's really no super easy way to distribute tools but it's not too bad either. Ideally there would be a way to tell a tool to append itself to an existing shelf or create it if it's not already there. However this is contrary to the fact Houdini likes to save the absolute layout of any shelf that is not stock.
Graham Thompson, Technical Artist @ Rockstar Games
User Avatar
Member
319 posts
Joined:
Offline
Hey Graham,

Thanks for the info. I'm surprised there is seemingly no good way to distribute singular shelf tools.

I'm a little confused at your suggestion of each tool in its own .shelf file with the same name. Won't this mean that the last .shelf file to be read by houdini on startup will be the only one to be shown in the shelf?

Or do you mean provide all the tools in one .shelf file? Like a suite of tools?
User Avatar
Member
1908 posts
Joined: Nov. 2006
Offline
My bad, I meant to say the file should be named the same as the tool.

For example, I have a Cone tool named “sop_cone” that is defined in sop_cone.shelf for instance.
Graham Thompson, Technical Artist @ Rockstar Games
User Avatar
Member
319 posts
Joined:
Offline
Ah, I see, that makes more sense.

Thanks!
User Avatar
Member
319 posts
Joined:
Offline
Ah, I see, that makes more sense.

Thanks!
User Avatar
Member
133 posts
Joined: July 2005
Offline
Hey Guys:

It seems like this is a topic that I'm running into, as well. The .shelf file can serve many purposes, but can also be split out to define the different items.

* Shelf Set
* Shelf Tab
* Shelf Tool

To make distribution easier, I'm appending the ‘kind’ to the end of the filename.
* <flename>_set.shelf
* <filename>_tab.shelf
* <filename>_tool.shelf

The set contains references to separate _tab files. The _tab files contain references to separate _tool file. Each tool is it's own _tool file.

Editing these becomes a doozy, though. I'm currently having the problem where if I want to add a new tool to a tab called ‘foo_tab.shelf’, it automatically updates my ‘default.shelf’ in my home dir and not the ‘foo_tab.shelf’! The ‘Save To’ doesn't match the file that's being read.

Has anyone found a good workaround for this?
Francisco Rodriguez
Effects Animator | Walt Disney Animation Studios
User Avatar
Member
2199 posts
Joined: July 2005
Online
I never did understand why shelves were implemented like this, it's so non-houdini. Just where you need proceduralism most it gets left out, so annoying.
The trick is finding just the right hammer for every screw
User Avatar
Member
7025 posts
Joined: July 2005
Offline
Agreed, trying to use Shelves in a studio is IMO a bit of a nightmare… it seems like they were designed for a single home user
User Avatar
Member
133 posts
Joined: July 2005
Offline
I agree. There's so much potential there, but they are implemented as an after-though, it feels. Try adding this to a versioning system and you're in for a bumpy ride!

Hey Peter!
Francisco Rodriguez
Effects Animator | Walt Disney Animation Studios
  • Quick Links