import cv2, numpy as np, glob, sys, os

W = "/Users/danicosta/Desktop/AI-Instagram/_inpaint"
v = sys.argv[1]
cx, cy, X0, Y0, CW, CH = map(int, open(f"{W}/{v}/geom.txt").read().split())

mask = cv2.imread(f"{W}/{v}/ppmask.png", cv2.IMREAD_GRAYSCALE)
k = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (17, 17))
md = cv2.dilate(mask, k)
alpha = cv2.GaussianBlur(md.astype(np.float32), (0, 0), 6.0) / 255.0
alpha = np.clip(alpha, 0, 1)[..., None]

Jf = sorted(glob.glob(f"{W}/{v}/frames_full/*.png"))
Pf = sorted(glob.glob(f"{W}/{v}/ppresults/crop/frames/*.png"))
N = len(Jf); assert N == len(Pf) == 240

out_dir = f"{W}/{v}/frames_clean"; os.makedirs(out_dir, exist_ok=True)
for i in range(N):
    full = cv2.imread(Jf[i])
    crop = full[Y0:Y0+CH, X0:X0+CW].astype(np.float32)
    pp = cv2.imread(Pf[i]).astype(np.float32)
    blended = crop * (1 - alpha) + pp * alpha
    full[Y0:Y0+CH, X0:X0+CW] = np.clip(blended, 0, 255).astype(np.uint8)
    cv2.imwrite(f"{out_dir}/{i+1:05d}.png", full)
print(f"{v}: ProPainter composite -> {out_dir}")
