# 멀티턴 파이프라인 재설계

## LLM 역할 분리

| 역할 | 모델 | 용도 |
|---|---|---|
| 텍스트 분석 | `gemini-3.1-pro-preview` | 요소/씬 추출, T2I 프롬프트, 스타일 규칙 |
| 이미지 생성 | `gemini-3.1-flash-image-preview` | T2I, I2I |
| 이미지 판단 | `gpt-5.4` (LVM only) | 검증, 비교 선택, 변형 추천 |

## 전체 흐름

```
A. 요소 추출 (Gemini 멀티턴 4턴)
  Turn 1: 시나리오 전문 → 중요 요소 제목만
  Turn 2: → 인물 세부 + 시각적 변형 (늙은A, 변장A 등)
  Turn 3: → 배경 세부 + 상태 변형 (공터 낮, 공터 비오는날 등)
  Turn 4: → 중요 물체

B. 요소 참조 이미지 (Gemini T2I + GPT LVM)
  1) 의존성 순서대로 T2I 생성 (기본→변형, 변형은 기본 참조이미지 포함)
  2) GPT LVM 검증 → 심각도 판단
  3) 심각하면 재생성 → GPT LVM 비교 선택
  4) 최종 참조 이미지 확정

C. 씬 추출 (Gemini 멀티턴, 요소 컨텍스트 포함)
  Turn 1: 시나리오 전문 + 확정된 요소 목록 → 전체 씬 간략 리스팅
  Turn 2~N: 씬 1번부터 순차 상세 분석 (multi-turn)
    - 대표 이미지 순간 선택
    - T2I 프롬프트 생성
    - 의존 요소 확인
    - 앞쪽 가장 비슷한 의존 씬 1개

D. 씬 이미지 생성 (Gemini T2I + GPT LVM)
  1) T2I 생성 (참조 이미지 포함)
  2) GPT LVM 검증 → 심각도
  3) 심각하면 재생성 → GPT LVM 비교 선택
  4) 베이스 이미지 확정

E. I2I 연출 개선 (GPT LVM 추천 + Gemini I2I)
  1) GPT LVM: 구도/색감 개선안 n개 추천
  2) Gemini I2I: n개 변형 생성
  3) GPT LVM: 최종 대표 이미지 선택
```

## DB 변경

- EntityCanon: 변형도 별도 레코드 (늙은A = EntityCanon)
- RelationFact: 변형→기본 연결 (identity, directed) — 기존 코드 활용
- SceneStill: `dependent_scene_id` 추가 (앞쪽 의존 씬 1개)
- ProjectSettings: `gemini_text_model` 추가
- config.py: `gemini_text_model` 설정 추가

## 새 모듈

```
backend/app/modules/
  llm/
    gemini_text_client.py     ← 신규 (멀티턴 REST API)
  pipeline/                   ← 신규 디렉토리
    entity_extractor_v2.py    ← 4턴 멀티턴 요소 추출
    scene_extractor_v2.py     ← N턴 멀티턴 씬 추출
    ref_image_pipeline.py     ← 요소 이미지 생성+LVM검증+비교
    scene_image_pipeline.py   ← 씬 이미지 생성+LVM검증+I2I
```

## 기존 모듈 보존

기존 모듈은 삭제하지 않고 보존. 새 pipeline/ 모듈이 대체.

## 개발 순서

Phase 1: gemini_text_client.py + config
Phase 2: entity_extractor_v2.py (4턴)
Phase 3: scene_extractor_v2.py (N턴)
Phase 4: analysis_service.py 연결
Phase 5: ref_image_pipeline.py (T2I+LVM)
Phase 6: scene_image_pipeline.py (T2I+LVM+I2I)
Phase 7: image_service.py 연결
Phase 8: UI 업데이트
