from pathlib import Path
from PIL import Image,ImageChops,ImageDraw
import json
b=Path('/tmp/lead-32471-r2/evidence-capture-2/captures-20261110T170327618014Z')
rows=[]
for kind in ['skill','command','slash-skill']:
 before=Image.open(b/f'before-{kind}.png').convert('RGB');after=Image.open(b/f'after-{kind}.png').convert('RGB')
 for side in ['before','after']:
  a=Image.open(b/f'{side}-{kind}-a.png').convert('RGB');c=Image.open(b/f'{side}-{kind}.png').convert('RGB')
  assert ImageChops.difference(a,c).getbbox() is None,(kind,side,'not settled')
 diff=ImageChops.difference(before,after)
 r,g,blue=diff.split();maximum=ImageChops.lighter(ImageChops.lighter(r,g),blue)
 outside=diff.copy();outside.paste((0,0,0),(740,1400,2140,1540));assert outside.getbbox() is None,(kind,'outside picker')
 info={'outsidePickerPixelsAt0':0,'kind':kind,'dimensions':before.size,'diffBounds':diff.getbbox(),'threshold':16}
 for threshold in [0,16]:
  mask=maximum.point(lambda p:255 if p>threshold else 0)
  count=mask.histogram()[255]
  context=Image.blend(before,Image.new('RGB',before.size,'black'),.78)
  context.paste((255,0,190),(0,0),mask)
  context.save(b/f'diff-{kind}-{threshold}.png')
  info['pixelsAbove'+str(threshold)]=count
 # Full surface sheet, labelled; original PNGs are separate upload artifacts.
 sheet=Image.new('RGB',(1440,970),'#111111');d=ImageDraw.Draw(sheet)
 for i,(label,im) in enumerate([('Before 8ee7183e6c',before),('After 5ac4ccb47f',after)]):
  d.text((i*720+12,8),label,fill='white');sheet.paste(im.resize((720,450)),(i*720,30))
 for i,t in enumerate([0,16]):
  d.text((i*720+12,490),f'Diff {t} / RGB max channel > {t}; changed pixels magenta',fill='white')
  im=Image.open(b/f'diff-{kind}-{t}.png');sheet.paste(im.resize((720,450)),(i*720,515))
 sheet.save(b/f'sheet-{kind}.png')
 rows.append(info)
print(json.dumps(rows,indent=2))
(b/'diff-metrics.json').write_text(json.dumps(rows,indent=2))
