fix(insta-lab): design_importer dimension 검증을 4:5 비율로 완화
운영에서 사용자 디자인이 1122x1402로 작성됨. 1080x1350과 정확히 같은 4:5 종횡비지만 절대 사이즈만 다르므로 정확한 사이즈 강제는 과도. - 검증: 종횡비 4:5 (±2% tolerance). 1080x1350·1122x1402 등 동일 비율 높은 해상도 모두 통과. - Vision은 base64로 원본 분석 (사이즈 무관). - Playwright는 background-size: cover로 1080x1350 컨테이너에 자동 fit. - 비율이 깨지면 (예: 1024x1024 정사각) 여전히 reject. test_validate_images_accepts_higher_resolution_4_5_ratio 신규 (1 case).
This commit is contained in:
@@ -102,8 +102,16 @@ def _build_mapping(pngs: List[str]) -> Dict[str, int]:
|
||||
return mapping
|
||||
|
||||
|
||||
_EXPECTED_RATIO = 1080 / 1350 # 4:5 = 0.8
|
||||
_RATIO_TOLERANCE = 0.02 # ±2% (1122/1402 ≈ 0.80028도 통과)
|
||||
|
||||
|
||||
def _validate_images(pages_dir: Path) -> None:
|
||||
"""모든 PNG가 정확히 1080×1350인지 검증. 다르면 ValueError.
|
||||
"""모든 PNG가 4:5 종횡비(1080x1350 권장)에 가까운지 검증.
|
||||
|
||||
Vision은 base64로 원본을 분석하고 Playwright는 background-size: cover로
|
||||
1080x1350 컨테이너에 fit하므로 절대 사이즈는 유연. 단 종횡비가 어긋나면
|
||||
카드가 늘어나거나 잘리므로 ±2% 허용 범위 내에서만 통과.
|
||||
|
||||
early-exit 하지 않고 전체 파일을 검사한 뒤 한 메시지에 모아 raise.
|
||||
"""
|
||||
@@ -111,12 +119,17 @@ def _validate_images(pages_dir: Path) -> None:
|
||||
bad = []
|
||||
for png_path in sorted(pages_dir.glob("*.png")):
|
||||
with Image.open(png_path) as img:
|
||||
if img.size != _EXPECTED_SIZE:
|
||||
w, h = img.size
|
||||
if h == 0:
|
||||
bad.append((png_path.name, img.size))
|
||||
continue
|
||||
ratio = w / h
|
||||
if abs(ratio - _EXPECTED_RATIO) > _RATIO_TOLERANCE:
|
||||
bad.append((png_path.name, img.size))
|
||||
if bad:
|
||||
msg = "; ".join(f"{n}: {s[0]}x{s[1]}" for n, s in bad)
|
||||
raise ValueError(
|
||||
f"모든 카드 디자인은 1080x1350이어야 함. 잘못된 파일: {msg}"
|
||||
f"카드 디자인은 4:5 비율(1080x1350 권장)이어야 함. 잘못된 파일: {msg}"
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user