import struct, json def load_thneed(fn): with open(fn, "rb") as f: json_len = struct.unpack("I", f.read(4))[0] jdat = json.loads(f.read(json_len).decode('latin_1')) weights = f.read() ptr = 0 for o in jdat['objects']: if o['needs_load']: nptr = ptr + o['size'] o['data'] = weights[ptr:nptr] ptr = nptr for o in jdat['binaries']: nptr = ptr + o['length'] o['data'] = weights[ptr:nptr] ptr = nptr return jdat def save_thneed(jdat, fn): new_weights = [] for o in jdat['objects'] + jdat['binaries']: if 'data' in o: new_weights.append(o['data']) del o['data'] new_weights_bytes = b''.join(new_weights) with open(fn, "wb") as f: j = json.dumps(jdat, ensure_ascii=False).encode('latin_1') f.write(struct.pack("I", len(j))) f.write(j) f.write(new_weights_bytes)