PixelModel-v2 / convert_to_safetensors.py
wop's picture
Upload 17 files
e465a2f verified
Raw
History Blame
1.56 kB
"""
convert_to_safetensors.py - model.png -> model.safetensors.
model.png stays the canonical model; this exports the same weights in the
standard format, with parameter-count metadata embedded in the safetensors
header so the count is verifiable without running any code.
Usage:
python convert_to_safetensors.py
python convert_to_safetensors.py --model model.png --out model.safetensors
"""
import argparse
import json
import os
from safetensors.torch import save_file
from model import MODEL_H, MODEL_W, N_PARAMS, NATIVE_RES, PARAM_SPECS, load_model
def main():
p = argparse.ArgumentParser()
p.add_argument("--model", default="model.png")
p.add_argument("--out", default="model.safetensors")
args = p.parse_args()
weights = load_model(args.model)
counts = {name: int(weights[name].numel()) for name, _ in PARAM_SPECS}
assert sum(counts.values()) == N_PARAMS
metadata = {
"model_type": "pixelmodel-v2",
"total_parameters": str(N_PARAMS),
"param_breakdown": json.dumps(counts),
"text_encoder_parameters": "0",
"vae_parameters": "0",
"has_bias": "true",
"native_resolution": f"{NATIVE_RES}x{NATIVE_RES}",
"source_png": f"{MODEL_W}x{MODEL_H} px, 16-bit codec (R=high byte, G=low byte)",
}
save_file(weights, args.out, metadata=metadata)
print(f"{args.model} -> {args.out} ({os.path.getsize(args.out)} bytes, "
f"{N_PARAMS} parameters)")
if __name__ == "__main__":
main()