# 🖼️ 05 — 이미지 만들기

> **목표**: 앞 단계들에서 정리된 프롬프트로 **실제 AI 그림**을 생성하고, 품질을 검증합니다.

---

## 왜 이 단계가 필요한가?

지금까지의 모든 단계는 **텍스트 작업**이었습니다. 이제 드디어 **그림**이 나옵니다.

그러나 AI에게 한 번에 씬 이미지를 그리라고 하면 **얼굴이 매번 다르게** 나옵니다:
- 씬 1의 수리영: 긴 머리 38세
- 씬 3의 수리영: 중단발 25세
- 씬 5의 수리영: 단발 50세

같은 사람인데 매번 달라지면 웹북이 엉망입니다.

**해결책**: 먼저 **참조 이미지**를 만들고, 이후 씬 이미지들은 그 얼굴을 **참조**하여 생성.

---

## 전체 흐름

```mermaid
flowchart TD
    Start[📝 샷 프롬프트 준비 완료] --> Ref[1. 참조 이미지 생성<br/>인물·소품 얼굴 고정]
    Ref --> Comp[2. 합성 이미지<br/>인물+의상 조합]
    Comp --> Scene[3. 씬 이미지 생성<br/>실제 씬 그리기]
    Scene --> Rev[4. 품질 검증<br/>AI가 다시 체크]
    Rev -->|합격| Save[✅ 이미지 저장]
    Rev -->|불합격| Retry[재생성]
    Retry --> Scene

    Save --> Done[📕 웹북에 사용]

    style Start fill:#2a2d35,stroke:#6386FF,color:#fff
    style Done fill:#2a2d35,stroke:#22c55e,color:#fff
    style Rev fill:#a78bfa,color:#000
```

---

## 단계 1: 참조 이미지 생성 (Reference Image)

### 무엇을 하나?

각 **인물·소품**의 "기준 이미지"를 먼저 만듭니다.

### 어떤 이미지?

- **인물**: 얼굴과 상반신 중심의 초상화 같은 이미지
- **소품**: 단독으로 촬영된 깔끔한 이미지
- **장소**: 배경 전경 이미지 (씬 감독이 배경 선택 시 사용)

### 왜 별도로 만드나?

AI가 씬 이미지 만들 때 이 참조를 **"이 얼굴로 그려줘"** 라고 전달. 그러면 모든 씬에서 같은 얼굴이 나옴.

### 예시

**수리영 참조 이미지** (프롬프트):
```
Portrait of a Korean woman in her late 30s.
Long straight black hair, serious expression,
casual dark clothing, natural lighting,
photorealistic, high detail, studio quality.
```

→ AI가 생성한 이미지: 수리영의 **얼굴 기준**

이후 모든 씬에서 이 얼굴이 **그대로** 사용됨.

---

## 단계 2: 합성 이미지 (Composite)

### 무엇을 하나?

**인물 + 의상 조합**을 미리 만듭니다.

### 왜 필요한가?

한 인물이 여러 의상을 입는다면:
- C01 (수리영) + O01 (평상복) = 평상복 입은 수리영
- C01 (수리영) + O02 (해녀복) = 해녀복 입은 수리영

각 조합을 **미리 만들어** 두면, 씬 이미지 생성 시 "평상복 버전 수리영 써줘" 라고 요청 가능.

---

## 단계 3: 씬 이미지 생성 (Scene Image)

### 무엇을 하나?

드디어 **씬별 실제 이미지**를 만듭니다.

### 입력

- 샷의 영문 T2I 프롬프트 (앞 단계에서 만든 것)
- 참조 이미지들 (인물 얼굴, 장소 배경)
- 씬 내 고정 요소 (scene_consistency)

### AI에게 제공되는 정보

```mermaid
flowchart LR
    Text[📝 텍스트 프롬프트] --> AI[🤖 AI Image Generator<br/>Gemini 3.1 Flash]
    Ref1[👤 참조: 수리영 얼굴] --> AI
    Ref2[🏠 참조: 옥탑방 배경] --> AI
    Rules[📏 제약: 인물 자세 고정] --> AI

    AI --> Img[🖼️ 생성된 이미지]
```

### 한 샷당 N개 생성

보통 **2~3개의 변형 이미지**를 생성. 사용자가 골라서 사용.

### 외부 서비스 통합

- **Gemini 3.1 Flash Image** (Google): 기본 이미지 생성
- **fal.ai**: 앵글 편집 (생성된 이미지를 기반으로 각도 바꾸기)

---

## 단계 4: 품질 검증 (T2I Review)

### 무엇을 하나?

AI가 생성한 이미지를 **AI가 다시 검증**합니다.

### 체크 항목

✅ **인물 인식**: 프롬프트에 명시된 인물이 실제로 이미지에 있는가?
✅ **장소 일치**: 지정된 장소처럼 보이는가?
✅ **엔티티 수**: 너무 많거나 적지 않은가?
✅ **자세 일관성**: 씬 내 고정 요소가 지켜졌는가?
✅ **금지 요소**: 작품 톤에 맞지 않는 요소(현대 도시에서 한복만 입은 이상한 인물 등) 없는가?

### 결과

- **합격**: 저장 후 웹북 사용
- **불합격**: 자동 재생성 (최대 2회)
- **2회 재시도 실패**: 사용자에게 알림, 수동 개입 필요

### 점수 예시

```
이미지 ID: img_456
검증 점수: 87/100
  - 인물 인식: ✓ 수리영 일치
  - 장소: ✓ 옥탑방 일치
  - 자세: ✓ 고정 요소 준수
  - 문제: 약간 과한 조명
결과: 합격 (70점 이상)
```

---

## 모더레이션 (검열) 문제

### 현재 문제

AI 이미지 생성 서비스는 **잔혹·선정·민감** 콘텐츠에 엄격:
- 살해 장면 → 거부
- 피·시체 묘사 → 거부
- 어린이 등장 → 거부
- 맨살 노출 → 거부

### 현재 대응

- 재시도 시 **프롬프트를 약간 완화**
- 그래도 안 되면 **다른 모델 시도** (fallback)
- 최후엔 **사용자에게 알림**

### 미해결 영역

상업 영화의 현실적 요구(스릴러·공포 장르)와 AI 모더레이션 사이의 균형은 **지속 개선 과제**.

---

## 앵글 편집 (fal.ai)

### 무엇을 하나?

생성된 이미지를 **다른 각도**로 재생성.

### 예시

원본 이미지: "수리영이 정면을 본다"
편집 요청: "수평 +30도, 수직 -15도"
→ 수리영이 **살짝 왼쪽에서 본 듯한** 이미지

### 사용 시나리오

- "이 샷 구도가 밋밋해, 살짝 옆에서"
- "너무 멀리 있어, 줌인"
- "위에서 내려다보는 느낌으로"

---

## 최종 결과

### 이미지 저장 위치

```
projects/{project_id}/assets/generated/
  ├── references/              # 참조 이미지
  │   ├── C01_suri-young.png   (수리영)
  │   ├── C02_min-sook.png     (민숙)
  │   └── L01_rooftop.png      (옥탑방)
  ├── composites/              # 합성 이미지
  │   ├── C01_O01.png          (수리영+평상복)
  │   └── C01_O02.png          (수리영+해녀복)
  └── scenes/                  # 씬 이미지
      ├── S1_shot1_a.png
      ├── S1_shot1_b.png       (변형 A, B)
      └── ...
```

### 생성 개수 (금월도 1부 예상)

- 👤 참조 이미지: 7개 (인물) + 4개 (장소) = 11개
- 👗 합성 이미지: 10~15개 (인물×의상 조합)
- 🎬 씬 이미지: 180~360개 (샷 80~120개 × 변형 2~3개)

### 소요 시간

- 참조 이미지: 5~10분
- 합성: 2~5분
- 씬 이미지: 20~40분 (병렬 처리로 단축)

---

## 왜 이렇게 3단계로 나눴나?

### 대안 1: 한 번에 씬 이미지 생성
❌ 문제: 씬마다 얼굴 바뀜, 장소 불일치

### 대안 2: 참조만 미리 생성
🟡 부분 해결: 의상 바뀔 때 일관성 없음

### 현재 방식: 3단계 (참조 → 합성 → 씬)
✅ 인물·의상·장소 모두 일관 유지

---

## 사용자가 수정할 수 있는 것

### 이미지 교체
생성된 이미지가 마음에 안 들면:
- **재생성** 버튼 → 같은 프롬프트로 새 이미지
- **프롬프트 편집** → 문구 수정 후 재생성
- **앵글 편집** → 슬라이더로 각도 조정 (fal.ai)
- **색감 편집** → "더 어둡게" 등 자연어 지시

### 변형 선택
2~3개 변형 중 **대표 이미지** 선택.

### 사용자 업로드
직접 이미지 업로드 가능 (AI 생성 대신).

---

## 이 단계가 잘못되면?

🚫 **인물 얼굴 미달**:
- 참조 이미지가 부실 → 씬마다 얼굴 다름
- **해결**: 사용자가 참조 이미지 수동 재생성

🚫 **모더레이션 차단**:
- 폭력/선정 장면 계속 거부
- **해결**: 완화된 프롬프트, 또는 플레이스홀더 이미지 + 사후 합성

🚫 **품질 검증 실패**:
- 같은 이미지가 계속 재시도
- **해결**: 2회 후 포기, 사용자 알림

---

## 실제 예시: 금월도 1부

- **참조 이미지**: 11개 성공 생성
- **씬 이미지**: 샷 90개 × 변형 3개 = 270장 생성 예상
- **예상 소요 시간**: 40~60분 (병렬 처리)
- **검증 통과율**: 약 85% (15%는 재시도 또는 사용자 개입)

---

## 다음 단계

이제 **AI 이미지 생성**이 끝났습니다.
하지만 완벽하지 않으므로 **사람이 최종 수정**할 수 있어야 합니다.

→ [06-editing.md](./06-editing.md) — 사용자 편집
