"""Read canonical native Main NLA state from saved UI test artifacts.""" import json from pathlib import Path import sys import bpy directory = Path(sys.argv[sys.argv.index("--") + 1]) snapshots = {} for blend in sorted(directory.glob("*.blend")): bpy.ops.wm.open_mainfile(filepath=str(blend), load_ui=False) objects = [] for obj in sorted(bpy.data.objects, key=lambda item: item.name): tracks = [] if obj.animation_data: for track in obj.animation_data.nla_tracks: tracks.append({ "name": track.name, "mute": track.mute, "solo": track.is_solo, "strips": [{ "name": strip.name, "type": strip.type, "action": strip.action.name if strip.action else None, "start": strip.frame_start, "end": strip.frame_end, "actionStart": strip.action_frame_start, "actionEnd": strip.action_frame_end, "scale": strip.scale, "repeat": strip.repeat, "influence": strip.influence, "blend": strip.blend_type, "extrapolation": strip.extrapolation, "mute": strip.mute, "reverse": strip.use_reverse, } for strip in track.strips], }) objects.append({"name": obj.name, "type": obj.type, "data": obj.data.name if obj.data else None, "tracks": tracks}) snapshots[blend.stem] = {"objects": objects, "scenes": [{"name": scene.name, "frame": scene.frame_current} for scene in sorted(bpy.data.scenes, key=lambda item: item.name)]} (directory / "native-nla-snapshots.json").write_text(json.dumps(snapshots, sort_keys=True, separators=(",", ":")), encoding="utf-8")