61 lines
1.6 KiB
Python
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 # 날짜·장소를 밴드로 얹었는가
|