# 이미지 생성 스킬 오너십 배분표
> 최초 작성: 2026-03-24 (task-869.1 기준)
> 근거: task-867.1 에이전트 미팅 합의

---

## 스킬별 오너십

### image-gen-guide (라우터 스킬)
- **코드 오너**: 다그다 (dev3 팀장) — 라우팅 정책 유지보수
- **역할**: 이미지 생성 요청을 받아 용도별 최적 스킬로 라우팅하는 의사결정 허브. 직접 이미지를 생성하지 않으며, 트리 로직에 따라 하위 스킬을 호출한다.
- **트리거 키워드**: `이미지 만들어줘`, `광고 이미지`, `카드뉴스`, `배너`, `이미지 생성이 필요한데 어떤 방법을 쓸지 모를 때`
- **라우팅 대상**:
  - 포토리얼 + 한글 많음 → `hybrid-image`
  - 포토리얼 + 한글 적거나 없음 → `gemini-image`
  - 카드뉴스/배너/인포그래픽 → `satori-cardnews`
  - 일반 HTML 캐러셀 → 기존 `carousel-gen` 도구 직접 사용
  - Gemini 장애 시 → GPT Image v2 (high) 백업

---

### gemini-image
- **코드 오너**: 루 (dev3 백엔드)
- **역할**: Gemini Pro Image API(`gemini-3-pro-image-preview`)를 사용하여 포토리얼리스틱 이미지를 생성. 광고, 캠페인 비주얼, SNS 메인 이미지에 주력으로 사용. 속도 25초/장, 한글 90%+ 정확.
- **트리거 키워드**: `광고 이미지`, `포토리얼`, `사진 느낌 이미지`, `Gemini 이미지`
- **의존성**:
  - `gcloud` CLI (토큰 발급: `gcloud auth print-access-token --scopes=https://www.googleapis.com/auth/generative-language` — 단축형 `generative-language` 사용 불가)
  - Gemini Pro Image API (`https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent`)
  - `image_router.py` / `gcloud_auth.py` (코드 오너: 불칸, dev1 백엔드)
  - `design-tokens.json` (코드 오너: 비너스, 디자인)

---

### satori-cardnews
- **코드 오너**: 브리짓 (dev3 프론트)
- **역할**: Vercel Satori(HTML/CSS→SVG) + resvg-js(SVG→PNG)로 카드뉴스·배너·인포그래픽을 초고속 생성. 속도 0.32초/장(AI 대비 25~75배), 한글 100% 정확. A/B 테스트 대량 생산에도 적합.
- **트리거 키워드**: `카드뉴스`, `배너`, `인포그래픽`, `대량 이미지`, `A/B 테스트 이미지`
- **의존성**:
  - Node.js ESM 런타임
  - `@vercel/satori` 패키지
  - `resvg-js` 패키지
  - 한글 폰트: Noto Sans KR, Pretendard (SIL OFL, 상업 이용 가능)
  - 템플릿: `carousel-gen/templates/` (코드 오너: 이리스, dev1 프론트)
  - `design-tokens.json` (코드 오너: 비너스, 디자인)

---

### hybrid-image
- **코드 오너**: 루 (dev3 백엔드) + 브리짓 (dev3 프론트) 공동
  - 루: Gemini API 배경 생성 파트 (백엔드 API 호출)
  - 브리짓: HTML 오버레이 템플릿 파트 (프론트 HTML/CSS)
- **역할**: Gemini Pro Image API로 포토리얼 배경을 생성하고, HTML/CSS + Playwright 헤드리스 브라우저로 한글 텍스트를 정확하게 오버레이. 한글 3줄 이상 포함된 포토리얼 이미지(보험 광고 등)에 최적. 속도 ~25초/장, 한글 100% 정확.
- **트리거 키워드**: `한글 텍스트 + 사진 배경`, `보험 광고 이미지`, `텍스트 정확한 포토 이미지`
- **의존성**:
  - Gemini Pro Image API (gcloud 토큰, gemini-image와 동일)
  - Playwright (헤드리스 브라우저, PNG 캡처)
  - 한글 폰트: Noto Sans KR
  - `design-tokens.json` (코드 오너: 비너스, 디자인)

---

## 스킬 사용 판단 주체

| 상황 | 판단 주체 |
|------|-----------|
| 요청에 이미지 종류가 명확히 명시된 경우 | **자동 라우터** (image-gen-guide 의사결정 트리) — 스킬이 자동 선택 |
| 요청이 모호하거나 복합적인 경우 | **다그다 (dev3 팀장)** — 라우팅 정책 책임자 |
| 스킬 인식 범위 밖(팀 외부)에서 요청이 오는 경우 | **아누 (또는 팀장급)** — image-gen-guide는 전체 공개이므로 아누가 최초 진입점 역할 |
| Gemini 장애 등 장애 상황 | **자동 fallback** (`image_router.py`에서 GPT Image v2 high로 전환, 불칸 오너) |

참고: task-867.1 합의에 따라 전담 팀을 신설하지 않고, 각 팀이 스킬 호출 방식으로 직접 사용한다.

---

## 트리거 키워드 중복/누락 분석

### 중복 트리거 위험

| 키워드 | 매칭 스킬 | 위험도 | 비고 |
|--------|-----------|--------|------|
| `광고 이미지` | image-gen-guide, gemini-image 양쪽에 존재 | 중간 | image-gen-guide가 먼저 인식되면 내부 트리에서 gemini-image로 정상 라우팅되므로 실질 충돌 없음. 단, gemini-image가 직접 호출될 경우 라우터를 거치지 않아 한글 적합성 판단이 생략될 수 있음. |
| `카드뉴스`, `배너` | image-gen-guide, satori-cardnews 양쪽에 존재 | 낮음 | 위와 동일한 구조. 직접 호출 시 라우터 우회 가능성 있음. |

### 누락된 용도/키워드

1. **`인스타그램 이미지`, `SNS 이미지`**: image-gen-guide description에 없음. 실제로는 포토리얼(gemini-image)이나 카드뉴스(satori-cardnews) 둘 다 해당될 수 있어 라우터 경유가 반드시 필요한 키워드임. image-gen-guide에 추가 권장.
2. **`A/B 테스트`**: satori-cardnews에만 있고 image-gen-guide에는 없음. 대량 생산 요청이 라우터를 거치지 않고 gemini-image로 잘못 라우팅될 위험.
3. **`보험 광고`**: hybrid-image의 대표 용도임에도 image-gen-guide description에 키워드 없음. 라우터 description에 `보험 광고`, `텍스트 많은 광고` 추가 권장.
4. **fallback 경로**: GPT Image v2 백업에 대한 독립 스킬이 없음 — image-gen-guide와 gemini-image에서 장애 시 처리를 언급하고 있으나, 명시적 fallback 스킬 부재. 추후 `gpt-image-backup` 스킬 신설 검토 필요.

---

## 라우팅 로직 검증 결과

### 검증 항목별 결과

| 검증 항목 | 결과 | 상세 |
|-----------|------|------|
| 포토리얼 → gemini-image 라우팅 | **정상** | image-gen-guide 트리에서 "YES + 한글 적거나 없음 → gemini-image" 명시. gemini-image SKILL.md 용도와 일치. |
| 카드뉴스/배너 → satori-cardnews 라우팅 | **정상** | image-gen-guide 트리에서 "카드뉴스/배너/인포그래픽 → satori-cardnews" 명시. satori-cardnews 적합 용도와 일치. |
| 한글+포토리얼 → hybrid-image 라우팅 | **정상** | image-gen-guide 트리에서 "YES + 한글 텍스트 많음 → hybrid-image" 명시. hybrid-image "언제 사용하나?" 섹션과 일치. |
| 교차 참조 (satori에서 포토리얼→gemini-image 언급) | **정상** | satori-cardnews "부적합한 용도" 섹션에 "포토리얼리스틱 이미지 → gemini-image 사용", "복잡한 일러스트/아트워크 → gemini-image 사용" 명시. |
| 교차 참조 (hybrid에서 한글 적으면→gemini-image 언급) | **정상** | hybrid-image "한글이 적으면?" 섹션에 "→ gemini-image 스킬 사용" 명시. |
| Gemini 장애 fallback | **정상 (부분)** | image-gen-guide 트리 하단과 gemini-image Fallback 섹션에 언급. 단, 자동 전환 로직은 `image_router.py` 미구현 상태(선결 과제). |

### 개선 권장 사항

1. **image-gen-guide description 보강**: `보험 광고`, `A/B 테스트`, `SNS 이미지` 키워드 추가로 라우터 진입률 향상.
2. **gemini-image/satori-cardnews 직접 호출 가이드라인**: 라우터를 우회하는 직접 호출 시 한글 적합성 판단 책임이 호출자에게 이전됨을 명시 권장.
3. **`image_router.py` 구현 완료 전까지**: fallback(GPT Image v2)은 수동으로 판단해야 함 — 불칸(dev1 백엔드)이 최우선 과제로 추진 중(task-867.1 선결 과제 #4).
4. **"한글 많음" 기준 수치화**: hybrid-image는 "3줄 이상"으로 명시되어 있으나, image-gen-guide 트리에는 정량 기준 없음. 일관성 확보를 위해 트리에도 "(3줄 이상)" 조건 추가 권장.
