SLOT_TO_BONE expanded to 12 slots (earring_l/r, necklace, wrist_l/r). _clear() outline teardown ordering fixed. toon_masked.gdshader: removed cull_disabled, added ALPHA output. _attach_to_bone() returns node instead of bool. skin_tone clamped in from_dict(). D-160 segment count 15→17. Blender scripts: docstrings + __main__ guards. Reload test tightened. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1.0 KiB
Python
37 lines
1.0 KiB
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:]
|
|
if len(args) < 1:
|
|
print("ERROR: Provide a GLB/GLTF path.")
|
|
sys.exit(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)))
|