gt-tools

Table of Contents

GT Tools Logo

General:

Tools:

Curves:

Modeling:

Rigging:

Utilities:

Miscellaneous:


Package Setup

Setup - Installation, Uninstallation, or Run Only

TL;DR: Download and extract the files; Drag and drop the file "setup_drag_drop_maya.py" onto the Maya viewport; Select the option "Install", "Uninstall" or "Run Only"; Enjoy!

GT Tools Installation Tutorial

This script collection comes with an auto setup tool ("setup_drag_drop_maya.py") to call it drag and drop the file on your Maya viewport. From the setup window you can "Install", "Uninstall" or "Run Only".
How to run it step by step:

  1. Open Maya (in case it's closed).
  2. Download the latest release (or clone this repository).
  3. Un-zip (Decompress) the file you downloaded. (the setup won't work if it's still compressed)
  4. Drag and drop "setup_drag_drop_maya.py" on to your Maya viewport.
  5. An user interface with the setup options will open.
  6. Select the desired operation. E.g. "Install", "Uninstall", or "Run Only"
  7. Enjoy!

After installing, you can delete the downloaded/extracted files (as they have already been copied)

Setup Window

GT Tools Installation Setup Window
  1. Install: Copies the files to the installation path and loads (reloads) the package.
  2. Uninstall: Deletes the files from the installation path and unloads the package.
  3. Run Only: "One time use only"; Loads tools from current location without copying files.

Checksum Verification

When installing it for the first time, Maya might show you a small dialog window saying "UserSetup Checksum Verification", you can confirm it with a "Yes". This window is only letting you know that the "userSetup.mel" script was modified. This is a security feature from Autodesk that is used to tell the user that the startup script was modified. This check is used to prevent infected scenes from modifying the startup script without the user knowing. In our case, we did it deliberately as part of the installation process, so you can just confirm it.

Run Only

The setup window offers the option to run the tools without installing them. To do this, follow the same drag and drop steps and click on "Run Only" instead of "Install". This is going to load the tools from the location you have them, allowing you to run it one time only.

Updating

Simply install it again. The auto setup will handle the file changes.
If updating a major version, it's recommended that you uninstall it first before installing it again. This will eliminate any unnecessary files.
In case updating it manually, make sure to overwrite (replace) the files when moving them.

Windows Only - Express Launcher

Users running windows can also use the "setup_express_launcher.bat" file to run setup options without opening Maya.
The same file can be used with arguments to run a launching option directly. For example, a shortcut with the argument "-launch" ("..\setup_express_launcher.bat -launch") will open Maya directly with the option "Run Only" from the GUI Setup window, essentially creating a shortcut to use the tools without installing them.

GT Menu

GT Dropdown Menu and Help

The package adds a dropdown menu to the main Maya window. It provides the user with easy access to the other scripts based on categories.
This menu contains sub-menus that have been organized to contain related tools. For example: modeling, rigging, utilities, etc...

How does Maya know to run the script and create the menu?:
When you install the script package, it adds a line of code to the "userSetup.mel" file. This file gets executed every time Maya opens.

Help > About:
This option opens a window showing basic information about GT Tools.

Help > Re-Build Menu: It re-creates the GT Tools menu, and does a rehash to pick up any new scripts.

Help > Check for Updates:
Opens the script "gt_check_for_updates" to compare your version with the latest release.

Help > Toggle Develop Mode: Toggles the state of development mode. When active a new sub-menu "Develop" appears under the main drop-down menu. This sub-menu contains tools and functions used for the development of new tools.

Help > Installed Version: What version is currently installed.


GT Check for Updates

GT Check for Updates UI

This script compares your current GT Tools version with the latest release from Github. In case the version installed is older than the latest release, an option to update becomes available.
In this window you can also control how often the script will automatically check for updates.

Status:
Result from the comparison. In case you have an older version it will let you know that the script package can be updated.

Web Response:
The script needs to ask Github for the latest release to be able to compare with the one you have. In case internet is not available or a firewall blocked the connection you will see the error code here. (These are HTTP status codes)

Re-Build Menu: It re-creates the GT Tools menu, and does a rehash to pick up any new scripts. (Good for when updating, so you don't need to restart Maya)

Installed Version:
Version currently installed on your computer. In case you never installed the menu, it will be (v0.0.0).

Latest Release: Latest version available on Github.

Latest Release Changelog: Here you can find a list showing all the main changes applied to the three latest versions. The version number can be found on the top left corner and the release date on the top right corner.

Auto Check For Updates: This function controls the behavior of the auto updater. In case active, it will use the interval value to determine if it should check for new releases. The user will only see the update window in case there is an actual update. (This function has no impact in your Maya startup time as it only gets executed only when necessary and it waits for the program to be idle. Click on the button to toggle between Activated/Deactivated

Interval: This is how often the script will auto check for updates. Click on the button to change between the available intervals. (5 day, 15 days, 30 days, 3 months, 6 months, 1 year)

Refresh: Checks for updates again.

Update: This button is only available in case there is a new update available. When clicked it opens the page for you to download the latest version. Simply install it again to update.

Semantic Versioning: MAJOR.MINOR.PATCH


GT Renamer

GT Renamer GUI GT Renamer Sample

Script for quickly renaming multiple objects.
Feedback is given through inView messages at the left bottom corner.

Modes:
- Selected: uses selected objects when renaming.
- Hierarchy: uses hierarchy when renaming.
- All: uses everything in the scene (even hidden nodes)

Other Tools:
- Remove First Letter: removes the first letter of a name.
If the next character is a number, it will be deleted.
- Remove Last Letter: removes the last letter of a name.
- U-Case: makes all letters uppercase.
- Capitalize: makes the 1st letter of every word uppercase.
- L-Case: makes all letters lowercase

Rename and Number / Letter: Renames selected objects and add a number or a letter to them.
- Use Source : Keeps the original name and only adds the number/letter.
- Start # : first number when counting the new names.
- Padding : how many zeros before the number. e.g. "001".
- Uppercase : Makes the letter uppercase.

Prefix and Suffix:
Prefix: adds a string in front of a name.
Suffix: adds a string at the end of a name.
- Auto: Uses the provided strings to automatically name objects according to their type or position.
1st example: a mesh would automatically receive "_geo"
2nd example: an object in positive side of X, would automatically receive "left_: .
- Input: uses the provided text as a prefix or suffix.

Search and Replace: Uses the well-known method of search and replace to rename objects.


GT Outliner Sorter

GT Renamer GUI

Script for sorting outliner hierarchies. Options will not re-parent objects, only change their order.

Utilities / Settings:
- Move Up: Moves the selected objects up in the hierarchy order.
- Move Down: Moves the selected objects down in the hierarchy order.
- Move Front: Moves the selected objects to the top of the hierarchy order.
- Move Back: Moves the selected objects to the bottom of the hierarchy order.
- Shuffle: Randomizes the order of the selected objects.

Sort Ascending/Descending:
Determines if the output of the operations will be in an increasing order or decreasing.

Sort by Name:
- Re-order selected elements based on their names. For example:
"Object_B", "Object_C", "Object_A", would become:
"Object_A", "Object_B", "Object_C"
This also works with numbers. It reads the letters from left to right.

Sort by Attribute:
- Re-order selected elements based on an attribute. For example:
"Object_B.ty" = 5, "Object_C.ty" = 10, "Object_A" = 1, would become:
"Object_C.ty" = 10, "Object_B.ty" = 5, "Object_A" = 1 (matching the order of the values)
You can also use user-defined/custom attributes by filling the text-field on top of the "Sort by Attribute" button.


GT Selection Manager

GT Selection Manager GUI

This script allows you to update selections to contain (or not) filtered elements. You can also save and load previous selections.

Element Name: This option allows you to check if the string used for the object name contains or doesn't contain the, the provided strings (parameters).

Element Type: This filter will check the type of the element to determine if it should be part of the selection or not.

Element Type > Behavior (Dropdown Menu): Since most elements are transforms, you can use the dropdown menu "Behavior" to determine how to filter the shape element (usually hidden inside the transform).
(You can consider transform, shape, both or ignore it)

Visibility State: Selection based on the current state of the node's visibility attribute.

Outliner Color (Transform): Filters the option under Node > Display > Outliner Color. In case you're unsure about the exact color, you can use the "Get" button to automatically copy a color.

Store Selection Options:
Select objects and click on "Store Selection" to store them for later.
Use the "-" and "+" buttons to add or remove elements.
Use the "Reset" button to clear your selection.

You can save your selection in two ways:
As a set: creates a set containing your selection.
As text: creates a txt file containing the code necessary to recreate selection.

Create New Selection: Uses all objects as initial selection
Update Current Selection: Considers only selected objects


GT Path Manager

GT Path Manager GUI

This script displays a list with the name, type and path of any common nodes found in Maya.

You can select the node listed by clicking on it or change its name or path by double clicking the cell. The icon on the left describes the validity of the path. If the file or directory is found in the system it shows a green confirm icon otherwise it shows a red icon.

Auto Path Repair: This function walks through the folders under the provided directory looking for missing files. If it finds a match, the path is updated.

Search and Replace: This function allows you to search and replace strings in the listed paths.

Refresh: Re-populates the list while re-checking for path validity.

Search Path: A directory path used when looking for missing files.

Supported Nodes:
file (UDIMS and Image Sequences), audio, cacheFile, AlembicNode, BifMeshImportNode, gpuCache, MASH_Audio, aiPhotometricLight, aiStandIn, aiVolume, RedshiftProxyMesh, RedshiftVolumeShape, RedshiftNormalMap, RedshiftDomeLight, RedshiftIESLight, imagePlane



GT Color Manager

GT Color Manager GUI

Script for quickly coloring elements in Maya.
Feedback is given through inView messages at the left bottom corner.


Modes:
- Drawing Override: Utilize "Object > Object Display > Drawing Overrides" to set color.
- Wireframe Color: Utilize "Display > Wireframe Color..." to set color.


Target:
- Transform: Colorize actual selection. Usually a "transform"
- Wireframe Color: Colorize the shape node inside the transform


GT Path Manager Sample B GT Path Manager Sample A

Current Color:
The color used in the operation. Click on the color to open Maya's color picker.

Color Presets:
A list of common colors. When clicked it sets the color.

Set Color For:
- Outliner: Control the outliner color
- Wireframe Color: Control the wireframe color seen in the viewport






GT Transfer Transforms

GT Transfer Transforms GUI

Script for transferring translate, rotate or scale data from one object to another.

Transfer (Source/Targets):
1. Select Source 1st
- Wireframe Color: Utilize "Display > Wireframe Color..." to set color.

Target:
- Transform: Colorize actual selection. Usually a "transform"
2. Select Targets 2nd,3rd...
3. Select which transforms to transfer (or maybe invert)

Transfer from one side to the other:
"From Right to Left" and From Left To Right" functions.

1. Select all elements
2. Select which transforms to transfer (or maybe invert)
3. Select one of the "From > To" options
e.g. "From Right to Left" :
Copy transforms from objects with the provided prefix "Right Side Tag" to objects with the provided prefix "Left Side Tag".

Copy and Paste Transforms:
As the name suggests, it copy transforms, which populates the text fields, or it pastes transforms from selected fields back to selected objects.

Export and Import Transforms:
Exports a file containing Translate, Rotate, and Scale data for every selected object.
When importing, it tries to find the same elements to apply the exported data.


GT World Space Baker

GT World Space Baker GUI

Script for storing then baking transforms using world-space data.

1. Target(s)
Use "Load Selection" to define targets (objects to extract transform from).

2. Animation Range
Enter animation range (Start & End). That's the range used by the script when extracting or baking transforms

3. Extract World Space
Extract and store transforms; This creates a dictionary with the transforms of the loaded objects throughout the animation range.

4. Bake transforms when necessary
Bake the transforms when necessary. For example, after updating the object's parent into another pose, you bake it forcing the loaded object to go back to the stored position (world-space)





GT Render Checklist

GT Render Checklist GUI

This script performs a series of checks to detect common issues that are often accidentally ignored/unnoticed.

Checklist:
- Operation: Name of the check the script will perform
- Status: Result received from the test
- Info: Extra info or comments regarding the results

Checklist Status:
These are also buttons, you can click on them for extra functions:
- Grey: Default color, not yet tested.
- Green: Pass color, no issues were found.
- Yellow: Warning color, some possible issues were found.
- Red: Error color, issues were found.
- Black: Exception color, an issue caused the check to fail. (Likely because of a missing plug-in or unexpected value)
- Question Mark, click on button for more help.

Settings:
Change what values cause the script to return a warnings and errors.
- Apply: Stores the settings and go back to the main window (settings are persistent between Maya sessions)
- Export Settings: Exports a txt file containing all current settings.
- Import Settings: Imports a txt file exported using the previously mentioned function.
- Reset to Default Values: Resets expected values to default values.

Main Buttons:
- Generate Report: Creates a temporary txt file with all the information collected during the checks.
- Refresh: Runs all checks again.

Checklist Operations:


GT Extract Python Curve

GT Generate Python Curve GUI

This script generates the Python code necessary to create a selected curve.
Helpful for when you want to save a curve to your shelf or to add it to a script.

How to use it:
1. Make sure you delete the curve's history before generating the code.
2. Select the curve you want to convert to code.
3. Click on the "Generate" button to generate the code.

Add import "maya.cmds":
Adds a line that imports Maya's cmds API. This is necessary for when running python scripts.

Force Open:
Doesn't check if the curve is periodic leaving it open.

"Generate" button:
Outputs the python code necessary to create the curve inside the "Output PYthon Curve" box.

Run Code:
Attempts to run the code (or anything written) inside "Output Python Curve" box

Save to Shelf:
Saves the code (or anything written) inside "Output Python Curve" box as a shelf button.


GT Generate Text Curve

GT Generate Text Curve GUI

This script creates merged curves containing the input text from the text field.
(All shapes go under one transform)

How to use it:
1. Select what font you want to use.
2. Type the word you want to create in the "Text:" text field.
3. Click on the "Generate" button.

You can create multiple curves at the same time by separating them with commas ",".

Current Font:
Click on the button on its right to change the font


GT Extract Curve State

GT Extract Curve State GUI

This script generates the Python code necessary to recreate a curve shape state.

How to use it:
1. Select the curve (or curve's transform) you want to convert to code.
2. Click on the "Generate" button to generate the code.

"Extract State" button:
Outputs the python code necessary to recreate the current curve shape inside the "Output PYthon Curve" box.

Run Code:
Attempts to run the code (or anything written) inside "Output Python Code" box

Save to Shelf:
Saves the code (or anything written) inside "Output Python Code" box as a shelf button.


GT Transfer UVs

GT Transfer UVs GUI

Script used to quickly transfer UVs between objects. It allows you to export or import UVs or transfer them from an object to other objects in the scene.
This script automatically bakes the UVs onto the intermediate object allowing you to transfer UVs without generating history.

Export UVs:
Exports an OBJ file containing the model and its UVs (similar to simply exporting and OBJ file through the file menu)

Import UVs:
Imports the previously exported OBJ file and transfers its UVs to the intermediate object of your selection. It allows you to import the UVs without generating history.

Transfer from Source to Target(s)
Allows you to quickly transfer UVs from the first object in your selection to the other objects in the same selection. Thus, you first select your source, then your targets. This method will also use the intermediate object, so no construction history will be left behind.


GT Sphere Types

GT Sphere Types GUI

Quite simple script used as a reminder that the standard sphere is not the only sphere option.

Standard Sphere:
Creates the standard Maya sphere. "Create > Polygon Primitives > Sphere"

Standard Sphere:
Creates a sphere using a cube. "Create > Polygon Primitives > Cube" then "Mesh > Smooth (2x)"

Platonic Sphere A:
Creates a sphere using a platonic solid. (Settings: Icosahedron, Quads, 1, 1, 1)

Platonic Sphere A:
Creates a sphere using a platonic solid. (Settings: Octahedron, Quads, 2, 1, 1)


GT Biped Auto Rigger

GT Biped Auto Rigger GUI

Script for quickly generating an advanced biped rig.
For more predictable results execute the script in a new scene containing only the geometry of the desired character. This solves most naming conflicts and data loss issues. In case you want the auto rigger to manage your geometry, parent it under a group called "geometry_grp".
In case you experience any issues with the rig, let me know through the "Issues" tab on Github.

Here are some highlights of what it creates:

Tabs:
The tabs "Facial", "Corrective" and "Settings" control optional rigging steps and work in a similar way to the base rig.

Step 1:

- Create Proxy:
This button will create many temporary curves that will later be used to generate the rig.
In case you want to re-scale the proxy, use the root proxy control for that.
The initial scale is the average height of a woman (160cm) but you can download proxy presets (poses) for other scales from the assets folder.

The arrow found in the shape of the clavicles, hands and finger proxies indicate their up position.
The bigger arrows in the shape of the knees and elbows show the direction of their up vector constraint. (that's the direction they will bend)

To position the eye proxies: Center the pivot point of the eye geometry then display its Local Rotation Axes then snap the proxy to its center.
To center the pivot of eye geometry go to "Modify > Center Pivot" (It's often already in the center, check it first)
To show the Local Rotation Axes (so you have a point to snap it to) go to "Display > Transform Display > Local Rotation Axes"
Hold "V" while moving the eye proxy to snap it to points.

Some proxy curves have custom attributes on them that allow you to tweak their posing behavior or visibility.
The ankle proxy curves have an attribute called "Follow Hip" when activated, they will follow the position of the hip allowing you to pose the character a bit faster while keeping a hip and ankle perfectly aligned.
The Root proxy has an attribute called "Lines Visibility" that allows you to turn off the visibility of the lines

Proxy curves are not joints. Please don't delete or rename them.
For tips on how to position every proxy curve, open the attribute editor and read the information under "Transform Node > Notes:"

Step 2:

Pose the proxy (guide) to match your character.
- Reset Proxy: Resets the position and rotation of the proxy elements, essentially "recreating" the proxy.
- Mirror Right to Left: Copies the transform data from the right side to the left side, mirroring the pose.
- Mirror Left to Right: Copies the transform data from one left side to the right side, mirroring the pose.
- Import Pose: Imports a JSON file containing the transforms of the proxy elements. This file is generated using the "Export Pose" function.
- Export Pose: Exports a JSON file containing the transforms of the proxy elements.
- Delete Proxy: Simply deletes the proxy in case you no longer need it.

Step 3:

- Create Rig: This button uses the proxy elements to automatically create the control rig.
It uses the transform data found in the proxy to determine how to position, orient and setup the skeleton and controls.
This function will delete the proxy. Make sure you export it first if you plan to reuse it later.

Step 4:

Now that the rig has been created, it's time to to attach it to the geometry.
- Select Skinning Joints: Select only joints that should be used when skinning the character. This means that it will not include end or toe joints. If you don't plan to include the eyes joints in the influences of the character's body, simply unselect them before skinning.
- Bind Skin Options: Opens the options for the function "Bind Skin" so the desired geometry can attached to the skinning joints. Make sure to set the option "Bind to" as "Selected Joints" to guarantee that only the desired joints are part of the influence.


Utilities:

GT Seamless FK/IK Switcher for Biped Auto Rigger GUI These are utilities and extra functions that you can use after creating your rig.

- Add Seamless FK/IK Switch to Shelf: Adds a new button to your current shelf. This button allows the animator to seamlessly switch between FK and IK for the arms and legs.
- Toggle: Seamlessly Toggles between FK and IK.
- FK to IK: Switches to IK and copies the FK pose into it.
- IK to FK: Switches to FK and copies the IK pose into it.

- Toggle Label Visibility: Uniformly toggles the option "Joint > Joint Labelling > Draw Label" (".drawLabel") for all joints in the scene (according to the state of the majority of them).

- Attach to HumanIK: Automatically creates a HumanIK character definition called "auto_biped" and assign all the available joints/bones to it. In case a character with the same name is already present in the scene, it will be overwritten.

- Extract Proxy Pose From Generated Rig: Attempts to extract the proxy pose from a generated rig. This function can't account for the scale set to the "root_proxy" as it gets baked when the rig is generated, so it should only be used in case you forgot to export the proxy pose during the creation of the character.


Example of seamless FK/IK switch being used:

GT Seamless FK/IK Switcher for Biped Auto Rigger Example



How to attach motion capture data to the rig through HumanIK:

- 1. Start by defining a character and assigning all bones to the definition (You can do that in one click using the utility "Attach to HumanIK")
2. Create a custom rig by clicking on the custom rig button. HumanIK Custom Rig Button
3. Assign the desired controls or use one of the provided templates so HumanIK knows what controls to update.
You can load a template by clicking on the button "Load Custom Rig Mapping". HumanIK Load Custom Rig Mapping Button Templates can be found in the assets folder.
4. Now you can source the motion from another character like you would normally do in HumanIK and it should automatically reverse engineer the control position to match the mocap data.
In case the elbows or knees pole vector controls give you trouble, you might be able to fix it using their custom attribute "Follow Foot" or "Follow Wrist" instead of relying on HumanIK to position it. This video explains in more details how this process works.
5. Now you can bake the movements to the custom rig by going to "HumanIK Button (blue button) > Bake > Bake to Custom Rig".
Feel free to delete the HumanIK character definition and mocap data after that as the keyframes are now already baked to the controls.

GT Auto Biped attached to HumanIK Example

Lock Attribute and Follow Object:

This rig comes with many custom attributes so you can tweak how much stability/flexibility you want and how the systems should behave.

- Lock Attribute: Many controls come with channels automatically locked so they behave in an expected way, but in certain situations you might want to unlock these so you have more flexibility. For this, you can just change the "Lock ATTR" (ATTR could be channels TRS, XYZ) custom attribute. A good example is the foot rolls. They have their Y and Z rotations locked by default, but in case you want to rotate the foot in another direction you can change "Lock YZ" to "Off".

- Follow Object: A few controls give you the option to follow other controls or move on their own. These are the pole vector controls (such as the IK knees and IK elbows) and the eye controls. Below you can see an example of the eye controls following or not the head.

GT Auto Biped Lock Attribute Example GT Auto Biped Follow Attribute Example GT Auto Biped Foot Rolls Example GT Auto Biped Follow Eye Example

FK/IK Switch Control, Stretchy System, and Finger Automation:

- FK/IK Switch: To control which system is currently active, just change the value in the attribute "Influence Switch" (".influenceSwitch"), when set to "0" (Zero) the rig uses forward kinematics (FK) when set to "1" (One) it uses inverse kinematics (IK). By default the visibility of the controls is automatically managed, but in case you want to control it manually, you can deactivate the attribute "Auto Visibility" and pick which one you want to see through the attribute "System Visibility".

- Stretchy Attributes: The custom attributes to control how the stretchy system behaves can be found under the FK/IK Switch Controls. In order to use the stretchy system the rig must be configured to to "IK".

- Finger Automation: To pose the fingers more conveniently, you can use the finger controls. These will automatically rotate all the fingers according to the provided parameters.


GT Auto Biped Stretchy Attributes Example GT Auto Biped Follow Attribute Example GT Auto Biped Finger Automation Example GT Auto Biped Stretchy System Example

Auto Breathing, Abduction/Adduction, and Knuckles Compression Systems:

- Auto Breathing: Causes the spine and clavicles joints to scale/translate up and down in a breathing rhythm. To control this system you can use the attributes found under the "main_ctrl".


- Abduction/Adduction System:: You can control the abduction and adduction actions for the fingers by scaling the "finger_ctrl" in "Z".


- Auto Knuckles Compression:: The auto knuckles compression system will make the knuckle joints (thumb01, index01...) move closer to one another as the hand closes in order to prevent gaps between the fingers.


GT Auto Biped Abduction Attribute Example GT Auto Biped Auto Breathing Attributes Example GT Auto Biped Breathing Automation Example GT Auto Biped Abduction/Adduction System Example

Settings:

Imports/Exporting Skin Weights:

This might be obvious, but when exporting and importing skin weights, don't forget to include all influences before importing it. This can be done by clicking on "Select Skinning Joints" then adding them as influences through "Rigging > Skin > Edit Influences > Add Influence"

Mirror Skin Weights with ngSkinTools:

If painting the skin weights with "ngSkinTools" (third party plugin) you might have to manually map some of the finger influences before mirroring it. This can be done through "ngSkinTools > Mirror > Influences Mapping > Edit influence associations... > Link, both ways"


Auto Rigger Work Sample:

Below you can watch a few animations that used GT Biped Auto Rigger to rig their characters.

GT Biped Auto Rigger Home Remedy Promo

Do you want to share your animation here? Send me a message!


</div>

GT Biped Rig Interface

GT Biped Rig Interface GUI

Extra functions and automation for rigs generated using GT Biped Auto Rigger.
This script includes FK/IK Switchers, Pose managers, Animation managers and more.

How to use it:
1. Under "Namespace:" click on "Get" to use the character's namespace.
(In case you're not using a namespace, just click on "Clear")
2. If the character is found, the FK/IK buttons will light up according to the current state.
3. Use the desired function to animate or pose your character.

FK/IK Tab:

  • This is the FK/IK Switcher. When a button is colored light grey, it means that the system recognized its current state as FK or IK. Use Switch to toggle or click on the desired system to force it into that state. (Whatever pose found in one system will be copied into the other) </li>

  • Auto Key: When transitioning from one system to the other you might want an animation to drive the transition. That's what this button will help you accomplish.
    Bake: Uses the provided range to bake every frame while rematching one system into the other
    Sparse: Creates the first and last keys necessary to transition from one system to the other.
    Get Selection Range (Button): Gets the range of your current selection (from the timeline).
    Get Timeline Range: Gets the start and end frame from the beginning and ending of the timeline. Helpful when trying to transfer all data from one system to the other. When used in conjunction with the option "Key FK/IK Influence" (Under the Tab "Settings")</p>
  • </ul>

    Pose Tab:

      Used to manage static poses. It doesn't key the character, only poses it.

    • Mirror: Copies the transform data from one side of the rig into the other, mirroring its current pose.
    • Reset Pose: Resets the pose back to the rig default values.
    • Import/Export Pose: Allows you to import/export the current pose from/to a file.

    Animation Tab:

      Used to manage static poses. It doesn't key the character, only poses it.

    • Mirror: Copies the animation data from one side of the rig into the other, mirroring its values.
    • Reset Animation: Deletes keyframes and Resets the pose back to the rig default values.
    • Import/Export Animation: Allows you to import/export the current animation from/to a file.

    Settings Tab:

      Overall Settings for this script. These are persistent and will retain their values in between sessions.

    • Allow Multiple Instances: When active, you may open multiple instances of this script. Useful for when animating multiple character in the same scene.
    • Transfer Data to Offset Control: Determines if the bake FK/IK data is transferred to the default Wrist/Ankle controls or their offset controls.
    • Key FK/IK Influence: Creates a key in the influence values when switching between systems (FK/IK).
    • Reset Persistent Settings: Resets current settings back to their default values.

    </div>

    GT Retarget Assistant

    GT Retarget Assistant GUI

    This script applies patches to a HumanIK Mocap character while it's been transferred to a Biped Rig (Created using GT Biped Auto Rigger)
    For this script to work, the target rig should have a custom rig defined under HumanIK.

      Patches:

    • Connect Toes: Uses the HumanIK data to create a constraint connection between the source ball joint and the biped rig ball joint. Essentially transferring the ball joint motion from the source (mocap) to the target (rig)
    • Reconnect Spine:This option will replace the data received from HumanIK and transfer the rotation directly from the spine joints to the rig controls.
      WARNING: It might sometimes look funny or exaggerated because there is no scale compensation happening. To fix that, you can use the influence slider or compress/expand the entire animation till the desired result is achieved. (Found inside the "?" button)
    • Connect Fingers:This option will extract the rotation of the finger joints that were defined through the HumanIK definition. If nothing was defined, nothing will be transferred. Much like the toe option, this option extracts whatever pose was left under the first frame of your timeline.
      Invert Finger Rotation: Makes the main rotation (usually "Z") rotate in the opposite direction, which can help motion capture skeletons with unexpected orientations become compatible. (Found inside the "?" button)
    • Leg Stabilization:This option will use the IK rig to collect the correct rotation data from the position of the mocap skeleton. This helps enforce the correct foot placement.
    • Unlock Rotations:WARNING: This option should not be used for all bakes. It will unlock all rotations allowing for the knee and elbow to receive rotation data into any axis. This might be desired in some cases when counter rotation is happening, but keep in mind that the data will lose some precision when transferred to IK,due to plane rotation nature of the IK solver. Consider using the option "Merge FK axis" to re-bake the FK controls back into one single plane rotation.
    • Merge FX Axis:This patch can only be used when "Unlock Rotations" options is active. It transfers the data to IK causing the channels to merge and then transfer it back into FK, making the animation live into only one channel instead of multiple channels. Even though it might look slightly incorrect, it might give you data that is easier to handle, essentially eliminating some counter rotations.

    HIK Character/Target Text Field
    This is your final rigged character that will receive the animation.

    HIK Mocap / Source Text Field
    This is the motion capture skeleton to be sourced into the rig.

    "P" (Properties) buttons
    Selects the HumanIK properties of the character found in the text field.

    Get Current Target/Source:
    Populates the "HIK Character/Target" and "HIK Mocap / Source" text fields with the same data found under the HumanIK menu.

    Bake Mocap with Fixes:
    Bakes the Source character animation into the Target character while applying the active patches to the characters.


    GT Game FBX Exporter

    GT Game FBX Exporter GUI

    This script exports a biped rig into FBX while including only the necessary data for animation or model to work in a real-time engine. Any namespaces included in animation files (due to being references) are automatically stripped before exporting.

    Generated FBX file uses real-time properties such as triangulation and SmoothingGroups and ContainerObjects

    • Export Model FBX File: Exports the main skeleton (joints under "root_jnt") and skinned geometry (found under "geometry_grp")
      This option is equivalent to exporting the skinned version of the model without animation into a real-time engine. It includes some keyframe data into it to be used a neutral pose.
    • Export Animation FBX File: Exports the main skeleton (joints under "root_jnt") after baking any interpolating keyframe data into individual keyframes.
      This option doesn't include the model, only the root skeleton. It should be used to export animation only. Any namespaces will be automatically stripped from the rig in the export.

    GT Extract Bound Joints

    GT Extract Bound Joints GUI

    This script generates the Python code necessary to select all joints influencing a skinCluster node.

    How to use it:
    1. Select bound meshes or surfaces.
    2. Click on the "Extract Bound Joints" button to generate the code.

    "Extract Bound Joints to Python" button:
    Outputs the python code necessary to reselect the joints into the "Output PYthon Curve" box.

    "Extract Bound Joints to Selection Sets" button:
    Saves the bound joints as selection sets instead of Python. One set per mesh. (May or may not include mesh, according to checkbox settings.

    Run Code:
    Attempts to run the code (or anything written) inside "Output Selection Command" box

    Save to Shelf:
    Saves the code (or anything written) inside "Output Selection Command" box as a shelf button.


    GT Connect Attributes

    GT Connect Attributes GUI

    This script automates the creation of connections between attributes from source (output) and target (input).

    Use Selection for Source and Target (s):
    When this option is activated, you no longer need to load sources/target (s).
    You can simply select: 1st: source, 2nd, 3rd... : target(s)

    Add Reverse Node:
    Adds a reverse node between connections.

    Disconnect:
    Break connections between selected nodes.

    Force Connection (Overrides Existing):
    Connects nodes even if they already have a connection.

    Add Custom Node Between Connection:
    Allows user to create a node between connections. (Excellent for controlling dataflow.)
    -Custom Node: Which node to create
    -Add Input Node: Creates one master control to update all in betweens.

    Load Source/Target Objects:
    Use these buttons to load the objects you want to use as source and target (s).

    Source Attribute and Target Attributes:
    Name of the attribute you want to connect.
    Requirement: Use long or short name (no nice names)

    List All Attributes and List Keyable Attributes:
    Returns a list of attributes that can be used to populate the Source and Target Attributes fields.


    GT Morphing Utilities

    GT Morphing Attributes GUI

    This script offers utilities to handle blend shape nodes and targets.

    Delete All Blend Shape Nodes:
    Deletes all nodes of the type "blendShape" found in the opened Maya scene.

    Delete All Blend Shape Targets:
    Deletes all targets found inside the scene's blend shape nodes, but leave the nodes behind.

    Load Morphing Object:
    Determines the source of the morphing node. Runs basic validation and populates the scroll field with blend shape nodes found under the selected object.

    Blend Shape Nodes:
    A list of the blend shape nodes found under the selected object.

    Search and Replace Target Names:
    Allows you to search and replace strings used on blend shape target names (only the selected blend shape target will be affected).

    • Search: If the string is found in the text, it is replaced. (case sensitive)
    • Replace: If found, the string is replace with the text provided here.

    Search and Replace Target Names:
    Runs search and replace operation.


    GT Morphing Attributes

    GT Morphing Attributes GUI

    This script automates the creation of attributes used to drive blend shapes.

    Load Morphing Object:
    Determines the source of the morphing node. Runs basic validation and populates the scroll field with blend shape nodes.

    Blend Shape Nodes:
    Once the morphing object is loaded, this box shows a list of blend shape nodes. Click on the desired node to select it.

    Load Attribute Holder:
    This is the object to receive the driving attributes. Usually a curve control.

    Desired Filter:
    Strings in this text field will be included in the list of affected targets.
    If empty, everything will be included. (multiple strings can be separated using commas ","

    Undesired Filter:
    Strings in this text field will be removed from the list of affected targets.
    If empty, filter will not take effect. (multiple strings can be separated using commas ","

    Drop-down Menu (Includes, Starts With, Ends With):
    These options determine how the desired or undesired strings will be filtered.

    • Includes: if the string is found in the text, it is accepted.
    • Starts With: If found at the begging of the word, it is included.
    • Ends With: If found at the end of the word, it\'s included.

    Ignore Uppercase:
    If active, the script will ignore the capitalization of the filter strings.',

    Add Separator:
    If active, the script will also attempt to create a locked attribute to be used as a separator.
    Example - "Blends: "-------------"

    Ignore Connected:
    If active, the script will ignore blend targets that already have incoming connections.

    Sort Attributes:
    If active, the script will sort the list of attributes before creating them.

    Modify Range:
    If active, the script will create an in-between node to remap the value according to what is provided under "old" and "new" minimum and maximum values

    Modify Range:
    If active, the script will create an in-between node to remap the value according to what is provided under "old" and "new" minimum and maximum values

    Old Min/Max & New Min/Max:
    This values are used for the remapping of the morphing attributes. Blend shapes are usually deactivated when as 0 and activated when at 1. If remapped to min: 0 and max: 10, the range would now be bigger but reflect the same values. For example 7.3 would actually load 0.73 of the blend target.


    GT Mirror Cluster Tool

    GT Mirror Cluster Tool GUI

    Script for mirroring clusters on mesh objects.

    Step 1:
    Load your mesh by selecting it in the viewport or in the outliner,
    then click on "Select Mesh".
    Requirements: Must be one single mesh transform.

    Step 2:
    Load your clusterHandle by selecting it in the viewport or in the outliner,
    then click on "Select Cluster".
    Requirements: Must be one single clusterHandle.

    Step 3:
    Select your mirror axis X, Y or Z. It will always mirror on the negative direction

    Step 4:
    To save time you can automatically rename the mirrored clusters using the search and replace text fields.
    For example search for "left_" and replace with "right_"


    GT Generate In-Between

    GT Generate In-Between GUI

    This script creates a inbetween transform for the selected elements.

    Layer Type:
    This pull-down menu determines what type object will be created.

    Parent Type:
    This pull-down menu determines where the pivot point of the generated element will be extracted from.

    Outliner Color:
    Determines the outliner color of the generated element.

    New Transform Suffix:
    Determines the suffix to be added to generated transforms.


    GT Create Auto FK

    GT GT Create Auto FK GUI

    This script generates FK controls for joints while storing their transforms in groups.
    Just select the desired joints and run the script.

    Colorize Controls:
    Automatically colorize controls according to their names (prefix). It ignores uppercase/lowercase.
    No Prefix = Yellow
    "l_" or "left_" = Blue
    "r_" or "right_" = Red

    Select Hierarchy:
    Automatically selects the rest of the hierarchy of the selected object, thus allowing you to only select the root joint before creating controls.

    (Advanced) Custom Curve:
    You can change the curve used for the creation of the controls. Use the script "GT Generate Python Curve" to generate the code you need to enter here.

    Joint, Control, and Control Group Tag:
    Used to determine the suffix of the elements.
    Joint Tag is removed from the joint name for the control.
    Control Tag is added to the generated control.
    Control Group Tag is added to the control group.
    (The control group is the transform carrying the transforms of the joint).

    Ignore Joints Containing These Strings:
    The script will ignore joints containing these strings. To add multiple strings use commas - ",".


    GT Create Testing Keys

    GT Create Testing Keys GUI

    This script creates a sequence of keys with offset,
    usually used for testing controls or skin weights.

    How to use:
    1. Select Target Object(s)
    2. Provide Offset Value(s)
    3. Create Testing Keyframes

    Offset Amount:
    These are the values that will be added to the object.
    If set to "0.0" it will be ignored. (No keys will be created)

    Reset All Offset Values:
    Resets all offset text fields to "0.0"

    Add Inverted Offset Movement:
    Auto creates another key with the inverted offset value.
    For example, an offset of "1.0" will also create another offset at "-1.0"
    creating an oscillating movement like a sine function.

    Use World Space (WS) Values:
    Moves objects as if they were not part of a hierarchy, which mimics the behavior of the world space.

    Delete Previously Created Keys:
    Deletes all keys attached to the selected controls before creating new ones.
    (Doesn't include Set Driven Keys)

    Create Testing Keyframes:
    Creates keyframes according to the provided settings.



    GT Make IK Stretchy

    GT Make IK Stretchy GUI

    This script makes an IK setup stretchy.
    Load an ikHandle and an attribute holder then click on "Make Stretchy"
    To use this script to its full potential, provide an object to be the attribute holder. (Usually the control driving the ikHandle)

    Stretchy System Prefix:
    As the name suggests, it determined the prefix used when naming nodes for the stretchy system.
    If nothing is provided, it will be automatically named "temp".

    Load IK Handle:
    Use this button to load your ikHandle.The joints will be automatically extracted from it.

    Load Attribute Holder:
    Use this button to load your attribute holder.
    This is usually a control. A few custom attributes will be added to this object, so the user can control the stretchy system.


    - Stretchy Attributes: The attribute holder will receive custom attributes to control how the stretchy system behaves.

    • Stretch: Controls the amount of influence the stretch system has.
    • Squash: Controls the amount of influence the squash system has. If activated the IK joints will no longer bend as they will become smaller.
    • Stretch From Source: Whether or not the system should stretch from the base of the IK system.
    • Save Volume: This will automatically attempt to shrink or inflate the joints in the middle of the IK system to simulate the loss or gain of volume.
    • Base Volume Multiplier: Controls how much of the "Save Volume" output should be transferred to the base of the IK system.
    • Minimum Volume: Controls the minimum save volume scale value allowed for the joints in the stretchy system. "0.4" would be 40% of its original scale.
    • Maximum Volume: Controls the maximum save volume scale value allowed for the joints in the stretchy system. "2" would be double of its original scale.

    By default, the attribute holder determines the stretch, to change this behavior, constraint or parent the object "stretchyTerm_end" to another object.



    GT Add Sine Attributes

    GT Add Sine Attributes GUI

    Create Sine attributes without using third-party plugins or expressions.
    Just select and object, then click on "Add Sine Attributes"


    - Sine Attributes:: The attribute holder will receive custom attributes to control how the stretchy system behaves.

    • Time: Multiplier for the time input (tick)
    • Amplitude: Wave amplitude (how high it gets)
    • Frequency: Wave frequency (how often it happens)
    • Offset: Value added after calculation, offset.
    • Tick: Time as seen by the sine system.
    • Output: Result of the sine operation.
    • Abs Output: Absolute output. (no negative values).

    Added attributes don't affect your attribute holder in any way, it's up to you do create necessary connections that will determine how these new values will be used.
    For example, connecting "sideOutput" to "translateY" will case the object to move up and down according to the side curve.



    GT Ribbon Tool

    GT Ribbon Tool GUI

    Tool for automating the process of creating ribbons. A ribbon is a commonly used setup in rigging that serves as a flexible surface for attaching joints and controls. Ribbon rigging is particularly useful for creating smooth and natural-looking deformations, especially in areas of the character where complex movements are required, such as the spine, limbs, or facial features. By attaching joints and control objects to the ribbon, animators can easily manipulate and pose the character, achieving realistic movement and expressions.

    • Prefix: Multiplier for the time input (tick)
    • Source Mode: What the ribbon should use as input data.
      • No Source: Creates a simple ribbon.
      • Surface: Uses provided surface as input.
      • Transform List: Creates ribbon using a provided transform list.
    • Number of Controls: How many ribbon controls should be created.
    • Number of Joints: How many skinned joints should be created.
    • Dropoff Rate: Dropoff rate used for binding controls to ribbon surface. Similar to dropoff rate when binding joints to surfaces.
    • Span Multiplier: If more than zero, it multiplies the number of spans on the target surface.
    • Equidistant: Ensures equidistant calculation between the distance of every follicle.
    • Add FK: Creates extra forward-kinematics controls to drive ribbon controls.
    • Parent Skin Joints: Creates a hierarchy with the generated driven joints.
    • Constraint Source: Constraint source transforms to follow the ribbon. (This skips joint creation)
    • Source Surface / Transform List: Determines what should be used as source data. (Different data depending on source mode)
      • No Source: Option is disabled as no source is needed. (Ribbon is a simple surface going from -12 to 12 in the grid)
      • Surface: Expects the user to set an existing surface (nurbsSurface) to be used as ribbon.
      • Transform List: Expects the user to set a list of objects to be used as reference for when creating the ribbon.
        Surface is created using the position of the selected objects. Order is important and is used to create the flow of the ribbon.
    • Create Ribbon: Creates a ribbon setup using the preferences above.


    GT Utilities

    GT Utilities Menu

    GT Utilities (GTU) is a collection of smaller functions that don't necessary need or use a window/dialog.
    Most of these functions can be found under "GT Tools > Utilities" but a few of them are scattered throughout other menus.

    Standalone use:
    In case you're using the standalone version of GT Utilities, you'll have to uncomment one of the functions at the bottom of the script.

    Reload File

    This utility reloads the current Maya file (scene).
    Reloading means re-opening it without attempting to save.
    It only works if the file was saved at least once.

    Open File Directory

    This utility attempts to open the current Maya file directory.
    In case it fails, the path for the file is printed to the script editor.
    It only works if the file was saved at least once.

    Resource Browser

    Opens the resource browser, a menu that allows the used to see what images are available inside Maya and download them.

    Unlock Default Channels

    This function unlocks the translate, rotate, scale and visibility channels for the selected objects.

    Unhide Default Channels

    This function unhides/shows the translate, rotate, scale and visibility channels for the selected objects.

    Unhide Default Channels

    This function unhides/shows the translate, rotate, scale and visibility channels for the selected objects.

    Uniform LRA Toggle

    This utility makes the visibility of the local rotation axis of the selected objects uniform.
    For example, if two out of three objects have their LRA visible, it makes all of them visible.

    Convert Joints to Mesh

    Converts selected skeleton to a mesh version of it. Helpful when sending joints into another program that might not support or display joints in the same way Maya does. To use it, select the root joint of your skeleton and run the function. (No need to select all joints, just the root)

    Uniform Joint Label Toggle

    Uniformly toggles the option "Joint > Joint Labelling > Draw Label" (".drawLabel") for all joints in the scene (according to the state of the majority of them).

    Select Non-Unique Objects

    Selects all objects with the same short name. (A short name is the name of the object without its path)

    Full HUD Toggle

    Toggles most of the Heads-Up Display (HUD) options according to the state of the majority of them.
    (Keeps default elements ON when toggling it OFF)

    Import References

    Attempts to import all loaded references.

    Remove References

    Attempts to remove all references.

    Move Pivot to Top

    Moves the pivot point of the selected objects to the top of their bounding box.

    Move Pivot to Base

    Moves the pivot point of the selected objects to the base of their bounding box.

    Move Object to Origin

    Moves the selected objects to the center of the grid (0,0,0) origin point.

    Reset Transforms

    Resets translate, rotate and scale back to zero. For example, you can select all controls of a character and reset its pose.
    This pose will not reset translate for joints.

    Reset Joints Display

    Resets the visibility of all joints. It sets the radius of all joints to one. (Unless the channel is locked) and sets the visibility to "On". It also changes the global joint display scale (multiplier) back to one.

    Reset "persp" Camera

    Resets most of the attributes for the default "persp" camera.

    Delete Namespaces

    Merges all namespaces back to the root, essentially deleting them.

    Delete Display Layers

    Deletes all display layers.

    Delete Nucleus Nodes

    Deletes all nodes related to the nucleus system.

    Delete Keyframes

    Deletes all keyframes. (It does not affect set driven keys)

    GT Utilities Modeling

    Preview All UDIMs

    Generates previews for all file nodes using UDIMs.

    Convert Bif to Mesh

    Converts selected Bifrost meshes into the standard Maya meshes.
    (Bif objects are created using Bifrost Graph)

    Copy Material

    Copies a material from the selection to the clipboard to later be applied to another object.
    It supports components such as faces.

    Paste Material

    Pastes a material to the selection. (Use the Copy Material function to copy it first)
    It supports components such as faces.

    GT Utilities Curves

    Combine Curves

    Moves curve shapes of the selected curves into one single transform, essentially combining them.
    In case a bezier curve is found, the script gives you the option of converting them to NURBS.

    Separate Curves

    Parents every curve shape of the selection under a new transform, causing them to be separated.


    GT Startup Booster

    GT Startup Booster GUI

    This script helps decrease the time Maya takes to load before becoming fully functional.

    How It works:
    Not all plugins are used every time Maya is opened, but they are usually still loaded during startup. This causes the startup time to be quite slow.
    This script aims to fix that, by helping you skip the heavy plugins while still having easy access to them.

    1st: Optimize.
    2nd: Create Shelf Buttons.
    3rd: Enjoy faster startups.

    Plugin List:
    This is a list of common plugins that are usually automatically loaded by default.
    Plugin File: Name of the file used by the plugin.
    Auto Load: Is this plugin automatically loading?
    Installed: Is the plugin installed?
    Control: General name of the plugin.

    "Shelf Button" and "Auto Load" Buttons:
    Shelf Button: Creates a Shelf Button (under the current shelf) to load the plugin and give you feedback on its current state.
    Auto Load: Toggles the Auto Load function of the plugin.
    (same as "Auto Load" in the plugin manager)

    Custom Shelf Button:
    This script couldn't account for every heavy 3rd party plug-in.This shouldn't be an issue as you can manually add any plugin.
    Just manually deactivate your third party plugin by going to "Windows > Settings/Preferences > Plug-in Manager"
    Then create a custom load button using the textField that says "Other Plugins"


    GT fSpy Importer

    GT fSpy Importer GUI

    This script allows you import the data of a JSON file (exported out of fSpy) into Maya.

    What is fSpy:
    fSpy is a fantastic software that allows you to quickly and easily create a 3D camera match.
    The files created with it can easily be imported in Blender, but not in Maya. That's what this script aims to address.

    You can find more information and a tutorial on their website: https://fspy.io/

    How It works:
    Using the JSON file, this script applies the exported matrix to a camera so it matches the position and rotation identified in fSpy.
    It also calculates the focal length assuming that the default camera in Maya is a 35mm camera.

    How to use it:
    Step 1: Create a camera match in fSpy. (There is a tutorial about it on their website)
    Step 2: Export the JSON file by going to "File > Export > Camera parameters as JSON".
    Step 3: Load the files by opening the script and entering the path for your JSON and Image files.
    Step 4: Use the Import button to generate the camera.

    JSON File Path:
    This is a path pointing to the JSON file you exported out of fSpy.
    In case the file was altered or exported/created using another program it might not work as expected.

    Image File Path:
    A path pointing to the image file you used for your camera match with in fSpy.
    Do not change the resolution of the image file or crop the image or it might not work properly.

    Set Scene Resolution:
    Uses the size of the image to determine the resolution of the scene.
    This settings are found under "Render Settings > Image Size" (Resolution)

    +Z Axis is +Y:
    Rotates the camera so the default +Z axis becomes +Y.
    This might be necessary in case the default settings were used inside fSpy. This is because different softwares use different world coordinate systems.

    Lock Camera
    Locks the generated camera, so you don't accidentally move it.


    GT Maya to Discord

    GT Maya to Discord GUI

    This script allows you to quickly send images and videos (playblasts) from Maya to Discord using a Discord Webhook to bridge the two programs.

    Webhooks:
    A webhook (a.k.a. web callback or HTTP push API) is a way for an app to provide other applications with real-time information.
    You can use it to send messages to text channels without needing the discord application.

    How to get a Webhook URL:
    If you own a Discord server or you have the correct privileges, you can go to the settings to create a Webhook URL.

    To create one go to:
    "Discord > Server > Server Settings > Webhooks > Create Webhook"
    Give your webhook a name and select what channel it will operate.
    Copy the "Webhook URL" and load it in the settings for this script.

    If you're just an user in the server, you'll have to ask the administrator of the server to provide you with a Webhook URL.

    Send Buttons:
    Send Message Only: Sends only the attached message.
    (Use the text-field above the buttons to type your message)

    Send Desktop Screenshot: Sends a screenshot of your desktop.
    (This includes other programs and windows that are open)

    Send Maya Window: Sends only the main Maya window.
    (This ignores other windows, even within Maya)

    Send Viewport: Sends an image of the active viewport.
    (Includes Heads Up Display text, but no UI elements)

    Send Playblast: Sends a playblast video.
    (Use the script settings to determine details about the video)

    Send OBJ/FBX: Sends a model using the chosen format.
    For settings, go to "File > Export Selection... > Options"

    Settings:
    The settings are persistent, which means they will stay the same between Maya sessions.

    Custom Username:
    Nickname used when posting content through the webhook.

    Image and Video Format:
    Extension used for the image and video files.

    Video Options:
    Determines the settings used when recording a playblast.

    Feedback and Timestamp Options:
    Determines feedback visibility and timestamp use.

    Limitations:
    Discord has a limit of 8MB for free users and 50MB for paid users for when uploading a file.
    If you get the error "Payload Too Large" it means your file exceeds the limits. Try changing the settings.


    GT Render Calculator

    GT Render Calculator GUI

    This script helps you calculate the total render time of a task based on how long it takes to render a frame..

    Average Time Per Frame:
    Integer describing the average time used to render one frame of your animation.
    The drop-down menu to the right describes the unit used for the provided number. Seconds, minutes or hours.

    Total Number of Frames:
    The total number of frames to be rendered.
    The "Get Current" button uses the timeline to determine how many frames are likely being rendered using the in and out values.

    Total Number of Machines:
    The number of computers rendering the same job.
    The render time may vary per machine based on the available setup.


    </body>