HY-Motion Export FBX
From tensor to a file Blender and Maya will actually open
- motion_data
- fbx_paths
This is where your motion stops being a tensor and becomes a file every DCC tool speaks. HY-Motion Export FBX takes the motion_data from Generate and writes a standard .fbx you can pull into Blender, Maya, Unreal, or any pipeline that eats FBX. It's the pack's most DCC-facing export, and it's also the one with the fiddliest dependency - plan around that.
There are two modes. With no custom model, it bakes the motion onto the pack's bundled "wooden boy" rig (a SMPL-H rigged model that ships in the repo) using its own SMPLH-to-FBX converter - that's the zero-friction path and it needs nothing beyond the pack itself. Give it a custom_fbx_path pointing at a Mixamo-rigged character and it switches to retargeting mode: it maps your generated SMPL skeleton onto the Mixamo rig's mixamorig: bones, applies the animation, and writes out the character with your motion on it. The retargeting code is adapted from the ComfyUI-HyMotion project, per the README, and it handles scale and orientation via two optional knobs:
- yaw_offset - rotate the character around Y in degrees (-180 to 180). Set 180 if your character faces the wrong way relative to the motion.
- scale - force a scale multiplier; 0.0 means automatic height-based scaling, which is what you want almost always.
The input that matters
custom_fbx_path has specific path rules. 3d/char.fbx defaults to ComfyUI/input/3d/char.fbx; you can be explicit with input/3d/char.fbx or output/3d/char.fbx; absolute paths work if the file exists; empty means wooden boy. The README's table covers this, and the resolution code implements exactly that - most people's first mistake is dropping a file somewhere and passing a path that doesn't match any of the patterns.
Along with motion_data, you set output_dir (a subfolder of ComfyUI's output/, default hymotion_fbx) and filename_prefix (default motion). The node returns the list of written paths and drops a .txt next to each .fbx containing the source prompt.
The dependency that will fight you
FBX export requires the official fbxsdkpy binding, and it does not install like a normal package:
pip install fbxsdkpy --extra-index-url https://gitlab.inria.fr/api/v4/projects/18692/packages/pypi/simple
That command is in the pack's requirements.txt too, but two things go wrong: the install is fragile, and the SDK is a compiled binding that historically won't build on Python 3.13 - a real, documented complaint from the pack's launch thread ("went with Python 3.13 on my install which is blocking FBX"). If the node returns "FBX SDK not installed," that's your failure mode, and you have two options: use an older Python, or skip FBX entirely and use the HY-Motion Preview Animation (3D) node's in-browser GLB export, which needs no Python deps at all. The README's own recommendation, in so many words, is that if fbxsdkpy fights you, don't fight back - take the GLB.
One more note: retargeting quality is "automatic Mixamo mapping, right now" per the README - Mixamo rigs work out of the box, other rigs are a coin flip. Check the result in your DCC before you trust it for production.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| motion_data | HYMOTION_DATA | — | |
| output_dir | STRING | hymotion_fbx | — |
| filename_prefix | STRING | motion | — |
| custom_fbx_pathopt | STRING | Path to custom FBX model (Mixamo character). Supports: 'input/3d/char.fbx', 'output/3d/char.fbx', or just '3d/char.fbx' (defaults to input/). Leave empty for default wooden boy. | |
| yaw_offsetopt | FLOAT | 0-180–180 | Rotate the character around Y-axis in degrees (e.g., 180 to face opposite direction). |
| scaleopt | FLOAT | 0.000–10 | Force specific scale multiplier. Leave at 0.0 for automatic height-based scaling (recommended). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| fbx_paths | STRING | — |