Files
settled-reach/spikes/synty-intake/scripts/recon_dump.py
T
jpmschweitzerandClaude Fable 5 4bcd778e16 chore(assets): Synty intake spike — scripts, evidence logs, verdict data (T-1089)
Bridge-C evidence spike: unitypackage extraction, rest-pose recon, garment
transplant onto the Quaternius rig (Data Transfer POLYINTERP_NEAREST), 11-body
batch fit, Godot QA scenes. Technical PASS; route nonetheless REJECTED by
product call (cost, baked body-segment modularity, style) — full trail on
T-1089. Salvage: source-agnostic transplant/batch-fit scripts (the G1-family
pipeline for any donor mesh) and the T-1090 discovery (5 body types misrender
bare). Extracted vendor payload (spikes/**/raw/) now gitignored.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:01:24 +02:00

43 lines
1.5 KiB
Python

"""Blender recon: dump skeleton/mesh facts for a Sidekick FBX and our armature.
Usage: tooling/blender --background --python recon_dump.py -- <fbx> <our_armature_glb>
"""
import sys
import bpy
argv = sys.argv[sys.argv.index("--") + 1:]
fbx_path, glb_path = argv[0], argv[1]
bpy.ops.wm.read_factory_settings(use_empty=True)
bpy.ops.import_scene.fbx(filepath=fbx_path)
print("=== SIDEKICK FBX:", fbx_path.split("/")[-1])
sk_bones = []
for obj in bpy.data.objects:
if obj.type == "ARMATURE":
sk_bones = sorted(b.name for b in obj.data.bones)
print("ARMATURE:", obj.name, "bones:", len(sk_bones))
elif obj.type == "MESH":
keys = obj.data.shape_keys
print(
"MESH:", obj.name,
"verts:", len(obj.data.vertices),
"dim:", [round(d, 3) for d in obj.dimensions],
"shapekeys:", [k.name for k in keys.key_blocks] if keys else [],
"vgroups:", len(obj.vertex_groups),
)
print("SK_BONES:", ",".join(sk_bones))
bpy.ops.wm.read_factory_settings(use_empty=True)
bpy.ops.import_scene.gltf(filepath=glb_path)
print("=== OURS:", glb_path.split("/")[-1])
our_bones = []
for obj in bpy.data.objects:
if obj.type == "ARMATURE":
our_bones = sorted(b.name for b in obj.data.bones)
print("ARMATURE:", obj.name, "bones:", len(our_bones))
print("OUR_BONES:", ",".join(our_bones))
overlap = set(sk_bones) & set(our_bones)
print("OVERLAP:", len(overlap), "of", len(sk_bones), "sidekick /", len(our_bones), "ours")