| name | autorig-live-stability |
| description | 웹캠 라이브에서 리그가 떨리거나(덜덜), 대각선에서 충돌감이 나거나, 시작 직후 기본위치로 튕기고 트래킹이 틀어질 때의 진단·수정 런북. 핵심 철칙 = 자산·트래킹·보정 3분리(정적 강제렌더로 자산 무죄부터). 트리거 — "덜덜 떨림", "지터", "대각선 충돌", "왼쪽아래 불안정", "턱 뭉개짐", "기본위치로 돌아감", "트래킹이 틀어짐", "중립보정 문제", "라이브 불안정", "live jitter". 2026-07-08 유키 배포본 실증(3증상 전부 해결·재배포). |
AUTORIG 라이브 안정성 디버깅 (LIVE-STABILITY-001)
라이브 증상은 자산 결함 / 트래킹 노이즈 / 보정 오염 3계층이 겹쳐 보인다. 층을 안 가르면 엉뚱한 걸 고친다.
비협상
- 주인님이라 부른다. 시각 판정은 주인님 전담 — 몽타주
open으로 띄우고 사실만 보고.
- 계수를 추측으로 바꾸지 말 것 — HUD(
?panel=1) 실측 또는 node 수치 시뮬로 검증 후 적용([[autorig-tha4-eyes]] §6과 동일 규율).
- 배포본 불가침 — 수정은 비파괴 변종에서 검증 후 재배포.
0. 층 가르기 (항상 먼저)
python3 scripts/capture_pose.py --project <rig> --out /tmp/ck --poses \
'[{"name":"sym","parameters":{"ParamAngleX":-30,"ParamAngleY":-30}}, …중간값 조합도…]'
- 정적이 깨끗한데 라이브만 이상 → 트래킹/보정 층 (§1·§2).
- 정적에서도 깨짐 → 자산/증류 층 (§3).
- 코너·중간값(±15~25 조합)까지 스윕할 것 — 코너 4점만 보면 중간 조합을 놓친다.
1. 덜덜 떨림·대각 충돌감 = 머리각 스무딩 (HEAD-SMOOTH-001)
MediaPipe 머리각은 프레임당 ±1~2° 노이즈가 있고, convert()는 이를 1.5배 증폭해 리그로 보낸다.
증류 키폼(코너 2D)이 들어간 리그는 각도 민감도가 높아 이 노이즈가 진동=파츠끼리 부딪히는 느낌으로 보인다.
- 해법 = 템플릿
mini_cubism_drive.html의 HEAD-SMOOTH-001(적응 EMA: 정지 k0.12·빠른 회전 k≤0.65).
- 검증(실측 기준): 정지 노이즈 std 1.06→0.35(3배 감쇠), 스텝 0→30 정착 0.2s, 1Hz 회전 오차 11%.
- 계수 조정 시 node로 위 3지표 시뮬 후 적용. "굼뜨다" 피드백이면 상한 k를 올린다(하한 아님).
2. 시작 직후 튕김·항상 아래 봄·위 안 올라감 = 중립보정 오염 (3중 방어)
증상 서명: 첫 실행에 크게 움직이는 중 → 순간 뭉개짐(럴치) → 기본위치로 복귀 → 이후 방향이 틀어짐,
또는 항상 한쪽(아래)을 보고 반대(위)가 안 올라감(기대앉은 '안정된 비정면'이 중립으로 저장 — 안정 게이트로도 못 거름).
- ①NEUTRAL-GATE-001(근본): 보정 전엔 머리·시선·몸통 채널을 중립(0) 고정(깜빡임·입·숨=라이브 대기) —
잘못된 자세를 따라가는 구간 자체가 없음. 보정 완료 시 HEAD-SMOOTH가 0에서 부드럽게 이어받음.
- ②안정 게이트: 머리각 span<3°×~1초일 때만 측정 + 측정창 내 span>4° 폐기·재시도 + 20s 시 강제 임시 보정(트래킹 사망 방지).
- ③NEUTRAL-REGRAB-001: SHOWCASE/OBS는 보정 버튼이 숨겨져 복구 불가였음 → 어느 모드든 더블클릭/더블탭=재보정+토스트.
- 순간 "턱 뭉개짐"은 오보정 적용 순간의 파라미터 점프이지 리그 결함이 아님 — §0 정적 스윕으로 확인 가능.
- 리그 무죄 판정법: 배포
/api/project vs 로컬 character.json의 스펙 수(distill 마커·파트 수) 데이터 대조.
3. 특정 포즈에서만 파츠 이상(돔·유령 기하) = 증류 오염
- A/B 격리: 리그 안
.bak_distill 복원본으로 같은 포즈 렌더 → 증류 전후 대조로 범인 층 확정.
- 파트 격리: character.json에서 의심 파트의
distill_hair_affine 스펙만 외과 제거 후 렌더 — 범인 파트 확정(미미 hair_back 돔 사건).
- 근본: 가려진 파트는 flow가 앞 레이어(얼굴·후드)의 움직임을 상속(flow는 실루엣 안 어디서나 정의됨).
distill_tha3_rotation.py의 topmost 가시성 게이트+가림비율(자기알파 기준 0.25)+가시 픽셀 표본 피팅이 이를 차단 — 이 게이트가 후퇴하지 않았는지 확인.
- "낯선 입/기하" = 다중 스펙 가산 전환 버그 → [[autorig-rotation-distill]] 함정 표.
진단 도구 상자
| 도구 | 용도 |
|---|
capture_pose.py 스윕(코너+중간값) | 자산 무죄/유죄, 라이브와 분리 |
.bak_distill 복원 A/B | 증류 전후 격리 |
| 파트별 스펙 외과 제거 | 범인 파트 확정 |
HUD ?panel=1 | 라이브 수치 실측(추측 금지) |
| node 수치 시뮬 | 필터 계수 사전 검증(std·스텝·추적오차) |
템플릿 마커 grep (HEAD-SMOOTH-001·안정 게이트) | 수정 존재/후퇴 확인 |
실증 기록 (유키 2026-07-08)
배포본 실기 3증상(대각·왼쪽아래 덜덜+충돌 / 첫 실행 턱 뭉개짐→튕김 / 이후 트래킹 붕괴)을 위 3층으로 각각 해결:
HEAD-SMOOTH-001 + NEUTRAL 안정 게이트(템플릿=전 모델 공통) + 증류 가시성 게이트 재증류(rig_v0_project_crown_L2).
주인님 웹캠 판정 "많이 괜찮아졌어" 후 https://yukiwebapp001.vercel.app 재배포(빌드 바이트 대조 검증).
정적 무회귀: scan PASS 23·WARN 2·FAIL 0, 코너·중간값 스윕 깨끗.