movimento / kimodo /skeleton /registry.py
Kimodo Bot
Add core kimodo package modules required by native demo
6d5047c
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
"""Factory helpers for building predefined skeleton variants."""
from pathlib import Path
from kimodo.assets import SKELETONS_ROOT
from .definitions import (
G1Skeleton34,
SMPLXSkeleton22,
SOMASkeleton30,
SOMASkeleton77,
)
def build_skeleton(nbjoints: int, assets_folder: str | Path = SKELETONS_ROOT):
"""Instantiate a known skeleton class from its joint count.
Supported joint counts: 30 (SOMA compact), 34 (G1), 77 (SOMA full), 22 (SMPLX).
Args:
nbjoints: Number of joints expected in the skeleton representation.
assets_folder: Base skeleton-assets directory containing per-skeleton subfolders.
Returns:
A configured `SkeletonBase` subclass instance.
Raises:
ValueError: If `nbjoints` does not match a registered skeleton.
"""
assets_folder = Path(assets_folder)
if nbjoints == 34:
return G1Skeleton34(assets_folder / "g1skel34")
elif nbjoints == 22:
return SMPLXSkeleton22(assets_folder / "smplx22")
elif nbjoints == 30:
return SOMASkeleton30(assets_folder / "somaskel30")
elif nbjoints == 77:
return SOMASkeleton77(assets_folder / "somaskel77")
else:
raise ValueError("This skeleton is not recognized.")