Nodes/ComfyUI AssetSync/MotionSync to Maya
ComfyUI Node

MotionSync to Maya

Wire generated animation straight into Maya

By jaisurya-dev-art·Created 14 days ago·Updated 6 days ago· 0
MotionSync to Maya
  • animated_model
  • assetsync_id
  • status
motion_nameMotion
motion_clip
include_source_modelfalse
replace_existingtrue
assetsync_id

Every 3D person knows the drill: generate → find the file → convert → browse the import dialog → fix the scale → realize the animation is missing → repeat. MotionSync to Maya is the ComfyUI end of that pain going away. It takes whatever animated model your motion-transfer or animation node just spat out - a GLB, GLTF, or FBX - and lands the skeleton and animation curves directly in Maya on a localhost port, no manual import, no file hunting.

It's part of the ComfyUI-AssetSync pack, which is a whole bridge from generated 3D assets into Blender, Maya, and Unreal. The sibling AssetSync node pushes a full mesh with materials and textures; MotionSync is the specialized sibling that sends just the bones and the motion. Think of it as the "animation take" courier.

How it works

The node doesn't export anything itself. It builds a stable identity for your asset, then hands the file path to a local HTTP receiver running inside Maya (on 127.0.0.1:18952) via a tiny JSON message. For GLB/GLTF input, it first runs Blender headlessly to bake the selected animation clip into a single FBX animation take - no curve simplification - because Maya's FBX import is the reliable path. Maya then imports that take, fills the playback range, converts the quaternion motion to compatible Euler curves, and reports back the clip name, joint count, and animation-curve count in the node's status output.

A nice touch: it relies on the FBX file's unit metadata rather than freezing the animated transforms, so root-motion distance survives the trip. The KB essay on 3D generation will tell you why this matters: generated rigs and topology are the part of the pipeline that's still rough, so having your source skeleton land intact - untouched - is exactly what lets an animator actually work with it.

The inputs that matter

  • animated_model (wildcard, required) - wire the output of any motion-transfer or animation node here. The pack's wildcard input accepts a direct file path or common path-bearing dicts, lists, tuples, and objects, so it plays nice with whatever generator socket you have.
  • motion_clip (string, default empty) - leave it blank to transfer the first embedded clip, or type the exact clip name if your file has several takes.
  • include_source_model (bool, default off) - off sends only the source skeleton, hierarchy, and curves. Turn it on when the clip carries animated morph targets, or when you want the carrier mesh as retargeting reference.
  • motion_name (default "Motion") - the imported take's name. replace_existing defaults to on, so re-running the same node replaces the previous sync rather than stacking copies.

Outputs are assetsync_id (a stable STRING - paste it into another workflow to keep identity) and status (STRING, also shown in the node's UI text).

Install

Grab the pack the usual way - ComfyUI Manager (search "ComfyUI AssetSync") or:

cd ComfyUI/custom_nodes
git clone https://github.com/jaisurya-dev-art/ComfyUI-AssetSync

Restart ComfyUI. There are no pip dependencies - the core is standard-library-only, which is refreshing. The real install work is the Maya receiver:

  1. Double-click maya_assetsync_setup.bat in the repo and enter your four-digit Maya version.
  2. Restart Maya, open Windows → Settings/Preferences → Plug-in Manager, and enable Loaded and Auto load for MayaAssetSync_plugin.py.

The receiver starts automatically on port 18952.

Gotchas

  • GLB/GLTF needs Blender installed. Native FBX and OBJ don't. If discovery fails, set blender_executable in %USERPROFILE%\.assetsync\config.json, or the ASSETSYNC_BLENDER / BLENDER_EXECUTABLE env vars.
  • The Maya receiver must be running, and this is a same-machine tool - receivers bind to loopback and v1 does no remote transfer. Don't forward those ports.
  • It won't retarget your production rig. That's deliberate and honest: reliable retargeting needs a project-specific joint mapping and compatible rest poses. What you get is a clean source skeleton ready to inspect, bake, or retarget by hand - which, given how rough generated rigs can be, is the right scope for a tool like this.
  • Not an animated GLB/GLTF/FBX? The node refuses with a clear error rather than silently mangling your mesh.

MotionSync won't rescue bad generated topology for you, and it isn't trying to. What it does is delete the most tedious step between "the animation exists" and "the animator has it in Maya" - and that step is a genuine time sink.

CategoryAssetSync

Inputs (6)

NameTypeDefaultDescription
animated_model*
motion_nameSTRINGMotion
motion_clipSTRING
include_source_modelBOOLEANfalse
replace_existingBOOLEANtrue
assetsync_idoptSTRING

Outputs (2)

NameTypeDescription
assetsync_idSTRING
statusSTRING