From d8fd04bce4ca53821695f4dc392eabc365a0e29b Mon Sep 17 00:00:00 2001 From: Daniel Maddern Date: Fri, 14 Aug 2026 00:28:00 +0700 Subject: [PATCH] Add frame directory comparison tool --- tools/compare_frame_dirs.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tools/compare_frame_dirs.py diff --git a/tools/compare_frame_dirs.py b/tools/compare_frame_dirs.py new file mode 100644 index 0000000..a817425 --- /dev/null +++ b/tools/compare_frame_dirs.py @@ -0,0 +1,29 @@ +"""Compare two directories of same-sized PNG frames.""" + +import argparse +from pathlib import Path + +import numpy as np +from PIL import Image + + +parser = argparse.ArgumentParser() +parser.add_argument("a", type=Path) +parser.add_argument("b", type=Path) +parser.add_argument("--frames", type=int, required=True) +args = parser.parse_args() + +rows = [] +for index in range(args.frames): + a = np.asarray(Image.open(args.a / f"frame_{index:04d}.png")).astype(np.int16) + b = np.asarray(Image.open(args.b / f"frame_{index:04d}.png")).astype(np.int16) + diff = np.abs(a - b) + rows.append((index, int(diff.max()), float(diff.mean()), float(np.percentile(diff, 99)))) + +print({ + "frames": args.frames, + "max": max(row[1] for row in rows), + "mean": sum(row[2] for row in rows) / len(rows), + "top_max": sorted(rows, key=lambda row: row[1], reverse=True)[:10], + "top_mean": sorted(rows, key=lambda row: row[2], reverse=True)[:10], +})