# 설계 스펙: 카메라 앵글/색감 변형 파이프라인

**작성일**: 2026-03-16

---

## 파이프라인 흐름

```
1단계: 씬 추출 (현재)
  → 순수 씬 내용만 (카메라/빛감 없음)

2단계: LLM 추천 (GPT-5.4)
  → 씬 내용 분석 → A/B 두 가지 변형 추천
  → 각 변형은: angle_edit(앵글) / color_edit(색감) / none(없음)
  → 둘 다 하지 않는 것도 가능, 한 종류만 권장
  → PDF 대표 이미지 추천 (original / A / B)

3단계: 원본 이미지 생성 (Gemini T2I)
  → 순수 씬 프롬프트만 (앵글/색감 지시 없음)
  → 항상 1장

4단계: 변형 이미지 생성 (Gemini i2i)
  → A 변형: 앵글 → 색감 순서 (해당하는 것만)
  → B 변형: 앵글 → 색감 순서 (해당하는 것만)
  → 앵글: 카메라 다이어그램 + 프롬프트 → Gemini i2i
  → 색감: 프롬프트만 → Gemini i2i
  → 앵글+색감 둘 다면: 앵글 먼저 → 결과물에 색감 적용

5단계: 사용자 선택
  → 원본 / A / B 중 PDF 대표 이미지 선택
  → 초기에는 LLM 추천 = 대표
```

## DB 모델 변경

### SceneStill 추가 컬럼
```
variation_a_type     TEXT    -- "angle" | "color" | "angle+color" | "none"
variation_a_angle    TEXT    -- JSON: {horizontal: 45, vertical: 0, zoom: 1.0}
variation_a_color    TEXT    -- 색감 프롬프트
variation_a_reason   TEXT    -- LLM의 추천 이유

variation_b_type     TEXT
variation_b_angle    TEXT
variation_b_color    TEXT
variation_b_reason   TEXT

recommended_variant  TEXT    -- "original" | "A" | "B" — LLM 추천 대표
selected_variant     TEXT    -- 사용자 선택 대표 (null이면 추천 사용)
```

### ImageAsset 추가 컬럼
```
variant_type         TEXT    -- "original" | "variant_a" | "variant_b"
angle_applied        TEXT    -- JSON: 적용된 앵글 파라미터
color_applied        TEXT    -- 적용된 색감 프롬프트
source_image_id      TEXT    -- i2i 원본 이미지 ID (원본이면 null)
```

## 프론트엔드

### 씬 카드 3열 표시
```
[원본 이미지]  [A 변형 이미지]  [B 변형 이미지]
  프롬프트 편집    앵글+색감 편집     앵글+색감 편집
  재생성 버튼      재생성 버튼        재생성 버튼
                  ★ 대표 선택        ★ 대표 선택
```

### Three.js 앵글 에디터
- 3D 구체 위에 카메라 위치를 드래그로 조정
- horizontal_angle, vertical_angle, zoom 실시간 표시
- 변경 후 "재생성" → Gemini i2i 호출
