playreel/backend/models/styling.py

61 lines
1.6 KiB
Python

"""포스터 스타일링 — 화풍 레퍼런스로 포스터를 다시 그린다"""
from dataclasses import dataclass
from enum import StrEnum
from pydantic import BaseModel
class TemplateLicense(StrEnum):
"""끄는 조건이 달라 등급을 나눈다
PUBLIC은 보호기간이 끝나 외부 공개가 되고
INTERNAL은 번들 레퍼런스의 권리가 남아 배포 시 감추며
USER는 올린 사람 책임이라 막지 않고 고지만 한다
"""
PUBLIC = "public-domain"
INTERNAL = "internal-only"
USER = "user-uploaded"
class TemplateCategory(StrEnum):
FINE_ART = "fine_art"
ORIENTAL = "oriental"
FILM = "film"
USER = "user"
class StyleTemplate(BaseModel):
"""번들과 사용자 레퍼런스가 같은 모양을 쓴다"""
id: str
name_ko: str
category: TemplateCategory
license: TemplateLicense
style_prompt: str
reference_url: str # 전이에 넣는 고해상본
thumbnail_url: str
attribution: str = ""
license_note: str = ""
small_reference: bool = False # 레퍼런스가 작아 결과가 나빠질 수 있음
class OutputFormat(BaseModel):
"""gpt-image가 내는 크기로 만든 뒤 필요하면 센터 크롭한다"""
id: str
label: str
generated_size: str
crop: tuple[int, int] | None = None
@dataclass
class ReferenceVariants:
reference: bytes # 긴 변 REFERENCE_LONG_EDGE
thumbnail: bytes
size: tuple[int, int]
@dataclass
class TransferResult:
image: bytes
format_id: str
style_prompt: str
has_info_band: bool # 날짜·장소를 밴드로 얹었는가