"""Promote one rendered camera variant; preserve the previous landing image.""" import json import shutil import sys from pathlib import Path root = Path(__file__).resolve().parents[1] assets = root / '랜딩페이지/assets' variant = sys.argv[1] if len(sys.argv) > 1 else 'horizontal-smooth' if variant not in ('balanced', 'low', 'high', 'trim30', 'trim20', 'refined', 'horizontal-smooth'): raise SystemExit('Unknown camera variant') source = root / ('.verify/landing-horizontal-20261109' if variant == 'horizontal-smooth' else '.verify/landing-hero-20261109') metadata = json.loads((source / f'{variant}.json').read_text()) if variant == 'horizontal-smooth': assert metadata['along'] == 0 and metadata['outline']['addedOutsideSourcePixels'] == 0 assert metadata['piers'] == 6 and metadata['abutments'] == 2 # Full curve control points remain in the capture audit, outside the service bundle. metadata['outline'].pop('path') backup = source / ('before-horizontal' if variant == 'horizontal-smooth' else 'before-refined' if variant == 'refined' else 'before-trim30') backup.mkdir(exist_ok=True) for name in ('okseong-model-hero.png', 'okseong-model-hero.webp', 'okseong-hero-capture.ts'): if (assets / name).exists() and not (backup / name).exists(): shutil.copyfile(assets / name, backup / name) for kind in ('png', 'webp'): shutil.copyfile(source / f'{variant}.{kind}', assets / f'okseong-model-hero.{kind}') metadata['terrainFlow'] = [None if p is None else {'x': p['x'], 'y': p['y']} for p in metadata['terrainFlow']] (assets / 'okseong-hero-capture.ts').write_text( '// Generated by scripts/promote-landing-hero.py from actual model projection.\n' 'export const heroCapture = ' + json.dumps(metadata, ensure_ascii=False, indent=2) + ' as const;\n' )