Scene Manager: fixes from the first run against a real Libreflow

- Update / version switch: Blender 5.2 replaces the library on reload
  (renamed after its file, custom properties gone); find it by path and
  restore its name and tags.
- Remove the libraries an asset linked indirectly when it is removed or
  fails to load (remove_unused_libraries), never a managed one.
- Config: real Kitsu asset types for link modes and Shot Viewer groups,
  setdress_low files for bg_location, "environments" collection fallback.
- Dev fake server and test use the real asset types; rock links a node
  group from the essentials to cover the indirect library cleanup.
- README and CLAUDE.md updated with the live findings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
NDemaerschalkandClaude Opus 5.5 committed 2026-10-27 11:30:46 +01:00
1 parent 017bdfc2fd
commit 9ee7710479
7 files changed
+109 -35

No files matched your search

+9 -3
View File
@@ -4,7 +4,8 @@
bob: a rig (COL_bob: armature + meshes), v001 has 1 mesh, v002 has 2.
tree: COL_tree, plus an unrelated top-level collection.
rock: a single top-level collection not named after the asset (fallback case).
rock: a single top-level collection not named after the asset (fallback case), its mesh
using a node group linked from Blender's essentials (an indirect library).
"""
import os
@@ -21,7 +22,7 @@ def mesh_object(name):
return bpy.data.objects.new(name, mesh)
def write(path, collection_name, meshes=1, rig=False, extra=False):
def write(path, collection_name, meshes=1, rig=False, extra=False, node_group=False):
bpy.ops.wm.read_homefile(use_empty=True)
scene = bpy.context.scene
collection = bpy.data.collections.new(collection_name)
@@ -39,6 +40,11 @@ def write(path, collection_name, meshes=1, rig=False, extra=False):
ob = mesh_object(f"GEO_{collection_name}_{index}")
ob.parent = parent
collection.objects.link(ob)
if node_group:
essentials = os.path.join(bpy.utils.system_resource("DATAFILES"), "assets", "nodes", "geometry_nodes_essentials.blend")
with bpy.data.libraries.load(essentials, link=True) as (_data_from, data_to):
data_to.node_groups = ["Smooth by Angle"]
ob.modifiers.new("Smooth", "NODES").node_group = data_to.node_groups[0]
if extra:
scene.collection.children.link(bpy.data.collections.new("WIP_other"))
os.makedirs(os.path.dirname(path), exist_ok=True)
@@ -49,5 +55,5 @@ lib = os.path.join(WORKDIR, "lib")
write(os.path.join(lib, "bob", "v001", "rig.blend"), "COL_bob", meshes=1, rig=True, extra=True)
write(os.path.join(lib, "bob", "v002", "rig.blend"), "COL_bob", meshes=2, rig=True, extra=True)
write(os.path.join(lib, "tree", "v001", "model.blend"), "COL_tree", extra=True)
write(os.path.join(lib, "rock", "v001", "rock.blend"), "rock_geo")
write(os.path.join(lib, "rock", "v001", "rock.blend"), "rock_geo", node_group=True)
print("Test assets written in", lib)