from pathlib import Path
import requests,json,zipfile,io,hashlib
P=Path('/opt/creature-lib-20261017');s=P/'sources';(s/'realwolf').mkdir(exist_ok=True)
for slug,url,dest in [('3d-wolf','https://opengameart.org/sites/default/files/3dwolf_blend.zip','realwolf'),('boar','https://opengameart.org/sites/default/files/boar_0.blend','boar'),('crab-low-poly-animated-3d-model','https://opengameart.org/sites/default/files/crab_0.zip','crab')]:
 page=requests.get('https://opengameart.org/content/'+slug,timeout=60);page.raise_for_status();(s/(slug+'-licence.html')).write_bytes(page.content)
 r=requests.get(url,timeout=90);r.raise_for_status();target=s/dest;target.mkdir(exist_ok=True)
 if url.endswith('.zip'):
  z=zipfile.ZipFile(io.BytesIO(r.content));print(slug,z.namelist());z.extractall(target)
 else:(target/'boar.blend').write_bytes(r.content)
 (target/'source.json').write_text(json.dumps({'url':url,'page':'https://opengameart.org/content/'+slug,'licence':'CC0-1.0','sha256':hashlib.sha256(r.content).hexdigest()},indent=2))
old=Path('/srv/archive/from-ax42-2026-09-30/local-forge-build-pre-0922/tideglass-asset-import-20260914');records=json.loads((old/'evidence/quaternius-downloads.json').read_text());manifest=json.loads((P/'evidence/sources.json').read_text())
import shutil
for name in ['Bunny','Birb','Monkroose','Tribal']:
 src=old/'sources/quaternius/Big'/(name+'.gltf');dst=s/'monsters/Big'/src.name;shutil.copy2(src,dst)
 rec=next(r for r in records if r['name']==src.name and r['group']=='Big')
 manifest.append({'path':str(dst.relative_to(P)),'url':'https://drive.google.com/uc?export=download&id='+rec['id'],'author':'Quaternius','licence':'CC0-1.0','pack_url':'https://quaternius.com/packs/ultimatemonsters.html','sha256':hashlib.sha256(dst.read_bytes()).hexdigest()})
(P/'evidence/sources.json').write_text(json.dumps(manifest,indent=2))
