Assets are categorized by their purpose, which determines how they're used in the platform:
retargetInput files for retargeting jobs.
Supported formats:
.c3d - C3D motion capture format.xml - XML markerset configurationUse case: Upload C3D motion capture files and markerset XML files for retargeting.
C3D (Coordinate 3D) is a standard format for motion capture data. C3D files contain 3D marker positions, analog data, and metadata.
Requirements:
Upload:
c3d_asset = client.assets.upload_file("motion.c3d")
# Purpose is auto-detected as "retarget" from .c3d extension
Markerset XML files define the marker configuration and skeleton structure for your C3D data.
Requirements:
Upload:
markerset_asset = client.assets.upload_file("markerset.xml")
# Purpose is auto-detected as "retarget" from .xml extension
Retarget jobs produce .npz files (NumPy compressed archive) containing:
Structure:
import numpy as np
data = np.load("output.npz")
joint_angles = data["joint_angles"] # Shape: (frames, joints, 3) or (frames, joints)
joint_names = data["joint_names"] # Array of joint name strings
metadata = data.get("metadata", {}) # Optional metadata dict
Download:
# After job completes
result = client.jobs.wait(job_id)
output_asset_id = result["output"]["retarget_output_asset_id"]
client.assets.download(output_asset_id, "output.npz")
Usage:
import numpy as np
# Load the output
data = np.load("output.npz")
joint_angles = data["joint_angles"]
joint_names = data["joint_names"]
print(f"Frames: {joint_angles.shape[0]}")
print(f"Joints: {joint_angles.shape[1]}")
print(f"Joint names: {joint_names}")
# Use joint angles in your application
for frame_idx in range(joint_angles.shape[0]):
frame_angles = joint_angles[frame_idx]
# Process frame...
The SDK automatically detects content types from file extensions. You can also specify them explicitly:
# Auto-detected
asset = client.assets.upload_file("motion.c3d") # content_type: "application/octet-stream"
# Explicit purpose (usually auto-detected)
asset = client.assets.upload_file(
"motion.c3d",
purpose="retarget",
content_type="application/octet-stream"
)
Common content types:
application/octet-stream - Binary files (C3D)application/xml - XML filestext/xml - XML filesFile size limits depend on your plan:
If you encounter size limit errors:
Upload files using the convenience method:
# Automatically handles the upload process
asset = client.assets.upload_file("motion.c3d")
.c3d, .xml)"retarget" purpose