import bpy,sys,json,bmesh
from pathlib import Path
from mathutils import Vector
P=Path('/opt/creature-lib-20261017');bpy.ops.wm.read_factory_settings(use_empty=True);bpy.ops.import_scene.gltf(filepath=str(P/'sources/monsters/Big/BlueDemon.gltf'))
o=bpy.data.objects['BlueDemon'];bm=bmesh.new();bm.from_mesh(o.data);bmesh.ops.remove_doubles(bm,verts=list(bm.verts),dist=.00001);bm.verts.ensure_lookup_table();seen=set();rows=[]
for v in bm.verts:
 if v in seen:continue
 q=[v];seen.add(v);vs=[]
 while q:
  a=q.pop();vs.append(a)
  for e in a.link_edges:
   b=e.other_vert(a)
   if b not in seen:seen.add(b);q.append(b)
 if len(vs)<10:continue
 lo=[min(v.co[i] for v in vs) for i in range(3)];hi=[max(v.co[i] for v in vs) for i in range(3)];rows.append({'verts':len(vs),'lo':lo,'hi':hi})
print(json.dumps(rows,indent=2));bm.free()
