Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer, web workflow engine and protocol, tooling, docs and task records. Large generated evidence, user-testing archives, build snapshots and imported test assets remain untracked. Co-Authored-By: Claude Code <noreply@anthropic.com>
42 lines
1.9 KiB
Python
42 lines
1.9 KiB
Python
"""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")
|