Softimage free scripts and plugins.


I think it is good for everyone that we have a sticky thread for the great scripts and plugins that get posted here so we can all easily find what we are looking for and not have to hunt old threads.

Please post the links to the scripts\plugins you use or created with a name, short description and the link to where it can be downloaded.

Please do not have a discussion in this thread so we can keep it easy to browse.



Geometry Constraint Plug-In

A scripted operator that constrains an object’s position and (optionally) rotation to the surface of a polygonal mesh. Similar to the “Geometry Constraint” in Maya.

Latest Version
v1.2 (10/2/2009)



Shape Tools Addon

A set of scripted operators for splitting blend shapes using weight maps or symmetry. Useful for facial rigging and animation.

Latest Version
v1.0 (9/23/2009)



Inspired by ZV_Parent and various other plug-ins for Maya that creates an easy work flow for animators to add, deactivate, and remove constraints.

You can view a short demo and download the plug-in here:

Please let me know if there are questions, comments, or issues.

This plug-in is now functional for 6.5 >
Uninstall previous version, install new file downloaded at the same link.


This is just a simple script that I wrote in Python a while back to duplicate/clone objects along a curve. I wrote it when I was trying to learn python scripting in Softimage (I’m still learning). It’s always a great pleasure to break away from my usual modeling and texturing projects to do something different. Anyway, I hope you guys find it useful.

Installation: Copy this file to your plugins directory in your Workgroup or User directory (which ever you prefer) and restart Softimage.

Usage: On the MCP panel, goto Edit -> Dup_on_Curve. Select the object you wish to duplicate or clone then select the curve, and then click Get. Type in the number of duplicates/clones then click Duplicate or Clone.

Note: I think there is already a similar plugin for the same function but I think it’s only compiled for 32bit. So if you use 32 bit, it’s probably better to use that one. Another thing is that I’m more of an artist than a scripter, so this script is rather crude and simple in function so let me know if there’s any issues. And one last thing, you need to install and get python working on Softimage. :slight_smile:



It creates individual cluster center for every component selected,
and then it sets neutral pose for them.Useful for rigging.
Command can be found in right click menu, and EDIT tab.


// Create Multiple Cluster Centers Plugin
// Initial code generated by XSI SDK Wizard
// e.xecuted Thu Apr 2 03:09:14 UTC+0200 2009 by memag
// Tip: To add a command to this plug-in, right-click in the 
// script editor and choose Tools > Add Command.
// Tip: To get help on a callback, highlight the callback name
// (for example, "Init", "Define", or "e.xecute") and press F1.

function XSILoadPlugin( in_reg )
   in_reg.Author = "memag";
   in_reg.Name = "Create Multiple Cluster CentersPlugin";
   in_reg.Email = "";
   in_reg.URL = "";
   in_reg.Major = 1;
   in_reg.Minor = 0;

   //RegistrationInsertionPoint - do not remove this line

   return true;

function XSIUnloadPlugin( in_reg )
   var strPluginName;
   strPluginName = in_reg.Name;
   Application.LogMessage(strPluginName + " has been unloaded.",siVerbose);
   return true;

function Create_Multiple_Cluster_Centers_Init( in_ctxt )
   var oCmd;
   oCmd = in_ctxt.Source;
   oCmd.Description = "";
   oCmd.ReturnValue = true;

   return true;

function Create_Multiple_Cluster_Centers_e.xecute(  )

   Application.LogMessage("Create_Multiple_Cluster_Centers_e.xecute called",siVerbose);

var oProgressBar = XSIUIToolkit.ProgressBar ;
if (selection.count != 0)

  var objs = Selection.Count;
  for (i = 0; i < objs; i++)
      var component = Selection(0).SubComponent.ComponentCollection;
      for (i = 0; i < component.Count; i++)
        var sel = component(i);
        oProgressBar.Maximum = component.Count ;
   oProgressBar.Caption = "Creating Cluster Center for " + sel;
   oProgressBar.CancelEnabled = false ;
   oProgressBar.Visible = true;
          oProgressBar.Value =i;
        CreateClusterCenterWithNull(sel, 0)
   var selo = GetValue("SelectionList");
   SetNeutralPose(selo, siSRT, false);
   SetValue(selo+".null.primary_icon", 0, null);
   SetValue(selo+".null.shadow_icon",2, null);
   SetValue(selo+".null.shadow_scaleX", 0.4, null);
   SetValue(selo+".null.shadow_scaleY", 0.4, null);
   SetValue(selo+".null.shadow_scaleZ", 0.4, null);
   SetValue(selo+".null.shadow_colour_custom", true, null);
   SetValue(selo+".null.R", 0.717136, null);
   SetValue(selo+".null.G", 1, null);
   SetValue(selo+".null.B", 0.004, null);
   SetValue(selo+".Name", [sel]+" ClusterCenter "+(i+1));
          if ( oProgressBar.CancelPressed ) break ;
          oProgressBar.Visible = false ;
  logmessage ("Select some COMPONENTS !");

   return true;

function Create_Multiple_Cluster_Centers_Menu_Init( in_ctxt )
   var oMenu;
   oMenu = in_ctxt.Source;
   oMenu.AddCommandItem("Create Multiple Cluster Centers","Create_Multiple_Cluster_Centers");
   return true;


ET Rename, a very useful plugin written in Python that renames objects inside your scene with various options. Its compatible with version 6.0 and up.
You can get it here, I don’t have Softimage in front of me right now but I think you can get it by going to the Edit on the MCP.


JJ_Catmull is a rudimentary Catmull-Rom curve tool for XSI. Unlike the built in curve types, this plugin constructs a curve from selected Nulls and ensures that the curve passes through each null directly - unlike the control points of regular cubic and quadratic beziers. A Catmull-Rom spline has local control. This means that modifying one control point only affects the part of the curve near that control point. It can’t possibly match the functionality of in-built curve types but in certain circumstances it can be useful for rigging where you need a smooth, simple curve that always passes through specific points. For modeling tasks, the operator can evenly space points along the curve (unlike the parametric placement of points on the in-built curve types) which makes it useful for extrusions etc. where you might need regular spaced polygons.

-Create a smooth curve that passes through all control points;
-Tangent controls for the start and end points;
-‘Live’, even spacing of control points - by length or by no. of segments;

Get it here .


JJ_VectorSnap is a simple modeling utility written in Python to snap tagged points to a vector defined by two ‘picked’ points. It’s useful for quickly aligning rows of points or shearing them to a specific position. The script enables you to lock any of the axes so that movement is constrained or, alternatively, in non-locked mode will snap points to the nearest point on that vector. The script also has an optional ‘uniform’ command which spreads the points out uniformly along the length of the vector (between the two picked points). The script is intended to be complementary to Andy Nicholas’s excellent Taut plugin which works on edges.

-Quick and accurate way of shearing and aligning points to vectors;
-Can optionally spread points out uniformly;

Get it here.


JJ_SnapToPlane is a simple modelling utility to snap points to a ‘virtual’ infinite plane defined by a single polygon. The tool offers three distinct modes:

-Direct Snap - vertices travel directly to the plane across the shortest possible distance;
-Edge Directed Snap - vertices travel along the vector defined by an attached edge until they reach the plane;
-Single Edge Directed Snap - all vertices move in the direction of a single vector until they reach the plane;

You can found it here .


This XSI addon was formerly a VBScript operator but is now written in C++ for performance reasons.

Taut is a C++ modelling operator for straightening edges. It features an intelligent algorithm that searches your current selection for distinct lines, which allows multiple edges to be straightened at once. It also features three modes of operation that provide different ways of distributing the vertices along the lines. See the walk through and to download here .


hi im new to softimage im working on tree simulation ( strand tree plug in) , but in that im not getting the simulate tree & Move tree nodes , in some tutor they have showed by connecting simulate tree & Move tree nodes we can simulate the object , how to get simulate tree & Move tree nodes (is it other plug in ?)



I’d like to share a little pluggin I’ve been developing over the past year or so in between jobs. I call it The Grow Rig System, and it’s basically a simple auto rigger with a character mesh already attached. Sort of a combination of a rigging tool and a modeling tool.

Here’s a demo video:

It’s a very simple tool, definitely a work in progress. I’ve certainly seen more advanced rig builders out there, but I feel the ideas my system centers around are very strong.

There are many features I have in mind to add to this system but I must admit my scripting and rigging skills are limited. Any feedback

would be a great help, but what I’m really hoping for are any riggers and scripters who would be up for working with me to improve and add to it.

Here’s where to download the files:

So, if you’re interested in any capacity whatsoever, feel free to use it, test it, let me know what you think. And again, if you’re interested in working on it with me I’d love to hear from you.


-Chris Covelli


A free, customizable Quad Menu system for Softimage similar to that of 3dsmax and Mirai.
The main purpose is to give artists the ability to customize easily-accessible menus
exactly to their needs (e.g. filling them with tools they use most frequently).
Users coming from 3dsMax might find it useful too.

For download, documentation and videos visit


Hello Stefan, thanks, i worked with AliasStudio long ago and there was an excellent option in a menu like that when the scene had lots of objects. When cursor hit more than one object it listed all objects under the cursor in a menu like yours and made possible to select one. Do you think it is possible to achieve that with your menu?


Unfortunately, not easily so. This is not so much a limitation of QMenu, but rather of the Softimage SDK, which exposes simply no direct means of acquiring the objects under the mouse (selected or not). Also, there is no raycast function which could be used to test “manually”. There might be the option of writing custom display callbacks for the viewports, but that’s a bit drastic and beyond my current set of skills. If any one here knows how to do this, or can even send me a related piece of code on how to pull this off to reduce my R&D time I might look into it. But honestly, this is something Autodesk should provide out of the box (just like fully customizable Menus to begin with). :deal:


Thanks for explanation. :slight_smile:


I have just released the following tools for Softimage :

XSIGradient : gradient background for the viewport

XSIRuleOfThirds : draws a ‘Rule of Thirds’ grid over a camera

XSIEnvelope : A set of tools to help speed up the enveloping process

XSISelectionSets : An easy way to store and apply selection sets

All of which can be downloaded from

As a side note, Stefan, i have recently started dabling in CustomDisplayCallback code, i would be happy to send you the source code for the above plugins that use it as a reference point.

Having said that, off the top of my head i am not sure how to go about testing the area of the object in relation to the mouse position, but it certainly sounds like an interesting task!



Hi Michael!

Thanks for releasing those and also for providing decent help files and polishing - not always a given :applause:

As for display callbacks: I thought you’d be needing something related for the gradient viewport background when I saw your post at the mailing list. :slight_smile:

Somehow Softimage must already do some testing for objects under the mouse, otherwise the default right-click menu would not be case sensitive (it looks different when clicking over, say, an empty area on the screen vs. over an object). So it must be possible, unless it’s one of those black boxes again.

I really don’t know what functionality there is in the graphics sequencer and related departments that could be used, or if it’s even possible to make e.g. arbitrary OpenGL calls.

I remember, years ago, there was an example on xsiblog of such functionality by a guy who had programmed a tool to rapidly change the posture of a character by just clicking on the object/body part in the viewport and dragging the mouse.

Edit: I just found it ->

To my knowledge he never released it anywhere, but maybe he can be contacted and kindly asked for the source code? He also describes the methodology he used to get it to work (seems he used OpenGL calls to get the object under the mouse, so it must be possible), which sounds plausible. What I’d need to get this going is, ideally, a plugin, that exposes either a command I can call to query for objects under the mouse cursor, or even better, a plugin which stores names of, or references to, objects under the mouse in it’s UserData attribute (which it constantly updates, or at least updates on key_pressed, in case this is not a performance bottle neck), from where I can fetch it without even using a command (thus eliminating the possibility of said command to appear in the Edit menu under certain conditions). Any help highly appreciated.


Great that you both are looking into this.
This is what it looked like in 2006.