---
name: gemini-image
description: "Gemini Pro 기반 포토리얼리스틱 이미지 생성. 광고, 캠페인, SNS 메인 이미지에 최적. Use when: '광고 이미지', '포토리얼', '사진 느낌 이미지', 'Gemini 이미지'."
---

# Gemini Pro Image 생성 스킬

Gemini Pro Image API를 사용하여 포토리얼리스틱 이미지를 생성합니다.

## 스펙
- **모델**: gemini-3-pro-image-preview
- **속도**: ~25초/장
- **비용**: $0 (gcloud 토큰)
- **해상도**: 1024x1024 (JPEG)
- **한글**: 90%+ 정확

## 프롬프트 기법 (task-855.1/858.1 검증)
효과적인 프롬프트를 위해 아래 요소를 포함하세요:

1. **Shot Composition**: rule of thirds, golden ratio, eye-level, worm's-eye
2. **Lighting**: rim lighting, volumetric god-rays, 45° key light, backlit silhouette
3. **Color Theory**: complementary, teal-and-orange cinematic, analogous
4. **Camera Specs**: Phase One IQ4 150MP, Hasselblad H6D-100c, ARRI Alexa 65
5. **Negative Prompting**: "no stock photo, no clipart, no watermark, no text overlay"
6. **Style Reference**: Apple product photography, Rolex editorial, Christopher Nolan cinematic

## 실행 방법

### 코드 위치
`/home/jay/workspace/tools/ai-image-gen/`

### 인증
```bash
# gcloud 토큰 발급 (1시간 유효) — 전체 스코프 URL 형태 필수 (단축형 실패함)
gcloud auth print-access-token --scopes=https://www.googleapis.com/auth/generative-language
```

### API 호출 예시
```python
import httpx

token = subprocess.run(
    ["gcloud", "auth", "print-access-token", "--scopes=https://www.googleapis.com/auth/generative-language"],
    capture_output=True, text=True
).stdout.strip()

response = httpx.post(
    "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent",
    headers={"Authorization": f"Bearer {token}"},
    json={
        "contents": [{"parts": [{"text": prompt}]}],
        "generationConfig": {
            "responseModalities": ["TEXT", "IMAGE"],
            "temperature": 1.0
        }
    },
    timeout=120.0
)
```

## Fallback
Gemini 실패 시 GPT Image v2 (high)로 자동 전환:
```python
# utils/image_router.py에서 처리
```

## 품질 체크리스트
- [ ] 해상도 >= 1080x1080
- [ ] 파일 크기 > 100KB
- [ ] 한글 포함 시 OCR 정확도 >= 95%
- [ ] 브랜드 컬러 준수 (design-tokens.json)
- [ ] Meta 광고 텍스트 비율 <= 20%

## 캐러셀/스토리텔링 비주얼 일관성 규칙
- 슬라이드/캐러셀형 콘텐츠 제작 시, 전체 슬라이드에서 **동일한 비주얼 컨셉**을 유지할 것
  - 1번 슬라이드가 실사형이면 전체 실사형, 일러스트면 전체 일러스트
  - 스타일 혼재 절대 금지 (실사+만화+아이콘 섞기 X)
- **통일된 컬러 팔레트** 사용
  - 슬라이드 1에서 정한 주요 색상(Primary/Secondary/Accent)을 전체에 일관 적용
  - 감정 변화(어두운→밝은)는 같은 색상 계열 내 명도/채도로 표현
- 폰트 스타일도 통일 (같은 서체, 같은 가중치 규칙)

## 모바일 퍼스트 타이포그래피 규칙
- **타겟 디바이스: 모바일 (사용자 80%가 모바일)**
- 광고/카드뉴스의 텍스트는 모바일 화면에서 **즉시 읽을 수 있는 크기**여야 함
- 최소 폰트 크기 가이드 (1080px 기준):
  - 헤드라인: 60px 이상
  - 서브카피/본문: 36px 이상
  - 부가 정보(출처 등): 24px 이상
- 한글은 영문보다 복잡한 자형이므로 **영문 기준보다 10~20% 더 크게**
- 광고 카피가 작아서 안 읽히면 광고 효과 0 — **가독성이 디자인보다 우선**
- Gemini 이미지 생성 시 프롬프트에 "large bold Korean text, easily readable on mobile" 포함

## 적합한 용도
- 포토리얼 단독 비주얼 (텍스트 없음 또는 장식성 1단어 이하)
- 배경 소재 (hybrid-image 1단계용 배경 이미지)
- 감성/분위기 이미지 (SNS 썸네일, 브랜드 감성 포스트)
- 캐러셀 Hook 슬라이드 (텍스트 없는 포토리얼)
- 특정 스타일 재현 (수채화, 일러스트, 영화 스틸 느낌)

## 부적합한 용도
- 로고/CI 정확 재현이 필요한 경우 (왜곡 발생) → hybrid-image 사용
- 데이터 시각화 (표, 차트, 인포그래픽) → satori-cardnews 사용
- 한글 텍스트 포함 광고 (깨짐 위험) → hybrid-image 사용
- CTA 포함 콘텐츠 (가격, 기한, 버튼 등) → hybrid-image 사용
- 특정 폰트 지정 필요 콘텐츠 → hybrid-image 또는 satori-cardnews 사용
- 시리즈 일관성 필요 (동일 프롬프트 재현성 낮음)

## 참고
- 테스트 보고서: `/home/jay/workspace/memory/reports/task-858.1.md`
- 산출물: `/home/jay/workspace/tools/ai-image-gen/output/v3-gemini-pro/`
