Aaron Koressel


Workflow Scripts
Creative Commons LicenseThe tools on this page are licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. This basically means that you are welcome to use these scripts, modify, and even redistribute them. Just keep the header of the file intact.
This is my collection of Maya Mel Scripts - the vast majority of which I continue to use on a daily basis. They are mostly character animation specific, and aim to fill in the nooks and crannies of what I find lacking in Maya.

Have a look at my design philosophy for a general understanding of how these scripts work and how I use them.

For help on how to use these scripts, and how to set up keyboard shortcuts in Maya, see the Maya Scripts and Hotkeys doc.

These scripts are often improved and updated, so check back for bug fixes or new features. You can subscribe to the site news feed to get script update news in your RSS reader. Also feel free to send bugs and script issues to me. If I've overlooked something I'd love to know about it.

Sort By
ackDeleteRedundant 1.1 last updated: 12/04/2007

Deletes keys that have the same value as it's two neighboring keys. Will only delete keys that are in the current selection. Useful for post-blocking cleanup, and reducing your spiderweb of curves to a more manageable state.
(show docs)
SYNTAX:
ackDeleteRedundant;

EXAMPLE:
Assign this commnad to Ctrl-Alt-R: ackDeleteRedundant;

CHANGELOG:
1.1 - 12/04/07
Uses a tolerance value for checking redundancy
1.0 - 2/9/07
First version


(show demo)
ackConvergeBuffer 1.0 last updated: 11/01/2007

Converges selected keys towards or away from it's buffer curve. Also has a command to just snap selected keys to the buffer curve. If keys don't line up, the key will move towards the interpolated value on the buffer curve.
(show docs)
SYNTAX:
ackConvergeBuffer "toward";
ackConvergeBuffer "away";
ackConvergeBuffer "snap";

EXAMPLE:
Assign this commnad to "Ctrl Alt PgDown": ackConvergeBuffer "toward";
Assign this commnad to "Ctrl Alt PgUp": ackConvergeBuffer "away";
Assign this commnad to "Ctrl Alt Home": ackConvergeBuffer "snap";


(show demo)
ackSnapEndKeyValues 1.0 last updated: 10/31/2007

With selected curves, snaps the last key's value to the first key's value (or vice versa). Useful for making sure keys line up correctly for cycles. Not the same as copying the first key to the last: since this works on each curve independently, it's ok if your curves are offset in time.
(show docs)
Use ackSetup to switch directions.
"left" - snaps last key to first key (default)
"right" - snaps first key to last key


(show demo)
This script is supported by ackSetup
ackNegateKeys 1.3 last updated: 10/22/2007

Flips currently selected keys over the X axis. This axis is centered about next adjacent key outside of the selection. Useful for getting the opposite pose, or flipping the symmetry of animation. If more than one curve is selected, the flipping is calculated independently.
(show docs)
By default it looks to the left for the neighboring key,
or use ackSetup to switch between left, right, or the last
selected key.


(show old versions)
CHANGELOG
1.3 - 10/22/07
ackSetup compliant

1.2 - 8/29/07
Changed behaviour to look one key outside of selection
for flipping point. Added interface to flip from left
or right side.

1.1 - 2/8/07
download
Uses the first key as the axis to flip about

1.0 - 7/28/05
First Version
Just multiplied by -1 so it only worked over the
orgin axis.

(show demo)
This script is supported by ackSetup
ackSnapToTime 1.1 last updated: 10/22/2007

Moves current selection of keys to the current frame. If more than one key is selected it shifts the group so that the first key lines up on the current frame if in "left" mode, or the last last key if in "right" mode. Defaults to "left" mode and which can be changed with ackSetup.
(show old versions)
CHANGELOG:
1.1 - 10/22/07
ackSetup compliant

1.0 - 2/07/07
download
First version


(show demo)
This script is supported by ackSetup
ackSnapAnimation 1.1 last updated: 10/19/2007

Takes current selection of keys and offsets it's values so that it lines up with the neighboring key. Very useful for pasting/rearranging animation and keeping your animation relative to it's neighbor. Or snap a key into a hold and have the neighboring animation offset appropriately.
(show docs)
Operates on each curve separately, so offset amount
won't necessarily be the same across multiple curves.
By default it looks to the left for the neighboring key,
or use ackSetup to switch between left or right.


(show old versions)
CHANGELOG:
1.1 - 10/19/07
ackSetup compliant

1.0 - 2/07/07
download
First version

(show demo)
This script is supported by ackSetup
ackMoveKeys 1.1 last updated: 10/13/2007

Moves keys in any direction with the keyboard. Also converge keys towards adjacent keys.
(show docs)
"left" and "right" move selected keys one frame.

"up" and "down" changes key values a fixed percentage
of the selection's adjacent keys. Since the neighboring
keys aren't being affected, you can move keys beyond the
the neighboring extreme.

"convergeLeft" and "convergeRight" converges key values towards the
neighboring keys. Since it is moving a percentage of the difference
of two keys, it approaches a neighboring key without overshooting it.

SYNTAX:
ackMoveKeys "left";
ackMoveKeys "right";
ackMoveKeys "up";
ackMoveKeys "down";
ackMoveKeys "convergeLeft";
ackMoveKeys "convergeRight";

PARAMETERS (via ackSetup):
Fixed Move Factor:
Used by "up" and "down".
Percentage of adjacent keys to move up or down.
If next adjacent key has a value of 20, the previous key is 0,
and the factor is .2, up/down will move keys by a vlue of 4.
.05 is a good default

Scale Factor:
Used by "convergeLeft" and "convergeRight".
Percentage of next/prev key to converge towards.
If the current key has a value of 10, the next key is 20,
and the factor is .5, convergeRight will set the current key
to 15 (halfway between 10 and 20).

EXAMPLE:
Assign this commnad to Alt-Up: ackMoveKeys "up";
Assign this command to Ctrl-Alt-Right: ackMoveKeys "convergeRight";
etc...

(show old versions)
CHANGELOG:
1.1 - 10/13/07
Uses settings from ackSetup instead of own setup.

1.0 - 6/18/07
download
First version


(show demo)
This script is supported by ackSetup
ackPushPull 1.1 last updated: 10/13/2007

Pushes or pulls animation in the graph editor. Scales selected keys by some factor towards or away from a pivot point.
(show docs)
PARAMETERS (via ackSetup):
Pivot From:
* Adjacent Left (Multi Pivot): uses the adjacent left key per curve
as a pivot point. If there is more than one curve selected there
will be multiple pivot points - each curve independently looking
to the left adjacent key.

* Adjacent Right (Multi Pivot): same as above but to the right.

* Last Selected Key (Single Pivot): uses the last single key selected
of all curves as the pivot point. There is only one pivot point and
all curves pivot from this key.

Scale Factor:
How much to scale selected keys by.

SYNTAX:
ackPushPull "push";
ackPushPull "pull";

EXAMPLE:
Assign this commnad to "Alt /": ackPushPull "pull";
Assign this commnad to "Alt *": ackPushPull "push";

(show old versions)
CHANGELOG:
10/13/07 1.1
ackSetup compliant

7/08/07 1.0
download
First version.

(show demo)
This script is supported by ackSetup
ackSetup 1.0 last updated: 09/13/2007

Provides a global interface for controlling the parameters of compatible ack scripts. For example setting the pivot direction to "left" will set the pivot state for all relevent scripts including ackNegateKeys, ackPushPull, ackSnapAnimation, etc. These global settings can be set from an interface or through hotkey commands.
(show docs)
PARAMETERS:
Pivot From
------------------
* Adjacent Left (Multi Pivot): uses the adjacent left key per curve
as a pivot point. If there is more than one curve selected there
will be multiple pivot points - each curve independently looking
to the left adjacent key.

* Adjacent Right (Multi Pivot): same as above but to the right.

* Last Selected Key (Single Pivot): uses the last single key selected
of all curves as the pivot point. There is only one pivot point and
all curves pivot from this key.

Fixed Move Factor
------------------
Used by scripts that apply changes as fixed amounts.

Scale Factor
------------------
Used by scripts that apply changes as percentages.

COMPATIBILITY:
Pivot From:
ackNegateKeys
ackPushPull
ackSnapAnimation (Last Selected is ignored)
ackSnapToTime (Last Selected is ignored)
ackSnapEndKeyValues (Last Selected is ignored)

Fixed Move Factor:
ackMoveKeys (up/down)

Scale Factor:
ackMoveKeys (convergeLeft/convergeRight)
ackPushPull


SYNTAX:
Run this to access the main setup interface:
ackSetup "setup";

Run these as hotkeys to change parameters on the fly:
ackSetup "left";
ackSetup "right";
ackSetup "last";



GLOBALS:
if you want to change settings programmatically the following global
variables are available to edit.

string $ackSetup_pivot
- "left", "right", or "last"

float $ackSetup_fixedFactor

float $ackSetup_scaleFactor
- should be > 0.0 and < 1.0

(show demo)
ackSpreadSqueezeTiming 1.0 last updated: 09/09/2007

Inserts or removes one inbetween before every keyframe selected.
Similar effect to scaling keys in time, except you are guaranteed to have even scaling and keys on whole frames.
(show docs)
SYNTAX:
ackSpreadSqueezeTiming "spread";
ackSpreadSqueezeTiming "squeeze";

EXAMPLE:
Assign this commnad to "Ctrl Alt +": ackSpreadSqueezeTiming "spread";
Assign this commnad to "Ctrl Alt -": ackSpreadSqueezeTiming "squeeze";


(show demo)
ackTimingFramework 1.0 last updated: 09/09/2007

Inserts keys across all selected curves at all times that keys exist. Only considers keys that are selected. Preserves tangents.
(show docs)
Useful for adding a new control to current blocking with the same timing.

- If only one curve is selected, this curve will be used as the framework. Keys will be added to all other curves.
- If no curves are selected, all keys in the graph editor will be used as the framework and all curves will have keys set on them.

SYNTAX:
ackTimingFramework;

EXAMPLE:
Assign this commnad to "Ctrl Alt Ins": ackTimingFramework;


(show demo)
ackToggleHighlight last updated: 08/20/2007

Toggles the wireframe highlighting of selected objects. Useful for seeing changes on a selected object without the highlight cluttering up the display.
(show demo)
ackToggleCams 1.1 last updated: 08/06/2007

Toggles the viewport under the cursor between one of two cameras. Intended use is having a full screen viewport up and flipping between your shot cam and a perspective cam.
(show docs)
The first time it's run, it guesses which
two camera's to use (defaulting to the current camera
and the "persp" camera).

The setup window (ackToggleCams_setup) lets you change
the two cameras. Double-clicking in the camera list
switches the current view to that camera.
The text box can also be used to type a camera's name
in case something fancy is being done like looking
through a camera shape node.

SYNTAX:
ackToggleCams;
ackToggleCams_setup;

GLOBALS:
If you want to change the options programmatically
the following global variables are available to edit:
string $ackToggleCams_camera1;
string $ackToggleCams_camera2;

EXAMPLE:
Assign this commnad to "Alt `": ackToggleCams;
Drag this command to a shelf: ackToggleCams_setup;



(show old versions)
CHANGELOG:
1.1 - 8/6/07
Guesses which two cameras to use on first run.
Added setup window for changing cameras later.

1.0 - 2/28/05
download
First version

ackGotoTime last updated: 07/29/2007

Quick way to jump to a frame number without touching the mouse. Running the command pops up a window to enter a time into. Pressing enter jumps to the time and kills the window.
ackToggleTranslateMode 1.1 last updated: 07/29/2007

Toggles between local translation and world translation.
(show old versions)
CHANGELOG:
1.1 - 7/29/07
Changed one of the modes to local instead of object.
Local represents the exact channel that is being animated so
it is far more relevant than object translation.

1.0 - 6/1/05
download
First Version

(show demo)
ackToggleModel 1.1 last updated: 07/23/2007

Toggles the visibility of NURBS surfaces, polygons, and subdiv surfaces in the viewport currently under the cursor. (Toggles scene geometry to make control selection easier).
(show old versions)
CHANGELOG:
1.1 - 7/23/07
- Added subdiv surfaces to the toggle

1.0 - 3/01/05
download
First version

(show demo)
ackSwapKeys 1.0 last updated: 06/18/2007

Swaps the times of two vertical sets of keys (two poses). Only operates on a selection of two distinct times and two keys per channel.
(show demo)
ackDeadPixelFinder BETA 1 last updated: 04/28/2007

Helps find sections of animation that need attention. Use 'Stepped' and/or 'Linear' search to make your way out of blocking. Use 'Held Poses' to find poses that lock up with no movement. See this post for more details.
(show demo)
ackShuttleControl 1.2 last updated: 04/28/2007

Note: There are unfixed bugs in this script. See this post for more details. A replacement of the basic shuttle controls, except they don't clog up your undo history when you run them.
(show docs)
SYNTAX:
ackShuttleControl "nextFrame";
ackShuttleControl "prevFrame";
ackShuttleControl "nextKey";
ackShuttleControl "prevKey";
ackShuttleControl "firstFrame";
ackShuttleControl "lastFrame";
ackShuttleControl "timeDraggerActivate";
ackShuttleControl "timeDraggerDeactivate";

Notes: There are two TimeDragger commands to be assigned
to a key's Press and Release function respectively.

nextKey and prevKey operate on the selection of keys
in the graph editor. If there are no keys selected,
considers all keys in the current object selection.

EXAMPLE:
Assign this commnad to Ctrl Right: ackShuttleControl "nextKey";



(show old versions)
CHANGELOG:
1.2 - 4/27/07
Fixed time dragger to correctly retrive the last tool
you were working with.

1.1 - 3/5/07
Added firstFrame, lastFrame, and
TimeDragger tool. firstKey and prevKey operates on
the selection of keys if there is a selection.

1.0 - 9/23/06
download
First Version
Just did prev and
next frames and keys.

ackToggleSound 1.1 last updated: 02/10/2007

Toggles the current sound clip in the timeline (for muting purposes). The first time it's used in a session with a sound clip active will determine which sound clip to toggle.
(show docs)
CHANGELOG:
2/9/07 1.1
More robust: checks for a current sound before
writing to global variable

9/9/05 1.0
First Version


(show demo)
ackCycleTangents last updated: 02/04/2007

Cycles between Flat, Spline, and Linear on selected keys.
(show demo)
ackDeleteKey last updated: 02/04/2007

If a curve is selected in graph editor, deletes selected keys. If no curves are selected, deletes current key of selected objects. Same functionality as delete key on keyboard but mappable to any other key.
ackNewGraphEditor last updated: 02/04/2007

Intelligently displays a new graph editor. If one already exists but is invisible, it shows that one. Otherwise it creates a new one each time it's run. Current Maya functionality will only display one graph at a time.
ackPlayblastSelectedKeys last updated: 02/04/2007

Playblasts the range of time that includes the first and last selected key. Select the range of keys that you just tweaked and run this to see your changes.
ackSliceCurves last updated: 02/04/2007

Inserts a key at the current time into the currently selected curves while preserving tangents. Operates on selected curves in graph editor not currently selected objects. If no curves are selected, slices all curves in graph editor. This is basically the same functionality as Maya's insert key tool, but arguably faster because it just slices the current frame without involving the mouse.
(show demo)
ackSnapKeyValues last updated: 02/04/2007

Snap all the values of the selected keys to the value of the last selected key.
(show demo)
ackSteppedTween last updated: 02/04/2007

Inserts a stepped key linearly interpolated between the two adjacent stepped keys. For use in very early blocking while everything is a stepped key and poses line up on the same frame. Use it as a quick starting place for creating a breakdown. Operates on what's in the graph editor not what's selected. Works on selected curves, or if none are selected, all curves.
(show demo)
ackToggleImagePlane last updated: 02/04/2007

Toggles the visibility of all image planes in the scene
ackToggleKeyColor last updated: 02/04/2007

Toggles the display of the special key color of selected keys.
ackToggleNURBSCurves last updated: 02/04/2007

Toggles the visibility of NURBS curves in the viewport currently under the cursor. (Toggles your character's rig/controls/avars/shwoopties.)
(show demo)
ackToggleRotateMode last updated: 02/04/2007

Toggles the rotation tool between local rotation and gimbal rotation.
(show demo)
ackToggleTangentType last updated: 02/04/2007

Toggles selected keys between broken+free tangents and unified+free tangents in the graph editor.
(show demo)
ackZeroOutKeys last updated: 02/04/2007

Zeroes out the values of selected keys in the graph editor.
(show demo)



All content, unless otherwise noted, are licensed under a Creative Commons BY-NC-SA License - 2017 Aaron Koressel