from pathlib import Path
from PIL import Image,ImageDraw,ImageFont
import json
root=Path('/tmp/issue-lead-27080-r2/evidence-capture/run-20261029T233700Z')
manifest=json.loads((root/'final-manifest.json').read_text())
font=ImageFont.truetype('/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf',20)
for row in ['R1','R2','R3']:
 labels=[x['label'] for x in manifest['transcripts'] if x['side']=='before' and x['row']==row and ('Up middle' in x['label'] or 'Down middle' in x['label'])]
 cells=[]
 for label in labels:
  for offset in [.4,.9]:
   for side in ['before','after']:
    ts=next(x['seconds'] for x in manifest['transcripts'] if x['side']==side and x['row']==row and x['label']==label)+offset
    im=Image.open(root/f'{side}-{row}-review-{round(ts*2):03}.png').convert('RGB')
    im=im.crop((500,1420,2060,1780)).resize((780,180))
    cells.append((side,ts,label,im))
 sheet=Image.new('RGB',(1560,(len(cells)//2)*210),'#ddd');draw=ImageDraw.Draw(sheet)
 for i,(side,ts,label,im) in enumerate(cells):
  x=(i%2)*780;y=(i//2)*210;sheet.paste(im,(x,y+30))
  draw.text((x+4,y+4),f'{side.upper()} {ts:.1f}s {label}',font=font,fill='black')
 sheet.save(root/f'caret-sheet-{row}.png')
