#!/usr/bin/env python3 """Genera los assets de dashboard para el deck a partir de las capturas recortadas: - step_taps.png : header + ~3 taps (cómo controlas, paso "en vivo") - step_beers.png : header + catálogo (paso "arma tu menú") - step_tv.png : el menú en la TV (paso "conecta una TV") - dash_overview.png: vista general limpia del panel (slide ROI) """ import os from PIL import Image HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.abspath(os.path.join(HERE, "..", "..")) DASH = os.path.join(ROOT, "ventas", "dashboard") SHOTS = os.path.join(ROOT, "tv-app", "store", "screenshots") def fit(img, max_w): if img.width <= max_w: return img return img.resize((max_w, round(img.height * max_w / img.width)), Image.LANCZOS) def save(img, out): img.save(out, optimize=True) kb = os.path.getsize(out) // 1024 print(f" {os.path.relpath(out, ROOT)} ({img.width}x{img.height}, {kb} KB)") def top_crop(src, frac, max_w, out): img = Image.open(src).convert("RGB") w, h = img.size save(fit(img.crop((0, 0, w, int(h * frac))), max_w), out) taps = os.path.join(DASH, "_test_crop.png") beers = os.path.join(DASH, "_beers_crop.png") top_crop(taps, 0.49, 1400, os.path.join(DASH, "step_taps.png")) top_crop(beers, 0.55, 1400, os.path.join(DASH, "step_beers.png")) top_crop(taps, 0.95, 1700, os.path.join(DASH, "dash_overview.png")) # el menú en la TV (paso 1): copia, ya es 16:9 menu = Image.open(os.path.join(SHOTS, "01_menu.png")).convert("RGB") save(fit(menu, 1280), os.path.join(DASH, "step_tv.png"))