Add CharacterVisualDescriptor (11-variant BodyType enum, wire format encode/decode, body_type_key mapping) and CharacterVisual compositor (runtime 3D character assembler with slot architecture, BoneAttachment3D, clothing coverage, recolor mask loading, skin tone tinting, bone validation). Includes 64 unit tests and Blender utility scripts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
33 lines
947 B
Python
33 lines
947 B
Python
"""
|
|
blender_list_animations.py
|
|
Usage: tooling/blender --background --python tooling/blender_list_animations.py -- <input.glb>
|
|
|
|
Lists all animation actions in a GLB file.
|
|
"""
|
|
|
|
import sys
|
|
import bpy
|
|
|
|
|
|
if __name__ == "__main__":
|
|
argv = sys.argv
|
|
if "--" not in argv:
|
|
print("Usage: tooling/blender --background --python tooling/blender_list_animations.py -- <input.glb>")
|
|
sys.exit(1)
|
|
|
|
args = argv[argv.index("--") + 1:]
|
|
input_path = args[0]
|
|
|
|
bpy.ops.wm.read_factory_settings(use_empty=True)
|
|
bpy.ops.import_scene.gltf(filepath=input_path)
|
|
|
|
actions = list(bpy.data.actions)
|
|
print("ACTIONS_COUNT=" + str(len(actions)))
|
|
for action in sorted(actions, key=lambda a: a.name):
|
|
print("ACTION: " + action.name)
|
|
|
|
# Also report armature bone count if present
|
|
for obj in bpy.context.scene.objects:
|
|
if obj.type == 'ARMATURE':
|
|
print("ARMATURE_BONES=" + str(len(obj.data.bones)))
|