from pathlib import Path
from PIL import Image, ImageChops
import json,sys
root=Path(sys.argv[1])
rows=[]
for old in sorted(root.glob('old-*.png')):
    page=old.stem.split('-')[1]; new=root/f'new-{page}.png'
    a=Image.open(old).convert('RGBA'); b=Image.open(new).convert('RGBA')
    if a.size!=b.size:
        rows.append({'page':int(page),'same_size':False,'old':a.size,'new':b.size}); continue
    diff=ImageChops.difference(a,b)
    hist=diff.histogram(); pixels=a.width*a.height
    channel_abs=sum((i%256)*count for i,count in enumerate(hist))
    mean_abs=channel_abs/(4*pixels)
    changed=sum(1 for px in diff.getdata() if any(px))
    rows.append({'page':int(page),'same_size':True,'mean_abs_rgba':mean_abs,'changed_pixels':changed,'changed_ratio':changed/pixels,'max_channel_diff':max((i%256 for i,c in enumerate(hist) if c),default=0)})
summary={'pages':rows,'max_mean_abs':max((r.get('mean_abs_rgba',999) for r in rows),default=0),'max_changed_ratio':max((r.get('changed_ratio',1) for r in rows),default=0),'all_identical':all(r.get('changed_pixels')==0 for r in rows)}
(root/'pixel.json').write_text(json.dumps(summary,indent=2)+'\n'); print(json.dumps(summary))
