import sys, os, json, numpy as np
sys.path.insert(0, '/home/claude/loop/human/v3card'); sys.path.insert(0, '/home/claude/loop/lib'); sys.path.insert(0, '/home/claude/dv/cards')
os.environ['PURE4_NO_MAIN'] = '1'
import pure4 as P, render3 as r, g1
from PIL import Image, ImageDraw
OUT = '/home/claude/loop/human/video'; os.makedirs(f'{OUT}/frames', exist_ok=True)
sc = P.sc; size = (r.W, r.H)
# 静的な地理レイヤーのマスクは一度だけ
grat_a = P.aa_mask(size, P.grat(sc)); c66_a = P.aa_mask(size, P.circle66(sc)); lat_a = P.aa_mask(size, P.lat_labels(sc))
place_a = [P.aa_mask(size, P.text_fn(sc, it, 20)) for it in P.PLACES]
town_a = [P.aa_mask(size, P.text_fn(sc, it, 14, 0.10, dot=2.2)) for it in P.TOWNS]
def year_mask(y):
    f = g1.font('Regular', 30*P.SS)
    def fn(d, s): d.text((r.W*s - 72*s, r.H*s - 72*s), str(y), font=f, fill=255, anchor='rs')
    return P.aa_mask(size, fn)
def frame(Y, path):
    p = dict(P.BASE, stack_to=Y)
    out = r.render(p, f'{OUT}/tmp'); im = Image.open(f'{out}/render.png')
    im = P.comp_rel(im, grat_a, 0.22, 0.16); im = P.comp_rel(im, c66_a, 0.22, 0.16); im = P.comp_rel(im, lat_a, 0.30, 0.20)
    for a in place_a: im = P.comp_label(im, a)
    for a in town_a: im = P.comp_label(im, a)
    im = P.comp_label(im, year_mask(Y)); im.save(path)
for Y in range(1979, 2026):
    frame(Y, f'{OUT}/frames/{Y}.png'); print(Y, end=' ', flush=True)
