kintex/.claude/skills/nanobanana-visualize/SKILL.md
zio 3da6b1c092 feat(harness): ReRoomAI 분석 반영 — PLANNING v1.1 나노바나나 파이프라인 확정 + client.py 재작성 + Stitch 전달
- docs/analysis/reroomai-source.md 신규: gemini-3.1-flash-image-preview image-to-image, 보존/교체 프롬프트, CompareSlider/전처리 차용
- PLANNING v1.1: §6-4/6-5 나노바나나 호출스택·부스 프롬프트 빌더 확정, R11 해소·R12(Gemini 외부API 승인 게이트) 추가
- tools/nanobanana/client.py 전면 재작성: build_booth_prompt 4단 조립, 메타데이터 임베드, S6 래스터 합성 분리, seed 폴백, 방어 로직
- BACKLOG B-02/B-03/B-09/B-11/B-12 done
- kintex.com 2차 검증 순증 사실 반영(기본부스 사양·이격·홀 스펙)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 16:40:11 +09:00

68 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: nanobanana-visualize
description: 부스/인테리어/배선/조명 설계 데이터를 나노바나나(Gemini 이미지 생성)로 '시공 후 결과 사진'으로 렌더링할 때 사용. 시공 시안 이미지, before/after 비교, 조명 야간 연출, 배선 오버레이 생성 요청 시 트리거.
---
# 나노바나나 시공 결과 시각화 스킬
ReRoomAI 실증 패턴(`docs/analysis/reroomai-source.md`)을 표준화한 파이프라인.
"부스 골격 보존 + 표면(집기·조명·배선) 교체" image-to-image 편집.
## 호출 표준
- **모델**: `gemini-3.1-flash-image-preview` (나노바나나 2). 환경변수 `NANOBANANA_MODEL` 로 오버라이드 가능.
- **호출**: `tools/nanobanana/client.py``NanoBananaClient`만 사용(직접 API 호출 금지).
google-genai(`google.genai`) SDK로 `generate_content(model, contents=[Part.from_bytes(...), text])`.
참조 이미지는 `inlineData(mimeType+base64)`, 지시문은 `text` — parts 배열로 전달. mimeType 자동 감지.
- **보안**: API 키는 환경변수 `GEMINI_API_KEY` 에서만 로드. 코드/로그/커밋/응답에 절대 기록 금지.
★ 실제 Gemini 호출은 **소유자 승인 대기**(reroomai-source.md §8) — 승인 전 실호출 강제 금지.
## 프롬프트 빌더 (구조화 사전 조립 + 보존/교체 분리)
`build_booth_prompt(scene, shot_preset, layers)` 가 PLANNING §6-2 스키마를 4단으로 조립:
1. **대상+스타일**`BOOTH_TYPES`(독립/조립/코너/아일랜드) × `BOOTH_STYLES`(럭셔리/테크/친환경/미니멀/표준) + 치수·브랜드컬러.
2. **보존 잠금** — 부스 외곽 치수·기둥·바닥 트렌치 그리드·천장 트러스·통로 방향·카메라 앵글 유지.
3. **교체 지정**`FIXTURE_LAYERS`(집기/조명/전기/네트워크) 레이어별 조각 + 간판 문구(한글)·자재·존·색온도.
4. **사진 품질** — photorealistic tradeshow, natural lighting, high detail, no people/real logos.
입력은 §6-2 `scene`(hall/booth/design/lighting/wiring + shot/render_hints). 중첩/평면 모두 관대 파싱.
## 절차
1. 입력 확인: `scene` dict(§6-2)가 구조화됐는지 확인. 없으면 설계 데이터/사용자에서 추출.
2. `GEMINI_API_KEY` 확인. 없으면 발급 안내 후 중단. (승인 전이면 실호출 보류)
3. `NanoBananaClient().render_shot(scene, shot_preset="S1", reference_image=빈부스사진, seed=고정값)`.
4. 표준 샷 세트 S1~S7 순서로 생성:
- S1 정면 주간 → S2 정면 야간 → S3 통로 → S4 내부 (모두 `render_shot`)
- S5 Before/After: S1 결과 + `reference_image`(빈 부스 실측) 쌍
- S7 홀 조감: `render_shot(shot_preset="S7")`
- **S6 배선 오버레이**: 생성형 아님 → `render_wiring_overlay_raster(wiring, hall_dims_m, kinds, base_image)`
(도면 위 전기 적/네트워크 청/급배수 녹 경로를 좌표 정합 래스터 합성. 시공 검증용 1차 산출물).
발표/설명용 보조 이미지가 필요할 때만 `generate_wiring_overlay`(생성형, 검증 사용 금지).
5. 빈 부스 실측 사진은 `reference_image`로 전달 → 실제 홀 구조 보존 합성(S5 before/after 쌍).
6. 워터마크: 모든 산출 이미지에 "AI 생성 예상 이미지 — 실제 시공 결과와 다를 수 있음" 합성(Pillow) 후
`output/visualizations/`에 저장. `GeneratedImage.save()`가 사이드카 `.meta.json`(생성일·스키마 해시·
모델 버전·seed·워터마크 고지)을 결정적으로 기록하고 PNG는 tEXt 청크에도 임베드.
7. 일관성: 같은 부스의 추가 샷은 **동일 `seed`** 전달(B-12). seed 미지원 SDK/모델이면 자동으로
**참조체인 기반 일관성**으로 폴백(첫 생성 이미지를 다음 샷 `reference_image`로 재사용).
## 표준 샷 세트 S1~S7
| 샷 | 호출 | 용도 |
|---|---|---|
| S1 정면 주간 | `render_shot(scene,"S1")` | 기본 컨펌 컷 |
| S2 정면 야간 | `render_shot(scene,"S2")` | 조명 연출 평가 |
| S3 통로 뷰 | `render_shot(scene,"S3")` | 관람객 동선 |
| S4 내부 뷰 | `render_shot(scene,"S4")` | 집기 배치 |
| S5 Before/After | S1 + `reference_image` 쌍 | 시공 전/후 비교 |
| S6 배선 오버레이 | `render_wiring_overlay_raster(...)` ★래스터 합성 | 시공 검증(좌표 정합) |
| S7 홀 조감 | `render_shot(scene,"S7")` | 배치안 비교 |
## 프로덕션 방어 (ReRoomAI route.ts 패턴)
- **입력 크기 가드**: 참조 이미지 8MB 상한 + 긴 쪽 1024px 다운스케일/JPEG 0.85(`downscale_for_upload`).
- **SAFETY 처리**: `finish_reason == SAFETY``NanoBananaSafetyError`.
- **에러 분기**: 키 무효→`NanoBananaAuthError`, 쿼터/429→`NanoBananaQuotaError`, SAFETY→`NanoBananaSafetyError`.
- **쿼터 차감**: `usage_recorder` 훅은 **성공 시에만** 호출(실패는 카운트 소모 안 함).
## 품질 체크
- 부스 크기 비율이 스펙과 맞는가 (3x3 부스가 대형처럼 보이면 재생성).
- 텍스트 사이니지가 한국어로 정확한가 (실패 시 간판 영역 후처리 합성 — PLANNING §6-4).
- 실존 브랜드 로고/사람 얼굴이 없는가.
- 계약·심사 서류에는 생성 이미지 사용 금지(도면만 유효 — PLANNING §6-5).