1.7.20 (2022-12-03)


  • (Shelf) Added triggerToggle to developer shelf menu.

  • (Zapi) Plug.deleteElements() method added to batch delete array elements.

  • (Libs.Cmds.Objectutils Modules) Added author and python example documentation.

  • (Libs.Cmds.Shader.Shadertypes Modules) Added author and python example documentation.

  • (Locators.Py) With function for create and matching a locator to objects or component selection.

  • (Matching.Py) Various functions for for matching objects to components.

  • (Selection.Py) New function added componentOrObject() which returns whether the first object in the selection is an object or component.


  • (Alembic) Fix UserAttr and UserAttrPrefix using incorrect types.

  • (Controllertags) Fix Missing prepopulate connection from parent controller tag.

  • (Qt) Fix Layouts having the same parent causing Qt logs to be output of linux/OSX.

  • (Zapi) Fix deleting element not applying.

  • (Zapi) Plug disconnect doesn’t apply if you provide a Modifier and apply is True.

  • (Mayacolors.Py) Fixed full crash related to om2 errors with opening old Redshift scenes in 2022 and above and anything color ACES conversion related.

  • (Mayastandardsurface.Py) Fixed issues converting Lamberts/Blinns etc to standardSurface with no clearCoat values.

  • (Riggingmisc.Py) MarkCenterPivot works with objects and if nothing is selected.


  • (Curves) Optimize applying shape colors to improve performance.

  • (Polevectorposition) PoleVectorPosition to raise not error when the angle is 0.

  • (Shelf) Shelf now supports checkboxes.

  • (Create.Py) CreatePrimiveAndMatch() function changed to no support matching to component and multi-object selection.

  • (Riggingmisc.Py) MarkCenterPivot() function now uses new code and will create a locator at worldcenter if nothing is selected, also supports multi-object selection.

1.7.19 (2022-11-17)


  • (Docs) DocString fixes.


  • (Attributes.Py) Added max and min kwargs to createAttribute helper function.

  • (Attributes.Py) Create attribute and connect helper function added used in blendshape hive build scripts.


  • (Mayacolorbtn) Qt Error when calling MayaColorBtn signal with PyQt5.

  • (Arnoldhdri.Py) Fixed legacy scenes 2022+ error/warnings with ‘scene-linear Rec.709-sRGB’ could not be found. HDRI color space fix.

  • (Cmdsattributes) Fix py3 syntax warning when creating attribute.


  • (Zapi) Added show method for attributes.

  • (Zapi) Setting an attribute to hidden changes keyable state.

1.7.18 (2022-11-15)


  • (Qt) Fix wrapInstance usages not support PyQt.

1.7.17 (2022-10-26)


  • (Animobjects.Py) Added a function that returns objects and graph editor curves and channel box selection, useful for selection based animation tools.

  • (Attributes.Py) Added proxyAttributes() function for returning all the attributes in the channelbox with options.

  • (Attributes.Py) ChannelBoxAttrs was erroring when returning no keyable or channelbox attributes. Now fixed.

  • (Bakeanim.Py) BakeLimitKeysToTimerange() function that converts a cycle into start end range with good tangents.

  • (Definedhotkeys.Py) Added new Zoo windows to hotkeys, Hive Mirror Copy Paste, Cycle Animation Tools, Hive Naming Convention, Match Swatch Color Space.

  • (Grapheditorfcurve.Py) Added functions for autoTangentCycle() which corrects start/end tangents so they loop on cycles.

  • (Keyframes.Py) Paste could fail if start and end frame were both zero, now only provide the start frame on the paste.

  • (Selection.Py) Misc selection set helper functions added.

  • (Selection.Py) Comments added Ignore ( ) Comments added.


  • (Math) Support converting to and from scene units.

  • (Shelf) Added Refresh viewport action to shelf menu.

  • ( copyPasteKeys() function now supports basic static keyframe support.

  • ( mirror functions now support static values and limit time range options.

  • ( Added animatableAttrs() function for returning all the animatable attr names on a node/object.

  • ( Added channelBoxAttrs() function for returning all the attributes in the channelbox with options.

  • ( Added new module for mirror copy/pasting animation between objects.

  • ( mirrorPasteAnimSel() function for mirroring generic animation using a UI.

  • ( Added helper function for returning pair lists with multiple object selection. Options for oddEven or first half/second half.

  • ( Added bakeLimitKeysToTimerangeSel() function that limits a cycle to the in and out frame, whilst maintaining the cycle.

  • ( Added copyPaste keyframe helper function for copying keys from one object/node to another.


  • (Markingmenu) Regression fix for supporting builtin maya icons.

  • (Spaceswitching) When adding a Point constraint space the constraint offset is incorrect(done by maya), this change we do this ourselves.


  • (Mainwindow) Removed show argument from init function due to visual artifacts it can cause due to events.

  • (Renderer) Updated depreciated call to preference coreInterfaces.

  • (Uninstaller) Fix window position saving.

  • ( improved autotangentCycle functions for selection and other.

  • ( Incremented version number.

  • (Zoo_Tools_Default.mhk) Reverted animation step keys to fully support Maya functionality.

1.7.16 (2022-09-29)


  • (Arnoldhdri.Py) HDRI skydomes in Arnold now set as scene-linear Rec.709-sRGB instead of raw which fixes ACES color space issues.

  • (Bgcycg.Zoogshad) Shader name is now correct Changed ( ) Duplicated kwargs fixed.

  • (Cmdswidgets.Py) MayaColorBtn (color picker) now accounts for Rendering and Display Space in 2023. 2022 and below defaults to srgb > linear as previously. Added ( ) Added viewspace control for displayColorToCurrentRenderingSpace() and renderingColorToDisplaySpace() BugFix ( ) Depreciated renderingColorToDisplaySpaceLegacy() and replaced with a new function renderingColorToDisplaySpace() that correctly handles viewspaces in 2023. cmds version is broke now in 2023.

  • (Default Alembic Cyc Models) Better UVd cyc models as defaults.

  • (Exportabcshaderlights.Py) SetShaderAttrsZscnInstance function now can set as display space instead of a hardcoded srgb conversion. Supports ACES. Changed ( ) shadervalues() method changed kwarg to convertToDisplay. Supports ACES instead of hardcoded srgb conversion. Bugfix ( ) convertDict() methods now check if the emmision dict key exists, will work again on older presets.

  • (Mayacolors.Py) Fixed bug re API color code not working in 2022.

  • (Normalarnold.Py) Arnold normal map support added Added ( ) Redshift normal map support added Changed ( ) most methods moved to as shared with redshift.

  • (Normalrenderman.Py) Support for renderman normal and bump maps. Basic functions supported.

  • (Redshiftredshiftmaterial.Py) Setting metalness would not reset the fresnel mode and reflective color. Now fixed.

  • (Shaderbase.Py) Added methods for converting rendering to display space colors and back again.

  • (Shaderbase.Py) New methods for setting and getting colors in display space. Added ( ) Added functions for converting swatch colors between different render spaces. Added ( ) Added functions for converting display and rendering colors back and forth. Added ( ) new lists with default render and display spaces.

  • (Shaderbuilder.Py) More options for picking up diffuse color. Added ( ) Recognises the main shader types if no shading group.

  • (Shaderbuilder.Py) Removed redundant code.

  • (Shadertypes) All shader types now have normal and outColor attributes Added ( shadertypes ) All shader types now inherit NodeMultiBase Changed ( shadertypes ) self.shaderNode is now self.node, has been refactored on all shader types.

  • (Unlockunhideall.Py) Unlocks and unhides everything under a hierarchy selection.

  • (Viewportmodes.Py) Look through selected command. Panels (viewport menu) > Look Through Selected.


  • (Math) Added Axis vector by index constant for convenience.

  • (Mayaapi) Support for anim curve (de)serialization.

  • (Nodeeditor) Added methods to graph upstream and downstream nodes by UI plug.

  • (Nurbscurve) Added rotationsAlongCurve function.

  • (Shapelib) Added perpendicularAxisFromAlignVectors, primaryAxisNameFromVector, nonPrimaryAxisNamesFromVector functions.

  • (Zapi) Added ikHandle vector helper functions which convert between a vector and ikHandle Vector enum.

  • (Zapi) Added nurbsCurveFromPoints helper function.

  • (Zapi) Delete Constraints helper function added to purge zoo constraints including the meta data.

  • (Zapi) New wrapper classes DisplayLayer, AnimCurve, SkinCluster, IkHandle, Camera, Mesh, NurbsCurve.


  • (Nurbscurves) Fix createCurveFromPoints doubling up the “shape” Name suffix.

  • (Skinreplacejoints) Fix replaceJointsMatrixSuffix filtering for transforms instead of joints.

  • (Toolpalette) Fix bug where a missing plugin icon would stop zootools from loading.

  • (Zapi) RuntimeError raised when setting visibility when it’s plug is connected.

  • (Zapi) Fix reset transform using isConnected instead of is Destination for safely checks.

  • (Zapi) RuntimeError maya error raised when attempting to reset local transform when it’s connected.

  • (Zapi) SetDefault on a plug never gets set.

  • (Zapi) Ls function raised TypeError.


  • (Mayaapi) Attribute serialization now ignore default flag values.

  • (Mayaapi) Support fractionMode for motion paths.

  • (Mayanodeeditor) Support for setting the node view mode.

  • (Zapi) Added Time class Type.

  • (Zapi) Convert DagNodes to DagPaths to better support geometry world space queries.

  • (Zapi) Search for a plug now supports children and arrays.

  • (Zapi) BuildConstraint to now return created nodes.

  • (Mayaapi) Support for adding missing compound attribute children. Note: ordering existing children to align to structure isn’t currently supported.

1.7.15 (2022-07-25)


  • (Lightpresets.Json) Accidentally added Ignore ( postdamerPlatz.tx ) Accidentally added.

  • (Redshifthdri.Py) Redshift HDRIs no longer turn black while cycling through HDRIs. The intensity is now returned correctly.

  • (Renderertransferlights.Py) HDRIs correctly search for HDRIs in all paths if the HDRI path isn’t found for light presets etc. Changed ( ) has been renamed to Added ( ) Various improvements, version one is basically working but rough and a WIP. Added ( ) Support for plugging in scalar textures Added ( ) Added normal attribute, should be added to other shaders too.

  • (Shaderbase.Py) SetShaderName returns the renamed name properly. BugFix ( ) Loads the lookdev toolkit plugin automatically if not loaded.

  • (Shaderbuilder.Py) Added some defaults to the SUBSTANCE dict naiming conventions.

1.7.14 (2022-07-20)


  • (Focuspuller.Py) New function for checking if the focusDistance attribute already has keys or connections.

  • (General) Helper function for determining if the current scene is untitled.

  • (Hdribase.Py) Added methods for setting and getting intensityMultiply and rotateOffset attrs.

  • (Lightsmultihdri.Py) Added functions for saving and loading the intensity multiplier and rotation offset info to the zooInfo file.

  • (Lightsmultihdri.Py) CreateDefaultRenderer() function has options for creating/adding to a light group and selecting the light after creation.

  • (Repeatcommand) Added support for maya Repeat last command with a decorator.

  • (Zapi) Added clearSelection function.


  • (Focuspuller.Py) Handles offsets on the camera’s rotateAxis attributes. Was affecting cams brought back from Unreal.

  • (Metafocuspuller.Py) Cleanup no longer fails on meta trying to pull names that no longer exist.

  • (Renderermixin) Renderer filter incorrectly sets data model filter.

  • (Rotateorder) Baking rotateOrders doesn’t respect existing rotateOrder key frames.

  • (Zapi) PlugByName doesn’t convert plug node to zapi.


  • (Meta) Reduced calls to initialize meta attributes when iterating the network.

  • (Polevector) Support providing pole vector distance.

  • (Zapi) Added apply modifier argument for undo renaming.


  • (Assorted) Doc strings fixed to be sphinx compatible. Added ( assorted ) Assorted doc strings added and tweaked.

  • (Cleanup.Py) LockNormals_toHS no longer reloads Added ( ) objClean() now keeps parent structure bt default while importing objects back into Maya.

  • (Cmds.Rst) Doc strings changed to avoid using zoo maya commands.

  • (Defaultassets.Py) Support for rotation offset and intensity multiply values for the HDRI Skydomes. Switched build to new code. Changed ( ) Skydome Platz hardcoded rot offset to be -42 to match with latest assets.

  • (Hdribase.Py) ConnectedAttrs() method which returns the main attributes that have connections. Changed ( ) removed connection check while returning scalar and vector values. Connections should be checked elsewhere. Changed ( ) removed connection check while returning scalar and vector values. Connections should be checked elsewhere. Changed ( ) HDRI builds from new hdribase code with class instances. Added ( ) HDRI handles rot offset and multiply intensity info. Callibrates with new HDRI library.

  • (Metasplinerig.Py) Spline rig marking menu no longer fails when there is only one set of controls eg FK only.

  • (Rendererconstants.Py) Added the suffix _RAMP to be filtered in the browsers as a supported Maya shader. Added ( ) First pass texture builder module, heavy WIP.

  • (Uvmacros.Py) Support for various function with repeat last command “g” hotkey.

  • (Vrayrendersettings.Py) Added VRay render settings for opening the frame buffer. Changed ( ) If the Maya renderer is set open the Arnold renderview. Added ( ) support for opening VRays render view.

1.7.13 (2022-05-31)


  • (Arnoldhdri.Py) SetImagePath() method is now working.

  • (Arnoldhdri.Py) Texture support via class instance to Arnold HDRI lights.

  • (Cleanup.Py) Added triangulate ngons function.

  • (Cleanup.Py.Py) Select Tris and NGons function.

  • (Components.Py) Added a number of functions related to triangle faces and nGon faces.

  • (Exportabcshaderlights.Py) SaveShaderInstanceZooScene() can now save as srgb color.

  • (Filetexturebase.Py) Added checks to validate the texture network, small doc fixes.

  • (Filetexturebase.Py) Base class for file textures.

  • (Hdribase.Py) - can select the shape node and transform node directly in the class for UIs.

  • (Hdribase.Py) Delete and suffix methoda added.

  • (Hdribase.Py) HDRI Skydomes added calibration between renderers for scale and rotate, subclasses tweaked as well.

  • (Hdribase.Py) ParentZooLightGroup method, to add the light to a renderer group for cleanup.

  • (Hdribase.Py) The shape node of the HDRI light can now be accessed from self.shapeNode (zapi).

  • (Lightconstants.Py) New dictionaries/lists for retrieving hdri information.

  • (Lightingutils.Py) New function filterAllLightTypesFromNodes() to retrieve specific light tytpes from a node string list.

  • (Lightsmultidhri.Py) The entry point for creating and ingesting hdri skydomes with multi-renderer support.

  • (Lightsmultihdri.Py) Added better support for finding HDRI instances via renderer and in the scene. Added ( ) Added the ability to ingest a texture network tweaks and docs added.

  • (Lightsmultihdri.Py) File renamed and better handling of shape vs tranform nodes.

  • (Mayafiletexture.Py) Class for Maya native file textures.

  • (Nodemultibase.Py) ShortName() method added for light names.

  • (Shaderbase.Py) Method setFromDict() now can be applied in SRGB Color using the flag colorsAreSrgb=True.

  • (Shaderbase.Py) Method shaderValues() can be converted to SRGB with the kwarg convertToSrgb.

  • (Shdmultconstants.Py) Constant modified was ‘gEmission_srgb’ now ‘gEmission’. Causes some backward compatibility issues, should be ok.

  • (Splinebuilder.Py, Splines.Py) Added up vector controls (work in progress).

  • (Subdivisions.Py) Added polysmooth objects, will be used later.

  • (Vrayhdri.Py) Support for VRay HDRI image and texture network.

  • (Zapi) Added default and setDefault plug methods.

  • (Zapi) Basic support for blendShape nodes.


  • (Assorted) Changes to shader code to calibrate shader presets (multi-renderer) which were not importing and saving as SRGB color.

  • (Assorted Files) Assorted bug fixes with the new hdri classes.

  • (Defaultassets.Py) Sets renderer to Arnold for shelf light presets if “Maya” is set as the renderer.

  • (Hdribase.Py) Select transform no longer selects the shape node.

  • (Lightingutils.Py) Function getAllLightShapesInScene() was returning duplicates, now fixed.

  • (Mayaapi) Incorrect maya attribute type created when enum fields is [].

  • (Mayaapi) Setting default to last index of an enum never happens.

  • (Mayastandardsurface.Py) Fixed clear coat being applied as grey and clouding the color of standardSurface shaders.

  • (Metasplinerig.Py) Duplicate the spline rig wasn’t including skinned geo in 2022 and 2023. Fixed bug.

  • (Metasplinerig.Py) Exporting a spline rig now supports multiple meshes.

  • (Nodemultibase.Py) Self.shapeName() method grabs the transform name correctly now with

  • (Rendermanhdri.Py) Intensity sets as scalar instead of vector.

  • (Spaceswitching) Applying multiple constraint types on the same node would result in metadata being overridden.

  • (Spaceswitching) Drivers returning incorrect element when there’s no data.

  • (Spaceswitching) Space Index isn’t ignored when the targetNode isn’t valid.

  • (Splinerig) Creating a SplineRig MetaNode without a name results in a TypeError.

  • (Splinerigswitcher.Py) Was erroring on None types in retrieveSpineControlList() and breaking space switching if missing spline rig parts. Fix and handles the missing parts now.

  • (Toolpalette) Shelf variants not being passed to plugin execution.

  • (Toolsetwidget) UpdateProperties doesn’t unblock signals when an error occurs.

  • (Vrayhdri.Py) Intensity sets as scalar instead of vector.

  • (Zapi) Calling value() on a Message plug array which contains connections doesn’t convert MObjects to Zapi Nodes.

  • (Zapi) Missing registration of BlendShape Node class.


  • (Broadunittests) Remove Unused Preferences access.

  • (Defaultassets.Py) Replaced om2 messages with output.

  • (Mayatoolpalette) Rewrote Shelf logic to Match the latest tool palette code.

  • (Renderermixin) Avoid loading preferences on module import.

  • (Splinebuilder.Py) Disabled the new up vector controls temporarily for release as they are a WIP and are not finished.

  • (Toolpalette) Migrate menu logic to the latest changes in toolPalette.

  • (Toolpalette) Shelf menu items are now QT based.

  • (Zooicons) ZooIcons toolset moved to zootoolsets repo.


  • (Scripteditor) Removed Redundant maya script editor dialog Replaced with source code editor.

1.7.12 (2022-04-16)


  • (Arnoldhdri.Py) Added Arnold HDRIs subclass to the new HDRI light code.

  • (Attributes.Createattribute() ) Helper function for creating attributes with non-keyable settings.

  • (Attributes.Py) DisableNonUniformScale() function for disabling non-uniform scale on an object.

  • (Attributes.Py) New functions hideAttr() and hideAttrs() while supporting non-keyable attributes.

  • (Attributes.Visibilityconnectobjs() ) Added function for connecting a control visibility attribute to control the visibility of many other nodes.

  • (Commands) Added MatchTransformsBakeCommand.

  • (Commands) Added match transforms command.

  • (Convertshaders.Py) Added convertShaderScene() and convert save scene functions for batch converting of full scenes to a new shader type.

  • (Convertshaderscene.Py) Script run for converting shaders in scene when run standalone.

  • (Hdribase.Py) First pass base class for HDRI Skydomes, new code.

  • (Joints.Jointdrawhide() ) To show/hide a joint list.

  • (Keyframes.Py) Added transferAnimationSelected() and transferAnimationLists() for transferring animation outside of Hive. Added ( ) Basic header documentation examples for building lights without UIs.

  • (Layers.Py) Added a dedicated module to render layers and refactored existing code.

  • (Lightconstants.Py) Added VRay renderer string to

  • (Lightconstants.Py) New module for light constants for all lights and renderers.

  • (Nodemultibase.Py) Base class mostly for handling different renderers for lights, shaders, textures etc.

  • (Redshifthdri.Py) First pass class for Redshift HDRI Skydomes, new code.

  • (Rendermanhdri.Py) Added Renderman HDRIs subclass to the new HDRI light code.

  • (Skinreplacejoints.Py) Added function replaceJointsMatrixSel() replace skin joints by selection.

  • (Standalone_Runconvert.Py) Module that runs via mayapy in standalone mode.

  • (Vrayhdri.Py) Added VRay HDRIs subclass to the new HDRI light code.


  • (Attributes.Createenumlist() ) returns the attribute again.

  • (Controls.Py) Needed to have global ROT_AXIS_DICT.

  • (Convertshaders.Py) Handles conversion of shaders that are not assigned to geo.

  • (Core) Incorrect function call for determining maya mode.

  • (Core) Triggers commands fail if a None type is Passed. Now filters out None Type.

  • (Mayaunittest) Globally needed plugins are turned off after a test.

  • (Metaviewportlight.Py) Will set specularIntensity value now.

  • (Renderertransferlights.Py) Changed path in docstring to avoid unicode errors.

  • (Shelve) Fix py3.9 syntax warning.

  • (Splinerig) AttributeError raised when retrieving controls which aren’t connected yet.

  • (Splinerigrebuild.Py) Added back the imports.

  • (Viewportlights.Py) SPECULAR_MULTIPLIER back to 1.0 its correct value, can set specularIntensity.

  • (Zapi) Adding DG nodes to objectSet raises a runtimeError.

  • (Zapi) Maya2023 fix for iterating over a plug array not returning the first index when the plug array has no used indices.

  • (Zapi) OSX Crashes when querying asset container published attributes.

  • (Zapi) Space switch attribute channel box is set to true leading to an un-keyable attribute.

  • (Zapi) When retrieving keyframes for baking every frame the last frame is missing.


  • (Artistpalette) Reuse base code for command execution strings.

  • (Attributes.Addproxyattribute() ) Better handling of non-keyable setting in the channelbox and refacotr to many files.

  • (Attributes.Addproxyattribute() ) To better handle non-keyable settings.

  • (Attributes.Createenumattrlist() ) Changed function to be consistent with others and better handling of non-keyable settings.

  • (Commands) Import statement cleanup to avoid incorrect class registration.

  • (Documentation) Fix doc string typos and continued work on adding docstrings.

  • (Documentation) Package title typo fix.

  • (Hdribase.Py) More generic code added to the HDRI base class.

  • (Mayaapi) Better support for retrieving MPlug from the full path.

  • (Redshifthdri.Py) Redshift class changed reusable code moved to

  • (Viewportlights.Py) Disabling specular lights and setting the dirctional light intensity correctly (WIP).

  • (Zapi) Casting Node to str will return the full path name not the short name.

  • (Zapi) DagNode.create Type argument renamed to nodeType.

  • (Zapi) Error classes moved to zapi/

  • (Zapi) Space switching initial support for both decompose and offset Parent Matrix in the same maya version.

  • (Zapi) Zapi __repr__ for nodes will now return the fullPathName so passing to cmds is possible.


  • (Convertrotateuplist() ) Removed function convertRotateUpList() and replaced with a dictionary in zoocore, refactor for many files.

1.7.11 (2022-03-14)


  • (Convertshaders.Py) Handles supported texture connections while converting. Maintains connections.

  • (Definedhotkeys.Py) Added newer Zoo Tools open hotkeys as unbound hotkeys. Old tools now renamed correctly with newer functions.

  • (Normalbase.Py) Starting texture support for normal/bump maps.

  • (Rendererconstants.Py) Added RENDERER_BROWSER_FILTERS and ALL renderer as globals. Also RENDERER_ICONS_LIST_ALL as a list of renderers including ALL.

  • (Renderers.Py) Added handling of “All” renderer and more filtering options for .MA/.MB image browsers via the renderer names.

  • (Shaderbase.Py) Better supports setting and getting color values in srgb space, for example from UIs.

  • (Shaderbase.Py) Documentation added.

  • (Shaderbase.Py) Supports returning texture connections and reconnecting textures, useful while converting between shader types.


  • (Core) Fix specific use of ntpath instead use os.path.

  • (Definedhotkeys.Py) Adding open_alembicAssets() hotkey fix due to name change.

  • (Mayaapi) Fix previous git commit incorrectly merging.

  • (Mirror.Py) Uninstance selected now supports mirror objects that are deep in hierarchies.

  • (Rendermanpxrsurface.Py) PXR surface is working again and added emission too.

  • (Shaderexport) Handle support for shaders which aren’t connected to a shading group.

  • (Shaderloading) Ensure Temporarily namespace is removed post import of a shader.

  • (Shaderpresets.Py) Tooltip changed to correctly explain sliders.

  • (Shaderutils.Py) Blocked “not .ma or .mb” message while saving shaders when it should not be triggered.

  • (Unittest) Increase maya unittests several fold.

  • (Vraymtl.Py) Vray no longer updates while querying IOR values if they are already set correctly with lockFresnelIORToRefractionIOR = False.


  • (Files.Py) Added ability to block warning message “not .ma or .mb”.

1.7.10 (2022-02-22)


  • (Imageplanes.Py) Added faster direct functions for rotation, scale, opacity and offsets.

  • (Metafocuspuller.Py) Code for cleaning up (deleting) broken focus puller meta setups.

  • (Metafocuspuller.Py) Docs.

  • (Metafocuspuller.Py) IsValid() method for checking if the meta is broken.

  • (Multirendererconnecttest.Py) Added tests code for multirenderer shaders.

  • (Renderertransferlights.Py) Added faster direct functions for set and get IBL rotations. Will be rewritten later with classes.

  • (Scripteditor) Ported scripteditor state machine for unittesting.

  • (Unittest) Added basic attribute and proxyAttribute creation tests.

  • (Zapi) IsProxy method added to Plug class.


  • (Bindskin.Py) RemoveInfluenceSelected() has better error checks.

  • (Cleanup.Py) Checks if there is an object selection while freezing transforms.

  • (Controls.Py) Freezing transforms while creating controls is now checks for skinning, and exits if skinning is present.

  • (Focuspuller.Py) Now handles non-unique names.

  • (Focuspuller.Py) Will remove any existing attributes on cameras from previous rigs not deleted properly.

  • (Keyframes.Py) Toggle Visibility now checks if the attribute is settable.

  • (Logging) Layered stack traces are output when an error occurs instead of one.

  • (Mayaapi) Adding Compound attribute as a proxy causes crash.

  • (Mayaapi) Fix AttributeError when getting plug min/max value on compounds.

  • (Mayaapi) Fix Float3 attributes not using correct api call resulting in crashes.

  • (Mayaapi) Fix adding compoundAttribute not handling numeric compounds which require separate behaviour.

  • (Mayaapi) Fix long attribute type being deprecated in maya but not handle correctly on the zoo side.

  • (Mayaapi) Incorrect Compound Attribute connections when creating a proxyAttribute.

  • (Mayaapi) Serializing Plugs resulted in using shortnames.

  • (Spaceswitching) Fix pre maya 2020 matrix constraint TypeError.

  • (Uvtransfer.Py) Transferring shaders without UVs no longer tells the user it’s failed, even though it succeeded.


  • (Bindskin.Py) Om2 switched to output for all messages.

  • (Cleanup.Py) All info and warning messages switched to output not om.

  • (Focuspuller.Py) Attributes are categorized better and nonkeyable when created on the camera.

  • (Imageplanetool) Add function to do all image plane transformation settings for VirtualSlider.

  • (Metafocuspuller.Py) Cleaned up lengthy code sections.

  • (Rendertransferlights) Update changeIBLTextureFound function with new multidirectories.

  • (Shelf) Removed redundant tool definitions.

  • (Triggersmm) Marking menu no longer merges the layout from all nodes now just the last selected.

1.7.9 (2022-02-04)


  • (Attributes.Py) Ability to move channel box attributes up and down in the channel box.

  • (Attributes.Py) Added addProxyAttributeSel() for adding proxy attributes to selected objects with error checks.

  • (Attributes.Py) Added deleteAttributeSel() deletes attributes from channel box selection.

  • (Attributes.Py) Added functions for getting the selected object and attributes for Channel Box Manager UI.

  • (Attributes.Py) Added labelAttrSel() for adding dividers to selected objects.

  • (Attributes.Py) Added open window functions for Maya’s attr windows.

  • (Buildtexturedshader.Py) First pass at creating a shader from a folder of textures WIP.

  • (Constraints.Py) Added constrainMatchList() hardcoded function to constrain prefixed objects to their master obj.

  • (Fbx) Helper utilities for Fbx Version queries.

  • (Filtertypes.Py) Added constraints to filter types, auto suffix etc.

  • (Filtertypes.Py) Support for constraints in, helps fix rename tool issues naming constraints.

  • (Follicles.Py) Added follicles module, only follicle transfer added at the moment.

  • (Mayareference) Added helper function to import all references.

  • (Namespace) Added a namespace context manager which temporarily creates a namespace and deletes it on exit.

  • (Shaderbase.Py) Added setTexture() methods for building basic textures. WIP.

  • (Skinreplacejoints.Py) Added replaceJointsMatrixSuffix() so joints can be replaced by suffix/prefixes.

  • (Spaceswitching) Added helper function to delete constraint metaData.

  • (Testuis.Py) Added the four new tools replacejointweights, channelBoxManager, hiveFbxRigExport, hiveMayaReferenceExport.

  • (Textures) Added maya.cmds.textures package.

  • (Uninstaller) Added uninstall zootools to dev shelf icon button.

  • (Zapi) Added displayLayers function wrapper to only return non deletable nodes.

  • (Zapi) Ls cmd function.

  • (Zapi) Now supports a namespace context manager.


  • (Attributes.Py) CheckRemoveAttr() checks parent attributes and deletes those, errored on vector attrs etc.

  • (Attributes.Py) CheckRemoveAttr() supports removing locked attributes.

  • (Attributes.Py) Fixed addProxyAttribute() handles parent names properly.

  • (Attributes.Py) GetChannelBoxAttrs() no longer errors if the attribute doesn’t exist on multi selected objects.

  • (Attributes.Py) MoveAttrBottomList() supports locked attributes.

  • (Metanodes) Fix RuntimeError when initializing a referenced node.

  • (Namehandling.Py) ForceRenameListSel() double renames now to avoid issues while renaming flat hierarchies.

  • (Namespaces) Namespace context manager would fail if the namespace already exists instead of reusing it.

  • (Randomshaders.Py) Fixed bug where known shaders wouldn’t be assigns if adding shaders with self.useShaders().

  • (Randomshaders.Py) Fixed bug where textures would fail if adding shaders with self.useShaders().

  • (Spaceswitching) Creating a constraint with trace=False raise AttributeError due to attribute no longer being created.

  • (Testrenderers.Py) Fixed alembic assets that now have folders in the default prefs.

  • (Zapi) KeyFramesForNodes ignores last frame on nodes.

  • (Zapi) RemoveNamespace on a node would remove the namespace from the scene.


  • (Constraints.Py) Function constrainMatchList() is now more generic and can be reused.

  • (Core) Move pluginManager interface initialization to iterable.

  • (Namehandling.Py) Improved the function renumberListSingleName(), handles long names.

  • (Shelves) Ported generic shelf base code from maya palette into base.

  • (Textures) Moved to


  • (Namehandling.Py) Added forceRenameListSel for new UI enhancement.

1.7.8 (2022-01-19)


  • (Shader Types) Method where it was missing in shader types.

1.7.7 (2022-01-18)


  • (Gimbaltolerances) TypeError on Py2/maya2020.

1.7.6 (2022-01-18)


  • (Broad Unit Tests) Included newer UIs to the test.

  • (Cmds) Added functions for retrieving selected frame range.

  • (Definedhotkeys.Py) Added missing open tool hotkeys.

  • (Exportabcshaderlights.Py) Can now save a shader as a zoo scene from a Zoo shaderInstance object.

  • (Exportabcshaderlights.Py) For setting shader instances.

  • (Fbxexport) Fbx Triangulation option support.

  • (Fbxexport) Support tangents, smoothMesh, instances as arguments.

  • (Generalanimation) Added function allGimbalTolerancesForKeys.

  • (Misc Shader Types) Added small functionality across all shader types.

  • (Namehandling.Py) GetUniqueNameSuffix now supports already suffixed names.

  • (Objhandling.Py) Checks if shape nodes only are instanced.

  • (Objhandling.Py) Supports transforms that are instanced and can now pass in transforms and shapes.

  • (Rendererconstants.Py / Shdmultconstants.Py) Added various constants.

  • (Renderers.Py) Now added option for disabling “Maya” and “VRay”.

  • (Rootinstance.Py) Finds the top node of the hierarchy of instanced objects.

  • (Shaderbase.Py) Can apply while setting default shader values.

  • (Shaderbase.Py) Now supports uniquely numbered names with end suffixing.

  • (Shaderutils.Py) To Selects objects and faces assigned to multiple shaders.

  • (Uninstance) Uninstance selected now supports root instanced nodes. Ie if the selected is a child of an instanced network will uninstance the root.

  • (Vraymtl.Py) Shader support for glossiness if roughness is not checked on. No longer defaults to roughness on create.

  • (Zapi) AllGimbalTolerances function.

  • (Zapi) SetRotationOrder to support preserve flag for rotations.

  • (Zapi) SetRotationOrderOverFrames function.

  • (Zapirotationorder) Support for bake every Frame.


  • (Broad Unit Tests) ModelAssets is now alembicAssets name change.

  • (Fbxexport) Passing a bool to smoothing groups or hardEdges would raise a TypeError.

  • (Generalanimation) AllGimbalTolerancesForKeys typeError raised when objects have no keys.

  • (Markingmenu) Passing no icon to a menu item results in maya using whichever previous image loaded last.

  • (Mayaapi) IterSelectedNodes with a filter tuple would always return Nothing.

  • (Shaderbase.Py) Shader name doesn’t error if built without a shader in place.

  • (Shdmultconstants.Py) MAYA_DEFAULT_SHADER incorrect, changed to MAYA_SHADER_LIST.

  • (Zapi) AllGimbalTolerances typeError.


  • (Allgimbaltolerances) Now supports provide sampling by steps.

  • (Arnoldstandardsurface.Py) Method.

  • (Cmdsrotationorder) ChangeRotOrder now use new rotationOrder code.

  • (Convertshadersui.Py) UI now has a renderer icon menu and conforms and updates all other renderer UIs.

  • (Docs) Updated docs for creating triggers. Fixing some formatting and missing modules for zapi docs.

  • (Docstrings) Updated docstrings for zapi and triggers.

  • (Fbxexport) Allow Ascii format.

  • (Generalanimation.Py) By default, kwarg option.

  • (Keyframesfornodes) Now supports a list of attributes to query.

  • (Maya Api) Support get plug values with MDGContext instance.

  • (Randomshaders.Py) Now uses shaderTypes for creation rather than by renderer.

  • (Rendererconstants.Py) Cleaned up renderer constants a little.

  • (Renderers.Py.Py) On UI load refresh the preferences if the renderer has been changed.

  • (Shaderbase.Py) Better dictionary support for attributes.

  • (Shdmultconstants.Py) Removes standardSurface shader in versions 2019 and below.

  • (Shdmultconstants.Py) Tidied up constants, VRay prefix fix.

  • (Zoo Scene) Zoo Scene version is now 1.1.0 with new attributes available in the

1.7.4 (2021-12-18)


  • (Bakenamespaces) Renames “:” into “_”.

  • (Convert Shaders) Module and support for the Convert Shaders UI.

  • (Maya Shaders) Phong and PhongE shader types.

  • (Mayaapi) Serialization now supports ignore color data.

  • (Nodeeditor) Add methods to change “addNewNodes” editor option.

  • (Obj Selection Highlight) Functions for UI.

  • (Prefsselection.Py) Includes option to save selection if the preferences window is open and the selection section triggered.

  • (Riggingmisc.Py) New module for random rigging tools, added mark center pivot for the related UI.

  • (Shader Instance Support) Metalness, emission, emissionWeight, diffuseRoughness.

  • (Vraymtl.Py) VRayMtl shader support.

  • (Zapi) Added local transform attributes constants.


  • (Core) PythonCommandToExecute usages not importing cmds causing ImportError on occasion.

  • (Curves) SetNodeColour fails if MColor is provided which contains a float4.

  • (Maya Shaders) Fix not found error when trying to save shader.

  • (Nodeeditor) Fixed “runtimeError” when adding nodes to the editor.


  • (Docs) Moved ZApi api docs into it’s own file.

  • (Mayaapi) SerializeNode to support shortNames and ignore namespaces if requested.

1.7.3 (2021-12-8)


  • (Core) Added cmds functions for handling offParentMatrix.

  • (Core) Has unknown nodes helper functions .

  • (Ui) Adds options to save as either MA or MB.

  • (Ui) Right-click on the save button in .


  • (Maya Api) MayaTypeFromType returning incorrect result.

  • (Mayaapi) Plugs.setPlugDefault Error when default index/name doesn’t exist.

  • (Zapi) Fails due to node type differences ie. Dag vs DG.

  • (Zapi) Fix addEnumFields not adding fields at the end of the list.

  • (Zapi) Fix showHideAttributes not hiding a keyable attribut.

  • (Zapi) SetObject RuntimeError raised when mobject isn’t a node.


  • (Cmds) with new code for better supporting freeze and unfreeze offsetParentMatrix, Now support modeling and joints.

  • (Core) Matrix is supported for replacing shapes.

  • (Maya Api) Added option to exclude Attributes when deserializing node.

  • (Maya Api) Plug value wrapper to speed up colour retrieval with curves.

  • (Maya Api) Plugs setting default,min,max,value split out to support passing attribute mobject.

  • (Mayaapi) General speed improvements for mayas api wrappers.

  • (Mayaapi) GetPythonTypeFromPlugValue to return compound attribute values ie .translate.

  • (Metanode) Delete to take modifier .

  • (Shaders) Added class variables to all shaders so string attribute names can be accessed in the shader instances easily.

  • (Shaders) Shaders save to binary if there are unknown nodes .

  • (Spaceswitching) Spaceswitching to support passing None as the driver, useful to reduce the amount of targets when you just need a on/off switch ie. 2 enum fields.

  • (Triggers) Allow triggers to be turned off by default via environment variables.

  • (Zapi) Added makeCurrentContext on a container asset.

  • (Zapi) Added scale space argument to support world and transform space query.

  • (Zapi) Port maya api transform query directly into zapi to avoid extra object casting.

1.7.2 (2021-11-1)


  • (Maya Api) Fix serializePlug skipping min,max when attr isDefaultValue.

  • (Maya Ui) Fix color button widths.

  • (Triggers) Fixed selection callback context manager AttributeError when no theres no callback active.

  • (Zapi) Added method to clear unbound container published attributes.

  • (Zapi) Remove unbound container attributes support.


  • (Markingmenu) Multi marking menu layout support.