HY-Motion Save NPZ
The boring node that speaks every 3D tool's language
- motion_data
- STRING
The least glamorous node in the pack and quietly one of the most important. HY-Motion Save NPZ writes your generated motion to the .npz format - a compressed NumPy archive - that the broader text-to-motion ecosystem actually uses. When you see motion datasets and retargeting scripts elsewhere, NPZ is usually the file format they expect. This is the node that makes your HY-Motion output portable instead of trapped inside ComfyUI.
Here's the thing: every other node in the pack consumes motion_data directly because they're all in the same pack. The moment you want to take that motion somewhere else - feed it to a retargeting script, a custom renderer, a training pipeline, another pack - you need a file, and this is the format those tools understand. It's the "save your work" node, and it's the one you'll reach for when the demo is over and you actually need the data.
What it saves
Per generated sample, one .npz containing the raw motion arrays: keypoints3d (the 3D joint positions), rot6d (per-joint 6D rotations), transl (root translation), and root_rotations_mat, plus the source text, the duration, and the seed as metadata. That's the complete motion representation the pack works with - save it and you can recreate or re-export the exact same animation.
Inputs
- motion_data - from HY-Motion Generate.
- output_dir - subfolder under ComfyUI's
output/, defaulthymotion_npz. - filename_prefix - default
motion. Files land asmotion_<timestamp>_<id>_<index>.npz(the index is the sample number if you generated multiple).
The node returns a single STRING with the newline-separated paths, relative to the output folder, so you can see exactly where everything went. It's an output node, so it also marks the end of the graph.
Notes and gotchas
There's nothing to configure, which is the point - three inputs, one repeatable result. A few practical things: if you generated num_samples > 1 on Generate, you get one NPZ per sample, each carrying its own seed; keep them straight by the index in the filename. And while the .txt-sidecar habit of the FBX/GLB exporters stores the prompt separately, here the text is inside the archive, which is nicer for round-tripping. Don't mistake this for a Blender-importable format, though - it's the raw motion representation, not a scene file. Blender imports the FBX/GLB outputs; NPZ is for scripts and pipelines. If you only ever want one file format, pick based on where the motion is going next, not on which node sounds fancier.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| motion_data | HYMOTION_DATA | — | |
| output_dir | STRING | hymotion_npz | — |
| filename_prefix | STRING | motion | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |