"""Quady3D AI CC0 GLB inspection helper. Blender 4.5 LTS tested. blender --background --python import-audit.py -- --input model.glb --output ./inspection Reads your GLB, records world bounds and mesh counts, and saves editable .blend. It does not invoke GPT-6 Astra, change topology, repair geometry or generate assets. """ import argparse import json from pathlib import Path import sys import bpy from mathutils import Vector def main(): parser=argparse.ArgumentParser(); parser.add_argument("--input",required=True); parser.add_argument("--output",default="./inspection") args=parser.parse_args(sys.argv[sys.argv.index("--")+1:] if "--" in sys.argv else []) src=Path(args.input).resolve(); dest=Path(args.output).resolve(); dest.mkdir(parents=True,exist_ok=True) if not src.is_file() or src.suffix.lower()!=".glb": raise ValueError("Choose an existing .glb file") bpy.ops.object.select_all(action="SELECT"); bpy.ops.object.delete(use_global=False) bpy.ops.import_scene.gltf(filepath=str(src)) meshes=[o for o in bpy.context.scene.objects if o.type=="MESH"] if not meshes: raise ValueError("No mesh geometry found") points=[o.matrix_world@Vector(p) for o in meshes for p in o.bound_box] lower=[min(p[i] for p in points) for i in range(3)]; upper=[max(p[i] for p in points) for i in range(3)] report={"source":src.name,"blender":bpy.app.version_string,"units":"meters; standard glTF import", "dimensionsMeters":[upper[i]-lower[i] for i in range(3)],"meshObjects":len(meshes),"materialSlots":sum(len(o.material_slots) for o in meshes),"triangles":0,"vertices":sum(len(o.data.vertices) for o in meshes)} for obj in meshes: obj.data.calc_loop_triangles(); report["triangles"]+=len(obj.data.loop_triangles) bpy.ops.wm.save_as_mainfile(filepath=str(dest/"imported-scene.blend")) (dest/"inspection.json").write_text(json.dumps(report,indent=2)+"\n") print("QUADY_INSPECTION",json.dumps(report)) if __name__=="__main__": main()