#!/usr/bin/env python3 from pathlib import Path from PIL import Image, ImageChops, ImageStat ROOT = Path(__file__).resolve().parent baseline_path = ROOT / "rendered/resizes-content-baseline.png" expected_path = ROOT / "expected/resizes-content-patched.png" diff_path = ROOT / "diff/resizes-content.png" baseline = Image.open(baseline_path).convert("RGB") expected = Image.open(expected_path).convert("RGB") if baseline.size != expected.size: raise SystemExit(f"size mismatch: {baseline.size} != {expected.size}") raw = ImageChops.difference(baseline, expected) stat = ImageStat.Stat(raw) rms = sum(value * value for value in stat.rms) ** 0.5 mask = raw.convert("L").point(lambda value: 255 if value > 24 else 0) overlay = expected.copy() red = Image.new("RGB", expected.size, (211, 95, 95)) overlay.paste(red, mask=mask) overlay = Image.blend(expected, overlay, 0.65) diff_path.parent.mkdir(parents=True, exist_ok=True) overlay.save(diff_path) changed = sum(mask.histogram()[1:]) / (baseline.width * baseline.height) print(f"size={baseline.width}x{baseline.height}") print(f"changed_ratio={changed:.6f}") print(f"combined_rms={rms:.3f}") print(f"wrote={diff_path}")