Skip to content

Transfer Routes

OTS moves data between three applications, which means six directions. All six work, in both file formats.

From ↓ / To → Harmony Blender Maya
Harmony .pvt .anm .pvt .anm
Blender .pvt .anm .pvt .anm
Maya .pvt .anm .pvt .anm

Why all six, and not just the ones we tested

There is no per-route code in OTS. There is no "Harmony reader" and "Blender reader" — there is one reader per file format.

Every writer stamps a coordinate_system header into the file describing the space it wrote in: which axis is up, what the handedness is, what a unit means. Every reader looks at that header and converts the values through a single canonical space on the way in.

So a route isn't a feature that has to be built. Blender → Maya works for the same reason Harmony → Maya works: Maya's reader doesn't know or care who wrote the file, only what space it declares. See Coordinate Systems.

Blender ↔ Maya is a first-class route

It's worth saying plainly, because it's the one people assume is missing: you can send a rig or a shot straight from Blender to Maya, or from Maya to Blender, without a stop in Harmony. It's covered by an automated cross-application test that exports from Blender and asserts the resulting pose inside Maya.


What each route is good at

Harmony → Blender / Maya

The common one. A 2D cut-out rig's pegs become bones or joints, so you can use a 3D scene as a reference layout, do a camera move properly in 3D, or render a matching 3D pass.

The whole peg hierarchy arrives, including any peg that only exists to hold a camera.

Blender / Maya → Harmony

The other common one. Animate a camera move — or a mechanical rig, or anything easier to block in 3D — and drive your Harmony pegs with it.

Applying an animation rewrites a Harmony peg's authoring mode

When OTS applies a .anm to an existing Harmony peg, it unlinks any 3D-path or quaternion-path column on that peg and writes fresh separate-channel bezier curves instead.

The values are right, and the curves are editable. But if the peg was authored on a 3D path, that path is gone afterwards. This is a deliberate trade-off — Harmony's rotation columns can't represent every incoming curve otherwise — but it's not what you want on a peg you've hand-crafted. Applying onto a fresh Create Rig result avoids the question entirely.

Blender ↔ Maya

Two 3D applications, no Harmony involved. Useful when the rest of your pipeline is Octo Tools and you just want a lightweight, readable, diffable transfer that carries bezier tangents and camera lens data without an FBX round-trip.

The main thing this route exercises is the Z-up ↔ Y-up conversion, in both directions. See Coordinate Systems.


Choosing a format for the route

You want Send
The animation, and the rig doesn't exist on the other side yet .anmCreate Rig
The animation, onto a rig that already matches .anmApply
Just the skeleton — no shot .pvtBuild Skeleton
To rebuild a rig you lost .pvtBuild Skeleton
Cameras either — both formats carry cameras, but .anm also carries their motion

See Pivot Files (.pvt) and Animation Files (.anm).


What travels, on every route

Travels Notes
Hierarchy Each item's parent, resolved to the nearest exported ancestor — so a partial export still comes out as a coherent chain
Rest pose Pivot and rest rotation
Position / rotation / scale keys Per frame, in the exported range
Interpolation BEZIER, LINEAR, CONSTANT
Bezier handles Absolute, per axis
Cameras FOV, near/far clip, offset, roll, default-camera flag
Rig grouping The Rig column, so a multi-character scene stays separated
Doesn't travel Why
Drawings, meshes, materials, textures OTS is a transform bridge, not an asset pipeline
Deformers, constraints, expressions, IK Only the resulting transforms
Layer names, colours, tags, node metadata Beyond the names and paths needed to match
The peg's authoring mode Recorded as a hint, but never used to change values — see File Format

Because only the resulting transforms move, a rig driven by a complicated setup on one side arrives on the other side as plain baked keys. That's usually what you want from a transfer, but it does mean the transfer is one-way per shot: you can't send it back and expect the original setup to reappear.