Metadata-Version: 2.4
Name: thumbnail-maker
Version: 0.1.3
Summary: 썸네일 생성 도구 - Pillow와 PySide6 기반
Requires-Python: >=3.10
Requires-Dist: fonttools>=4.47.0
Requires-Dist: pillow>=10.0.0
Requires-Dist: pyside6>=6.10.0
Requires-Dist: requests>=2.31.0
Requires-Dist: uv-easy>=0.2.5
Description-Content-Type: text/markdown

# 썸네일 생성기 (Python)

JavaScript 기반 썸네일 생성기를 Python으로 변환한 프로젝트입니다.

## 주요 변경사항

- **Pillow**: 이미지 생성 라이브러리로 사용
- **PySide6**: GUI 프레임워크로 사용
- **Python**: 모든 코드를 Python으로 변환

## 설치 및 실행

uv로 의존성 설치:

```bash
uv sync
```

단일 엔트리포인트(서브명령 방식):

```bash
uv run thumbnail_maker --help
```

### 1) GUI 실행 (추천)

```bash
uv run thumbnail_maker gui
```

기능:
- 제목/부제목 폰트: 웹폰트 URL 또는 로컬 폰트 파일 선택
- DSL 보기/저장: 현재 설정을 `thumbnail.json`으로 저장
- 패키지 저장(.thl): `thumbnail.json` + `fonts/`(TTF/OTF) 묶음으로 저장

### 2) DSL 렌더 (generate-thumbnail)

```bash
uv run thumbnail_maker generate-thumbnail thumbnail.json -o out.png
```

또는 패키지(.thl)로부터 렌더:

```bash
uv run thumbnail_maker generate-thumbnail my_pack.thl -o out.png
```

### 3) 간편 렌더 (genthumb)

```bash
# 제목/부제목 덮어쓰기 (리터럴 \n 또는 실제 줄바꿈 지원)
uv run thumbnail_maker genthumb -o out.png \
  --title "이것이 블로그다.\n파워블로그를 위한" \
  --subtitle "블로그하는\n\n 법 꿀팁모음" \
  my_thumb.json

# 패키지(.thl) 입력도 동일하게 지원
uv run thumbnail_maker genthumb -o out.png my_pack.thl
```

## 주요 파일/구성

```
thumbnail_maker/
├── thumbnail_maker/
│   ├── __main__.py          # 단일 엔트리포인트 (gui, generate-thumbnail, genthumb)
│   ├── gui.py               # PySide6 GUI
│   ├── cli.py               # CLI 로직(패키지 해제 포함)
│   └── renderer.py          # Pillow 기반 렌더러 (폰트 다운로드/변환/폴백)
├── thumbnail.json           # DSL 예제
└── fonts/                   # 변환/다운로드된 TTF/OTF 저장 위치
```

## DSL 파일 형식

```json
{
  "Thumbnail": {
    "Resolution": {
      "type": "preset",
      "value": "16:9"
    },
    "Background": {
      "type": "solid",
      "color": "#a3e635"
    },
    "Texts": [
      {
        "type": "title",
        "content": "제목 텍스트",
        "gridPosition": "tl",
        "font": {
          "name": "SBAggroB",
          "faces": [...]
        },
        "fontSize": 48,
        "color": "#4ade80",
        "outline": {
          "thickness": 7,
          "color": "#000000"
        },
        "enabled": true
      }
    ]
  }
}
```

## 해상도 설정

### Preset 모드
```json
{
  "type": "preset",
  "value": "16:9"  // "16:9", "9:16", "4:3", "1:1"
}
```

### Fixed Ratio 모드
```json
{
  "type": "fixedRatio",
  "ratioValue": "16:9",
  "width": 480  // 또는 height 지정
}
```

### Custom 모드
```json
{
  "type": "custom",
  "width": 480,
  "height": 270
}
```

## 기타

- JavaScript 버전 파일들은 레거시로 유지됩니다.
- DSL/패키지(.thl) 모두 지원합니다.
- 폰트는 자동 다운로드/변환되어 `fonts/`(프로젝트/패키지 내부)에 저장·사용됩니다.

