In Maya¶
Maya uses the same window as Harmony — same layout, same four pages, same controls — with Maya's vocabulary. The lists say Joint and Joints, and the import button says Apply to Joints.
Launching¶
Click the OTS button on your shelf. If it isn't there yet, see Installation — dragging install_maya.py into the viewport sets it up permanently.
From the Script Editor:
import launch_transform_sync_maya as ots
ots.main()
The four pages¶
The same two-by-two grid as Harmony, with Maya's vocabulary:
The skeleton the file describes, indented into its hierarchy. Build Skeleton creates the joints with a clean orient.
Joints scanned from the selection. The Rig column is seeded from each joint's nearest non-joint ancestor.
The match tree. The amber row found no joint by that name — normal for a camera peg on a fresh import. See The Match Tree.
A rig name being typed straight into the Rig cell — double-click to edit. Scene range fills Start and End from the scene.
Units¶
Maya is the centimetres case. Everything in an OTS file is in metres, so positions are multiplied by 0.01 on the way out and divided back on the way in, automatically.
You never set this. There is no unit option in the window, because getting it from the file's header is strictly better than asking you.
Axis-wise, a standard Y-up Maya scene needs no swizzle — it already matches the canonical orientation. A Z-up Maya scene is detected and swizzled like Blender.
Z-up Maya scenes: handles are simplified
In a Z-up scene the keyframe values convert correctly, but per-key bezier handles are emitted interpolation-only rather than with explicit tangents. If you care about exact tangent shapes, work in Y-up.
Exporting¶
Select the joints — and any camera transform — then press + on the export page.
The Rig column is seeded from each joint's nearest non-joint ancestor, which usually means the group you already organised your scene with. Double-click the cell to rename, or pick another rig from the dropdown to merge into it.
Maya gets an editable column for the same reason Harmony does: a Maya joint is just a transform node, there's no armature object, and a "rig" is a convention you chose. Blender's column is locked instead, because there an armature is a real container. See Rigs & Multi-Rig.
The connectivity lock still applies: you can merge disconnected roots, never split a connected chain.
For each joint, OTS records the world matrix per keyed frame, made relative to the nearest exported ancestor. Keyframes are gathered from all nine transform channels, plus the range boundaries. Interpolation is read from the rotation curve's out-tangent type:
| Maya tangent | Becomes |
|---|---|
| Step | CONSTANT |
| Linear | LINEAR |
| Anything else | BEZIER, with explicit handles |
Importing¶
Browse…, check the match, then choose:
- Apply to Joints — writes onto matched, ticked joints.
- Create Rig — builds the joints from the file's folded-in rest pose and applies the animation.
- Create Cameras — builds the cameras.
Every write is wrapped in a single named undo chunk, so one Ctrl+Z reverses the whole operation.
What Create Rig builds¶
Joints, created with a clean orient: XYZ rotate order, zero joint orient, zero rotate axis. All rotation lives in .rotate.
That matters. A joint with a non-zero joint orient carries rotation in two places, and applied animation ends up fighting it. By zeroing the orient and putting everything in .rotate, the animation from the file lands exactly where the file says it should.
When the file contains more than one rig, each rig gets its own empty transform group and its roots parent under it. A single-rig file skips the wrapper — no pointless group.
Tangents¶
On apply:
| File says | Maya gets |
|---|---|
LINEAR |
Linear in and out tangents |
CONSTANT |
Step out tangent |
BEZIER with handles |
Weighted tangents on, fixed in/out, with the angle and weight from the file |
BEZIER without handles |
Default smooth interpolation |
Position handle values are scaled from metres to centimetres along with the keys, so the curve shape survives the unit change rather than being flattened by it.
Cameras¶
Select the camera transform and it exports with everything else.
Maya has no single "default camera" flag, so OTS approximates it with the camera's renderable state and what you're currently looking through. On import, the default camera from the file is made renderable and looked through.
Create Cameras derives a focal length from the file's vertical FOV against the vertical film aperture, and sets film fit to Vertical. This is deliberate: on automatic or horizontal fit the frustum comes out too narrow and the scene looks zoomed in.
If a camera's peg exists only to hold that camera — nothing above it, nothing below — no joint is created and the motion is baked straight onto the camera transform. See Cameras.
Notes and limits¶
Names are matched with suffixes stripped, so a Harmony hip-P peg and a Maya hip joint are the same item.
Full DAG paths are used for matching, so two joints with the same short name in different groups stay distinct.
Maya's reader is strict about the file version. A file from an older OTS writes a clear error rather than half-importing; re-export from the source application.
See also¶
- Rigs & Multi-Rig — where the Rig column's default comes from in Maya
- Cameras — film fit, focal length, and framing checks
- Coordinate Systems — the centimetre conversion, and Z-up scenes