vignette/docs/ops/handoff-avatar-seoyeon-2026-06-27.md
2026-07-15 21:31:30 +09:00

56 lines
5.2 KiB
Markdown
Raw Permalink 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.

# 서연(P1) 아바타 작업 핸드오프 — 2026-06-27
> 다른 세션에서 이어서 작업하기 위한 인계. imagegen(gpt-image-2)+BiRefNet+파츠 분리 리깅 파이프라인 전체를 여기서 참조.
> 상세 원칙은 `AGENTS.md` §4.
> **2026-07-13 상태 변경 — PAUSED:** 사용자 피드백에 따라 서연을 포함한 생성 이미지/PSD 래스터 파츠 리그는 실제 화면에서 전부 비활성화했다. 현재 `ClientAvatar`는 모든 페르소나에서 기존 SVG 도형 기반 파라미터 리그만 렌더링한다. 래스터 렌더러·원본·파츠 자산은 재검토 가능하도록 보존하지만 앱 배선에는 연결하지 않는다.
---
## 0. 한 줄 요약
래스터 파츠 파이프라인은 보존 상태로 중단했고, 현재 제품과 dev 미리보기는 기존 SVG 도형 기반 파라미터 리그만 사용한다.
---
## 1. 재개 조건
소유자가 래스터 아바타 재도입을 명시적으로 결정하기 전에는 Image #2 재생성, 파츠 보정, 앱 재연결을 진행하지 않는다. 재개 시에도 먼저 별도 미리보기에서 시각 수용 확인을 받아야 한다.
## 2. 완료된 것 (재사용 가능)
- **이미지 생성**: `~/.codex/imagegen-headless/codex_imagegen.sh`(gpt-image-2, ChatGPT 구독). 검증 완료.
- **누끼**: `object-separation` 스킬(BiRefNet). 알파 정제(임계치 35/205)까지 확인.
- **파이프라인 스크립트**(`docs/avatar-art/seoyeon/`):
- `prompt-base.txt` — base 생성 프롬프트(Image #1 기준; Image #2 재생성 시 -i 참조로 대체 가능)
- `gen-variants.sh` — 표정 변주 7종(sad/tired/anxious/warm/startled/eyes-closed/speaking) 일괄 생성. base를 `-i`로.
- `cut-publish.sh` — BiRefNet 누끼 → 게시 일괄
- `publish.py` — 표준 캔버스(900×1125) 정규화 + 알파 정제. `python publish.py <컷아웃> <name>`
- `make-parts.py` — 특징 영역(UPPERFACE/EYELID/MOUTH) 크롭+페더 파츠. **영역 상수 튜너 블럭**(상단).
- **렌더러**: `apps/web/src/components/avatar/RasterBust.tsx`
- 파츠 분리: `base` + `upperface-<표정>`(눈썹+눈) + `eyelid-closed`(깜빡임, 1-blink) + `mouth-<표정>` + `mouth-open`(립싱크, RMS).
- 28표정→클러스터 매핑(`VARIANT_FOR_EXPRESSION`) 내장.
- **현재 연결 상태**:
- `persona.ts`: `AvatarPersona.rasterArtSet` 계약 제거.
- `Session.tsx`·`LearnerHome.tsx`: P1/P4~P7 래스터 아트셋 배선 제거.
- `ClientAvatar.tsx`: 항상 SVG 파라미터 리그 렌더, `data-render-mode="svg"` 고정.
- `App.tsx`: `/dev/avatar-preview`는 SVG 파라미터 리그 점검 페이지로 유지.
- **dev 미리보기**: `apps/web/src/pages/AvatarPreview.tsx`는 서연 SVG 도형 리그의 대표 표정과 모션만 표시한다.
- **스크린샷 도구**: `apps/web/scripts/avatar-shot.mjs` (`BASE_URL=http://localhost:<port> node ...`).
- **보존 에셋**: `apps/web/public/avatar/seoyeon-live2d-psd-v2/parts/*.png`, `apps/web/public/avatar/seoyeon/`, `seoyeon-live2d-psb`. 소스/재현 스크립트는 `docs/avatar-art/seoyeon/live2d-psd-v2/`. 현재 제품에서는 로드하지 않는다.
## 3. 보류된 작업 (래스터 재도입 결정 전 실행 금지)
1. Image #2(2.png) 해석 사용자 확인 → ASCII 이름으로 복사: `cp "<2.png 경로>" docs/avatar-art/seoyeon/ref-image2.png`.
2. **base 재생성**(검증용 1장):
`codex_imagegen.sh --out base-v2.png --size 1024x1280 --quality high -i ref-image2.png "Use the supplied reference as the exact character. Same character, head-and-shoulders bust, perfectly front-facing, symmetrical, neutral calm expression, flat solid light gray #C9CDD2 background, no gradient/shadow/scenery, semi-realistic soft anime. No text/watermark/hands. Bangs above eyes."`
→ 결과(base-v2.png)를 사용자에게 보여주고 Image #2 일치 확인.
3. **변주 재생성**: `gen-variants.sh``BASE``base-v2.png`로 바꾸고 실행(동일 7종). → `cut-publish.sh``make-parts.py`.
4. **검증**: dev 서버(5173)의 `/dev/avatar-preview``avatar-shot.mjs`로 캡처 → 사용자 확인. 파츠 정렬이 틀리면 `make-parts.py` 영역 상수(UPPERFACE/EYELID/MOUTH) 튜닝 후 재생성.
5. **검증 게이트**(AGENTS.md §2): `cd apps/web && npm run typecheck`. 레이아웃 변경 시 `e2e/session-layout.spec.ts`(8/8)+`e2e/layout-visual-gate.spec.ts`(7/7) — **web+api(+DB) 스택 필요**.
## 4. 환경 메모
- **dev 서버**: 5173 단일 인스턴스로 띄움(백그라운드). 끊기면 `cd apps/web && npm run dev -- --port 5173 --strictPort`. (5173/5174 중복 인스턴스가 "깨진 화면" 원인이었음 — 항상 5173 단일로.)
- codex CLI 0.142.2, auth_mode=chatgpt(구독). object-separation venv: `~/.venvs/object-separation` (CPU-only BiRefNet).
- 서연=P1은 API 시드(`apps/api/app/services/persona.py`). 웹의 P1 외형/기본 정서값은 유지하지만 래스터 아트셋은 전달하지 않는다.
## 5. 미해결/결정 필요
- Image #2 캐릭터의 **의상 색/추가 디테일** (비전 도구 불안정 → 사용자 확인 필요).
- 래스터 아바타 재도입 여부와 방식은 현재 보류다. 현행 제품 기준은 SVG 도형 기반 파라미터 리그다.
- 실제 Live2D Cubism(.moc3) 도입 여부는 소유자 결정(편집기 저작 필요).