| name | autorig-upload-e2e |
| description | 그림 1장 업로드 → 풀 리깅 아바타 전자동 서버 파이프라인(Modal) 러너북. spec_from_image(VLM 스펙 초안)+generate_master_sheets --reference(정체성 운반)+See-through GPU+P2~P5+표현력 옵션을 원커맨드로. 트리거 — "업로드로 아바타", "서버에서 리깅", "modal 리깅", "그림 한 장으로 버튜버", "upload e2e", "P2 게이트". 2026-07-09 URO(레포 밖 임의 그림)로 실증 — 실측 $1.8~2.5/명·25~40분. |
업로드→아바타 전자동 (CHATTERBOX-RIG-PORT-001 P0~P2)
앱: scripts/modal_rig_app.py (Modal chatterbox-rig). 준비 1회: pip install modal && modal token new(venv ~/.venvs/modal), 시크릿 modal secret create vtube-openai OPENAI_API_KEY="$(cat ~/.config/vtube/openai_api_key)".
원커맨드
nohup ~/.venvs/modal/bin/modal run --detach scripts/modal_rig_app.py \
--exp-id snack-<id> --upload <그림.png> --expressive [--no-tha4] [--no-crown] \
> /tmp/<id>.log 2>&1 & disown
체인: generate_inputs(VLM 스펙 초안→시트 4종, P0 선행검증+FAIL 시트만 자동 리롤 2회 SHEET-AUTO-REROLL-001) → seethrough_decompose(A10G 2048, A100 불요) → build_rig(P2~P5 + 표현력: THA3 flow·THA4 grid GPU 병렬 스폰 → 주입 → scan_rig_health FAIL 0 게이트). 실패한 표현력 단계는 잡을 안 죽이고 degraded에 기록(티어 강등).
무디버깅 자산 게이트(P2 자동, 2026-07-09): deghost → fill_composite_holes.py(중립 합성==마스터 — 컷이 지운 정품 픽셀을 마스터 RGB로 인접 파트에 백필; URO 강아지귀 423k px 통째 소실 적발) → cut_orphan_strokes.py --auto(hair_back의 fill 없는 외곽선 호를 링 알파 최다 파트로 재배정, 자기 파트 지배 시 잔류=아호게 보호). 메시 빌드 전이라 복원 픽셀을 하류가 통째 흡수.
표현력 티어 정책 (실기 확정)
- 기본 감은눈 = ARAP meet 모델(자기 픽셀 결정론 워프 = 이물 원천 불가). 커튼은 머리·눈썹 제외 어셈블리(
assembly_nohair)에서 잘리고 피부 정규화+lash_tint(spec arap_eye.lash_tint: auto=속눈썹 실측색) 적용.
- THA4 눈 = 옵트인(
--no-tha4가 안전 기본 후보): 어두운 머리·비표준 화풍에서 재작화 이물(URO). 켤 땐 [[autorig-tha4-eyes]] 함정표 참조.
- crown = 옵트인(
--no-crown 권장): 불투명도 페이드인 중 반투명 돔이 "유령"으로 보임(URO·유키 공통 판정 2026-07-09). 손잡이는 spec crown: 섹션(CROWN-SPEC-001).
- 회전 증류(THA3)는 항상 — 스케일 불변(클립·가드 crypko px 기준).
캐시 (재시도 = ~$0.1)
rig-jobs-vol: jobs/<id>/{upload,inputs,optimized,tha/{input_512,grid_change_flow},tha4_grid,crown} — 분해·THA flow/grid·crown 자산 전부 볼륨 캐시라 재실행 시 재과금 0. 가중치(THA3 834MB·THA4 625MB·ESRGAN·HF 7.8G)=rig-hf-cache 1회.
⚠️ 함정 (전부 실제로 밟은 것)
| 함정 | 증상 | 해법 |
|---|
로컬 modal run 프로세스 kill | --detach여도 원격 인풋 취소 전파 | nohup+disown 고아화 필수, 완료 감시는 로그/볼륨 폴링 |
| 로컬 네트워크 flaky | ConnectionError로 런처 사망 | --detach라 원격은 계속 — modal app list/logs로 이어받기 |
| 시트 P0 FAIL | 입꼬리 편차 등 | 자동 리롤이 처리. 2회 실패=입력 이미지 부적합 안내 |
| 잇새 세로줄 입 | wide 셀에 이빨 분할선 | 프롬프트 TEETH-BAND-001(통짜 밴드 강제) 반영됨 |
| 순백 배경 잔재(흰 돔) | 정면 머리 위 흰 밴드 | deghost 배경 흰 지대 컷(타이트 실루엣 밖 근백 + border-flood 연결성, 스티커 흰 속살 보존) 반영됨 |
| 유령 호/흰 초승달(끄덕임에 머리 위 호 분리) | See-through가 hair_back에 구운 fill 없는 외곽선 호 — crown 제거해도 지속 | 파이프라인 P2 cut_orphan_strokes.py --auto 재배정이 처리(ORPHAN-STROKE-001). 빌드 후 로컬 수술은 --parts/--to+메시 bbox 주의 |
| 파트 결손(마스터엔 있는데 리그에 없음) | 렌더만 봐선 완성처럼 보임(URO 귀 2짝·미미 블라우스 잠복) | 파이프라인 P2 fill_composite_holes.py가 자동 백필(COMPOSITE-HOLE-001). 빌드 후엔 --meshes-dir(bbox 클립)·--max-size(거대 결손=재빌드) |
| 재실행 시 볼륨 inputs 캐시 = 리롤 전 원본 | P0 시트 게이트 FAIL로 잡 사망, 또는 구판 시트로 조용히 회귀(입 잇새 재발) | 재실행 --mouth-sheet 등은 리롤 통과본으로 — 업로드가 volume inputs를 덮어씀. 성공 시트는 회수해 보존할 것 |
| 합성이 마스터와 다름(줄무늬·베일·색 뮤트) | 어떤 단계가 구운 오염 픽셀(neck_skin 크림박스 등) | recolor_composite_to_master.py(COMPOSITE-DIFF-001) — topmost 파트에 RGB=마스터 강제, --region 표적 수술. 전역 자동배선은 미검증 |
| capture_pose 포즈가 안 먹음 | 키를 params로 씀 → 조용히 무시(전 포즈=중립) | 키는 parameters — 판정 전 포즈별 렌더가 실제로 다른지 확인 |
| 재배포가 새 프로젝트로 샘 | build_player_webapp가 out을 rmtree → .vercel 링크 소실 | 배포 전 vercel link --project <이름> 재실행 + 배포 후 원격-로컬 바이트 대조 |
| 귀가 얼굴에서 분리 | 깊이 주입이 EAR-FOLLOW 정렬(±22/±12)을 교체(부호 반전) | inject_depth_keyforms EAR_ALIGN 제외 반영됨 |
| 턱 붕괴(큰 얼굴) | rig-px 클립 포화로 입만 과이동 | 증류 클립·가드 crypko px 기준(스케일 불변) 반영됨 |
검증 (성역)
회수 후 scan_rig_health --depth-map(FAIL 0) + capture_pose 몽타주(neutral/nod/turn/blink/mouth — 포즈 키는 parameters!) open → 주인님 육안 → 로컬 웹캠(run_mini_cubism_webcam_drive --project <rig> --port <p>, 웹캠 페이지=/drive) 검수 후에만 배포. 라이브 증상 디버깅은 [[autorig-live-stability]].
scan_rig_health에 입 위치 새니티(눈→턱 0.45~0.75)와 형제 키폼 소실 게이트(2026-07-11) 포함. 후자는 증류가 얇은 파트(닫힌 입선)의 특정 각도 키만 delta 0으로 남기는 은닉 결함 — 정면 렌더·bbox 전부 정상인데 라이브 회전 시 그 파트만 얼굴에서 분리된다. 증류(distill_tha3_rotation.repair_sibling_dropout)가 자동수복하므로 게이트 FAIL은 수복 경로 밖 회귀 신호다. 취향 수준 미학 드리프트는 기하·VLM 심판 모두 미분리 실측이라 자동 게이트 없음(근거·데이터는 [[chatterbox-avatar-forge]]) — 육안 검수가 유일한 미학 게이트다.
배포 마감 (URO 실증 절차)
python3 scripts/build_player_webapp.py --project <rig> --out <webapp> --public-url https://<id>webapp001.vercel.app
cd <webapp> && vercel link --yes --project <id>webapp001 --scope kimjuyoung1127s-projects
vercel deploy --yes --prod --scope kimjuyoung1127s-projects
크레딧 소진 시 umjitak@gmail.com 계정 전환([[modal-account-fallback]] — 볼륨·시크릿 재구축, 전환 전 산출물 회수).
실증
미미(P0·P1)·유키 재현전(tier full)·URO(레포 밖 임의 그림, P2 게이트 1호) — evidence-log CHATTERBOX-RIG-PORT-001·URO 하드닝 배치.
웹 배선 경로 (P3 — CLI와 병행)
이 스킬 = CLI 런북(modal run --upload). 사용자-대면 웹 트리거(PNG 업로드→자동 수령)는 modal_rig_app.py의 submit(fastapi_endpoint)+run_pipeline 오케스트레이터가 담당 — 같은 generate_inputs/seethrough_decompose/build_rig를 원격에서 순차 호출하며 진행을 Supabase avatar_jobs에 PATCH하고 완성 리그를 avatars/<job>/에 발행한다. 배선·배포·함정은 [[chatterbox-avatar-forge]] (2026-07-09 미미 서버본으로 수령/렌더 반쪽 실증). 티어 정책(ARAP 기본·THA4/crown 옵트인)은 여기가 SSOT — 웹 경로도 그대로 상속.