Category Archives: Scripts/Tools

Custom menu in 3ds Max

I prefer to have my custom tools attached to menu bars. Pretty much all apps have them unlike other UI features, shelves, toolbars, sidebars etc. So it’s a nice consistent place to put them.

This is how you build a custom menu on the main menu bar with maxscript. It is rebuilt every time 3ds Max starts up, making it easy to update and modify, locally or on a server to control lots of machines.

This file runs on startup, it loads the menu bar script, and the scripts ready to be attached to items on the menu.

This is the script that builds the custom menu. In this example it only adds one script, SRSave. This script was loaded (ready to be added to the UI) in the previous script.

That’s about all. For more info checkout menuMan in the maxscript help.

Nuke Python: Read Node File Path Replace

Here is a small snippet of code for Nuke using python.
It will loop through all the read nodes int he script, and will replace the any string ‘Shot_003’ with ‘Shot_002’ inside the ‘file’ knob (the path) by using a very simple regular expression.

Render Time Calculator

For a while I’ve had a render time calculator as a  google docs spreadsheet – and I was considering how I could share this around a bit. I realised after a while it would be interesting to try and just write this into a webpage with javascript – I haven’t done that before on a webpage. Javascript in Softimage, and in Photoshop yes! But not in on a webpage before.

Anyway hopefully it’s a helpful guide to predict some render times – I use it myself plenty!

Here is the old google docs version: Isn’t it ugly?

Photoshop Script: sr_SaveGroup

I’ve written a few handy photoshop scripts over the years and never got around to sharing them so I will try here and there.

I’ve used this, or variations of this script for years. To save out the various types of textures from one PSD, Diffuse, Glossiness, Bump, Specular, Reflection, Refraction Etc.

When you run the script it will save out a jpg based on the name of the PSD file and the GROUP you have selected.


Using groups like the example below. Running the script with the ‘Diffuse’ group selected will save out ‘Robot_Diffuse.jpg’ in the same location as the PSD file.

Also if there is a ‘Wire’ or ‘Wireframe’ layer at the top, it will be temporarily hidden during save.


Copy the script file into [photoshop install dir]/Presets/Scripts/ folder/.
And it will appear in File>Scripts -I’d recommend making a shortcut for it too from there.




3ds Max Maxscript Help: Snippets

Here is a list of practical examples for the syntax of scripting in 3ds Max with it’s internal language, maxscript. This isn’t a tutorial and HOWTO script, but more of a reference of how to format commands.

I’ll continue to update this post as I go on as it’s a resource for me as much as anyone else, let me know if there are any useful additions!

Note also that the indenting isn’t necessary but I think it’s a good habit (and I mostly use Python which requires it)







Macroscript loader

Useful to load at startup, points at an updateable script


System access

In windows…

LemonRender – Batch Renderer

As a Softimage user, I’m not given any kind of render manager software like the straight forward but useful application that is backburner. I’ve worked at many studios and used many render farms (including backburner) but some of the main ones are Royal Render, Deadline . Anyway these ones are can be quite complex, and if you start beta testing a renderer like VRay in Softimage, you can come up against issues. I’ve now found that while I wait for a new version of Deadline, Softimage 2013 isn’t supported either….. So I’ve gone back to using this wee batch rendering system I made last year.

It involves only a few elements:

  • a plugin/submitter for Softimage
  • a batch file that runs…..
  • the main Lemon Render Python script
  • a simple web interface (run by a simple web server)
From this though, I can print logs of my renders to see how long they have been taking, and queue up jobs. These are all just stored (from the submitter) in simple text files which I can later alter/delete etc.
At the moment there is no priority,  the only thing a user can do is pause jobs in the queue.
I’m sure I could easily write plugins for Maya/Max/Nuke too but have never gotten around to it.
If there is any interest in it then I may do so!


Softimage XSI Custom Menu

The easiest way to access your own, or third party scripts from the UI in Softimage XSI is creating a toolbar. With these you can simple drag & drop text from the script editor onto your own toolbar, then save that in your user or workgroup folders.
That is fine, but they don’t really have place to dock them to the layout.

Instead of that, my much preferred way is to create your own custom menu in the menu bar.

I recall not really finding much information of how to make these custom menus for XSI, the help file has never really provided much information, but the best way to start usually would be to make a custom property from the wizard.
Animate > Create > Parameter > Custom Property Wizard

This isn’t specifically for making a menu, but it creates a plugin script that you can then open and it may help you understand some of the concepts associated with a plugin.

(as it says in the old/not amazingly useful wiki here:

So to save you all that trouble, here is a basic custom menu template that you can easily use and adopt for your own menus.

The following code should be saved as a Python file (.py) in the Application/Data/Plugins directory.
I would always recommend creating your own workgroup which is software version independent, and others can connect to (potentially very useful for a custom menu where you might be sharing studio tools on a server)

You will see I have saved the version on the script file which aligns with the versioning in the script:

If you use these, XSI will always load the latest version.

I have commented in the example script where you should insert your own code – but if you use as is, it should display the example menu correctly.

I’m sure I had some good help/spying at their menus from Juan Brockhaus (nice website link I found here for him), Andy Nicholas and Peter Agg over the last couple of years in this area to thanks to them!

If you have any comments then ask below!

Nuke Custom Scripts Folder

Keeping custom stuff (scripts/menus/gizmos etc.) outside of an application’s own folder and into a custom folder such as on a server is useful for keeping your things organised, and potentially VERY importaly sharing between more than one user in a work environment.

Also I find it’s useful for backing up, instead of having to go and find lots of different application folders you need to keep, you can keep them all on the server.
I’ll probably use the ‘Workgroup’ quite often as that’s what it’s called in XSI, which is set up really well for this kind of business.

So for Nuke there is a ‘’ file that you can add paths to that nuke will check for scripts.
I’m not going to go into any great detail what it is for, but just what is needed to achieve the point of the post.

In windows, it’s in a folder like this (depending on Nuke version)

Instead of adding to that file, you can create your own blank ‘’ script in your user folder, this is much cleaner and is independent of Nuke versions.
You should create the file in a path similar to this:

Inside the file, all you need to do is add one line, telling Nuke where to pick up the scripts. Be careful to use ‘/’ instead of window’s ‘\’ which causes potential conflicts:

In my Nuke workgroup folder I have a few scripts which I’ll detail in a differnet post.
Namely there is:

  • – A custom menu in the menu bar.
  • – Contains my custom scripts which the menu references


I made this script when I discovered a decent way to clean a curve so that I could make a bike chain in ICE. There is an operator called ‘reparametrize’ but that doesn’t do the job fully.
Also I have attached my ICE Compound to distribute points along a curve but that’s not entirely what this is about in case that has problems 🙂

For CLOSED curves this seems to be working very well, OPEN curves are more trouble but I added something in so the script will close it for you and you have to do some manual work after.
All is explained in the video above!

If you don’t have a Workgroup outside of the installation dir and your user (which changes every version of XSI) then I would recomment creating one.

For any of those options, the “sr_CleanCurve” python script should be extracted to:
And “sr_DistributePointsOnCurve.1.4.xsicompound” goes into:
\XSI_Workgroup\Data\Compounds\ (create this folder if it doesn’t exist)

Please ask any questions here, also try me on twitter.