#!/usr/bin/env python3 """Generate the 78 missing ClientPicker previews (tail of sequence).""" import pathlib, subprocess, sys, tempfile SHOOT = pathlib.Path("/Volumes/Sam Storage/YellowMellow/2026/Monster High Theme (10:01:2026)") PREV = SHOOT / "ClientPicker" / "Previews" ids = [l.strip() for l in open("/tmp/missing_ids.txt") if l.strip()] ok, fail = [], [] def extract(raw: pathlib.Path) -> bytes | None: for tag in ("-JpgFromRaw", "-PreviewImage"): r = subprocess.run( ["exiftool", "-b", tag, str(raw)], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) if r.returncode == 0 and len(r.stdout) > 1000: return r.stdout return None for n, i in enumerate(ids, 1): out = PREV / f"{i}.jpg" if out.exists() and out.stat().st_size > 1000: ok.append(i); print(f"[{n}/{len(ids)}] {i} exists", flush=True); continue data = extract(SHOOT / f"{i}.CR3") if not data: fail.append(i); print(f"[{n}/{len(ids)}] {i} EXTRACT_FAIL", flush=True); continue with tempfile.NamedTemporaryFile(suffix=".jpg") as tf: tf.write(data); tf.flush() r = subprocess.run( ["magick", tf.name, "-auto-orient", "-resize", "1400x1400>", "-quality", "90", str(out)], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) good = out.exists() and out.stat().st_size > 1000 (ok if good else fail).append(i) print(f"[{n}/{len(ids)}] {i} {'OK' if good else 'RESIZE_FAIL'}", flush=True) print(f"DONE ok={len(ok)} fail={fail}", flush=True) sys.exit(1 if fail else 0)