"""Usage: python3 make-diffs.py <timestamped run directory>.
No registration, cropping, rescaling, or masking is applied before comparison.
"""
import json
import sys
from pathlib import Path
from PIL import Image, ImageChops

root = Path(sys.argv[1])
summary = []
for before in sorted(root.glob('*-before.png')):
    key = before.name.removesuffix('-before.png')
    after = root / f'{key}-after.png'
    a = Image.open(before).convert('RGB')
    b = Image.open(after).convert('RGB')
    assert a.size == b.size, key
    diff = ImageChops.difference(a, b)
    diff.point(lambda value: min(255, value * 32)).save(root / f'{key}-diff0.png')
    channels = diff.split()
    maximum = ImageChops.lighter(ImageChops.lighter(channels[0], channels[1]), channels[2])
    mask = maximum.point(lambda value: 255 if value > 16 else 0)
    threshold = Image.new('RGB', a.size)
    threshold.paste((255, 0, 255), mask=mask)
    threshold.save(root / f'{key}-diffT.png')
    zero = maximum.point(lambda value: 255 if value else 0)
    summary.append(dict(name=key, imageSize=a.size, diff0Box=diff.getbbox(),
                        diff0Pixels=zero.histogram()[255], diffTPixels=mask.histogram()[255]))
(root / 'diff-summary.json').write_text(json.dumps(summary, indent=2))
print(json.dumps(summary, indent=2))
