from __future__ import annotations import json,os from pathlib import Path import torch from safetensors.torch import save_file from huggingface_hub import snapshot_download MODEL='VAST-AI/AniGen' root=Path('/tmp/anigen-model');out=Path('/tmp/slat-shell');out.mkdir(parents=True,exist_ok=True) snapshot_download(MODEL,token=os.environ.get('HF_TOKEN'),local_dir=root,allow_patterns=['ckpts/anigen/slat_flow_auto/config.json','ckpts/anigen/slat_flow_auto/ckpts/**']) config=json.loads((root/'ckpts/anigen/slat_flow_auto/config.json').read_text()) ckpts=sorted((root/'ckpts/anigen/slat_flow_auto/ckpts').glob('*.pt')) ckpt=[p for p in ckpts if 'ema' not in p.name and 'misc' not in p.name][-1] sd=torch.load(ckpt,map_location='cpu') if next(iter(sd)).startswith('module.'): sd={k[7:]:v for k,v in sd.items()} CORE_PREFIXES=('blocks.','blocks_vert_skin.','blocks_skl.','adapter_geo_to_skin.') shell={k:v.contiguous() for k,v in sd.items() if not k.startswith(CORE_PREFIXES)} core={k:v.contiguous() for k,v in sd.items() if k.startswith(CORE_PREFIXES)} save_file(shell,str(out/'shell.safetensors')) (out/'config.json').write_text(json.dumps(config,indent=2)) meta={'source_checkpoint':ckpt.name,'shell_tensors':len(shell),'core_tensors_removed':len(core),'shell_bytes':(out/'shell.safetensors').stat().st_size,'original_bytes':ckpt.stat().st_size,'removed_prefixes':list(CORE_PREFIXES)} (out/'meta.json').write_text(json.dumps(meta,indent=2));print(json.dumps(meta,indent=2))