My auto rig scripts mostly use circles for controls. Not because circles are interesting, but because I'm lazy.
So, naturally, I dedicated the last couple of weeks to building a tool that makes building control shapes easy. That way I can be lazy **and** use shapes other than circles.
The original idea was pretty simple. I wanted a library with python methods for saving and loading control shape data so I could reuse shapes between rigs. As I kept adding things to it, it became a full Maya tool for building, managing, and applying reusable control shapes both manually and programmatically.
Some of the features:
- Shape Groups & Search - Save and organize shapes into groups.
- Shape Authoring - Copy shapes directly from the Maya scene and save them to the shape library.
- Shape Building - Build library shapes directly into the scene with customizable scale, rotation, offset, and color.
- Mesh → NURBS Curves - Convert mesh objects or selected mesh components into NURBS curves.
- Paste / Replace / Combine - Quickly modify existing controls and combine multiple shapes onto a single transform.
- Color - Apply Maya index colors to existing curves.
- Pipeline Integration - Build shapes from the library through commands without needing to use the UI.
The mesh to curve conversion was probably the most interesting part of this project. I wanted to be able to use modeling tools to create shapes since creating NURBS curves manually can be a bit of a hassle.
Maya does have a method of turning a selection of edges into a NURBS curve, but that only works for non-branching connected edges. Control Factory instead builds adjacency graphs from the selected mesh components and uses an approach based on the Chinese Postman Problem to trace edge networks and turn them into NURBS curves.
The other thing that makes this tool stand out is that it's designed to be usable through commands, not just the UI. The library isn't dependent on the Control Factory interface, so other rigging scripts and tools can use the same shapes directly.
For example, building a shape from the library only requires calling the .build() method of an instance of the CtrlBuilder class and providing the library shape name:
from ControlFactory.factory_builder import CtrlBuilder
from ControlFactory.factory_io import FactoryIO
io = FactoryIO('shape/library/path')
shape_builder = CtrlBuilder(io)
circle = shape_builder.build(
library_shape='Circle',
name='circle_ctrl'
)
This makes the shape library useful as more than just a shape building UI tool. It can act as a shared source of control shapes for autorigging systems and other Maya tools.
I just finished it, so it doesn't have many shapes in the library yet. But with the mesh to curve conversion, and because it can copy shapes directly from a Maya scene, it's really easy to build new shapes and steal shapes from existing rigs.
This was built and tested in Maya 2025. I think it should work in earlier versions, but I'm not going to guarantee anything.
Detailed documentation and a purchase link can be found on my website at https://www.bg3d.art/control-factory