Mash - Mainframe's Maya Nodes for Motion Design


Briefly, it’s a set of tools i stumbled upon which make Maya a little more useful for doing
mograph style animation. It’s actually mainframe’s inhouse toolset for motion design and it runs on top of SOUP. Been playing around with it and i really like what they’ve done.
And more importantly, they are giving it away for free.


Hmmm… nodes!


Thanks for posting this, I wasn’t sure it was worthy of being put on the news page :wink:

Hope you find it useful, let me know if you have any ideas for improvements etc., etc.

Cheery ta!


These tools are amazing, mograph at the palm of your hand :slight_smile:


Hey Ian.

Thank you and your team for this. It’s a huge timesaver, plus, for a ton of things
i don’t need to go out to other packages and try to export that back into maya.

Will let u guys know if i get any ideas for improvements. Hope u’ll keep supporting this.



Aha, very nice!
Setup time for goal driven animations and other more complicated math ops look like a breeze to setup. Thanks again.


looks amazingly usefull!! thanks a lot for that and for sharing it with us.
Will test it soon in a project I have!


Very cool. One improvement that I can think of is custom curves, like the bias ramp, for each attribute that could use it, for example amp x, y and z. Sure, you can use one node for each axis but it would be nice to have stuff clean.

Also, maybe a delete button and/or a disable button on the nodes? As it is now, I get random crashes when I delete a node in the middle of a network.


Thanks for the feedback!

So do you mean, for example, that the distribute node would have 3 ramps and not one? One for Distribute X, one for Distribute Y, and one for Distribute Z?

Binning nodes is slightly tricky, are you deleting the nodes using the ‘Bin’ shelf button?

If you select the node in the node editor, and click ‘bin’ on the MASH shelf, the node should be deleted and the surrounding nodes re-connected so that everything still works. It’s not fool proof, but it works most of the time.

Thanks again,

Edit: I’ve also started adding ‘enable’ checkboxes to the nodes.


Sweet! Going to try it out A.S.A.P!


ive been playing with this a bit too…overall very positive vibes for this.

would be nice to have recursive distribute node…like a cloner inside cloner in c4d

also would be nice to work with dummy objects then switch them out later for geometry like matrix object

edit…i guess instancer mode kind of does both of these requests probably within the limitations of maya

also …and i havent played with this too much …but it seems like more than one bounding object throws an error… so if i have bounding on position noise then a bounding on position trig it doenst seem to like too much.

overall very good tho. hopefully other people will kick in with the sourcecode and continue to improve.

thanks very much for putting this much needed toolset together


I meant something like the default texture slot in many other maya attributes, where you can just plug a ramp/curve and mess away.

I didn’t know about the bin-button as I dont use shelves :slight_smile: I’ll add it to my custom menu.

Anyhow, really looking forward to seeing this develop.


Yes it does, but you’re right, Maya does impose some limitations here, and ‘uninstancing’ is a bit of a clunky solution.

Well spotted! Thanks, that was actually just a bug in the Trig node, now fixed. You can have several bounding objects, just don’t use the Trig node one until I push an update :wink:

You are more then welcome, updates are on the way!


Ahh! I follow you now, sorry, I’ll look into it :slight_smile:


Thank you so much Ian, I have been searching for this since I launched maya for the first time!


I am having so much fun with MASH

One feature that would be awesome to add would be to be able to “instance instanced” systems… Kind of like Scott said before I guess, but maybe even further.

The idea behind this would be to be able to establish connections between MASH and Maya’s dynamic system (forces & fields).

So this is what I’d like to be able to achieve, it’s just an idea of course :slight_smile:

  • create some objects
  • create a particle system
  • instance the objects with the particles
  • Apply fields on the system


  • (optionally group particles and instances)
  • instance this in MASH so I can MASH the instanced dynamic system

So far, I’ve been able to do all of the above but not with instanced objects, only particles. It would be totally Kc a*s to have that possibility in MASH. Like really really sick lol…


Hm, any chance you could explain what I need in the bin-shelf button to execute the bin function? When I tried copy that code into my custom menu as a button, the menu disappeared, and when I try loading your shelf I get the shelf but there are no buttons on it.

This is the code that I put under a “button” in my script, which I got from your bin shelf button.

-command "string $sel[];
string $nodeName;
$sel = `ls -sl`;

if (size($sel) > 0) {
	$nodeName = $sel[0];
else {
	error \"You need to select a node in the Node Editor or Hypershade.\";

if ((`objectType -isType \"MASH_Distribute\" $nodeName`) || (`objectType -isType \"MASH_Curve\" $nodeName`)|| (`objectType -isType \"MASH_Delay\" $nodeName`)|| (`objectType -isType \"MASH_Inherit\" $nodeName`)|| (`objectType -isType \"MASH_Mute\" $nodeName`)|| (`objectType -isType \"MASH_Noise\" $nodeName`)|| (`objectType -isType \"MASH_Orient\" $nodeName`)|| (`objectType -isType \"MASH_Random\" $nodeName`)|| (`objectType -isType \"MASH_Spring\" $nodeName`)|| (`objectType -isType \"MASH_Trig\" $nodeName`)|| (`objectType -isType \"MASH_Visibility\" $nodeName`)) {
	binMASHnode $nodeName;
else {
	error \"Please select a valid MASH node in the Node Editor or Hypershade.\";

global proc binMASHnode (string $nodeName) {
	string $in[] = `listConnections -d 0 -s 1 -c 1 -p 1 ($nodeName+\".inputArray\")`;
	string $out[];
	if (`objExists ($nodeName+\".outputArray\")`) {
		$out = `listConnections -d 1 -s 0 -c 1 -p 1 ($nodeName+\".outputArray\")`;
	else {
		$out = `listConnections -d 1 -s 0 -c 1 -p 1 ($nodeName+\".outRotationPP\")`;
		 warning \"Orient node deleted, no reconnections have occured.\";

if ((size($in)) > 0) {

		connectAttr  -force $in[1] $out[1];

evalDeferred -lp (\"delete \"+$nodeName);
if( `objExists $nodeName` ) {
evalDeferred -lp (\"delete \"+$nodeName);


I thought it would work but I guess I’m missing something?


What version/platform of Maya are you using?

Once the button is created, select a MASH node in the hypershade or node editor and click the button to delete it.

At least that’s what is supposed to happen… :slight_smile:


linux centOS, maya 2012 sap sp1 x64

Yes, the problem is my shelf is empty :expressionless: and as I use a custom written window for all my scripts/plugins (to get away from the limited space/customization of the regular shelves) I was hoping to be able to create a custom button for mash binning, but when I copy the bin command from the mash shelf mel file to a button in my custom window script it doesn’t work and I was wondering if its the correct way to do it. Or if maybe there is a short procedure one can call for the bin operation, like “mashBin;” or something.


looks pretty cool.

seems mograph is being replicated in alot of packages, reminds me of this set of tool released for softimage ice.

. never really got in to maya but ICE inside softimage pretty impressive.

good work though.