AI 댄스 영상의 손은 왜 망가질까 — LTX-2.5에서 "키프레임 드리프트"를 찾기까지
AI 댄스 영상의 손은 왜 망가질까 — LTX-2.5에서 "키프레임 드리프트"를 찾기까지 기술 분석 보고서 발행일: 2026년 9월 13일 서론 AI로 사람이 춤추는 영상을 만들면, 얼굴과 옷은 그럴듯한데 손 에서 무너집니다. 손가락이 여섯 개가 되거나, 주먹 위에 정체 모를 살덩어리가...
AI 댄스 영상의 손은 왜 망가질까 — LTX-2.5에서 "키프레임 드리프트"를 찾기까지
기술 분석 보고서
발행일: 2026년 9월 13일
서론
AI로 사람이 춤추는 영상을 만들면, 얼굴과 옷은 그럴듯한데 손 에서 무너집니다. 손가락이 여섯 개가 되거나, 주먹 위에 정체 모를 살덩어리가 붙거나, 손바닥이어야 할 자리에 손등이 보입니다.
이 글은 저희 팀이 댄스 영상 파이프라인에서 손 결함을 추적한 기록입니다. 결론부터 말하면, 개입 일곱 가지가 효과가 없거나 오히려 나빴고 , 효과가 있었던 축은 하나였습니다 — 조건 키프레임에서 얼마나 멀어졌는가 . 그리고 그 과정에서 "무엇을 고쳤는가"만큼이나 "어떻게 재야 속지 않는가"를 많이 배웠습니다.
1. 파이프라인: 안무 영상을 가이드로 바꿔 다시 그린다
텍스트로는 안무를 지시할 수 없습니다. 그래서 원본 안무 영상에서 구조 를 뽑아 조건으로 줍니다.
원본 영상에서 인물 마스크
단안 뎁스 추정 + 시간축 평활
손 영역만 잘라 고해상도로 뎁스를 다시 계산해 가이드에 심기
LTX-2.5 + IC-LoRA(union control) 로 뎁스 가이드 + 캐릭터 키프레임을 조건으로 렌더
업스케일 · 얼굴 복원 · 디노이즈
긴 영상은 한 번에 렌더할 수 없어서(메모리 한계로 249프레임) 세그먼트로 나눠 렌더하고, 앞 세그먼트의 마지막 프레임을 다음 세그먼트의 시작 이미지( 앵커 )로 물려 이어 붙입니다. 이 "물려 잇기"가 이야기의 핵심이 됩니다.
2. 왜 손이 애초에 약한가 — 격자가 손가락보다 크다
먼저 산수부터 했습니다.
내부 렌더 해상도 768×1408
LTX 비디오 VAE의 공간 압축 32배
→ 트랜스포머가 보는 격자는 24×44칸
실측한 손 폭이 약 99화소이니, 손 전체가 3.1칸, 손가락 하나가 0.77칸, 손톱은 0.4칸 입니다. 손가락 하나를 넣을 칸이 없습니다. 그래서 그 크기의 형태는 조건이 직접 정한다기보다 VAE 디코더가 사전지식으로 복원하는 것으로 추정 합니다(격자 산수에서 나온 추정이고, 기제를 직접 잰 것은 아닙니다).
이 추정은 뒤의 실패들과 잘 맞습니다. 손가락 규모의 형태는 "조건을 더 정확히 주는 것"으로는 잘 안 움직였습니다.
3. 효과가 없었던 일곱 가지
대상 결함은 말린 주먹의 손등, 손가락마다 붙은 손톱 모양 살덩어리 였습니다. 같은 클립, 같은 시드로 하나씩 바꿔 렌더했습니다.
시도
결과
가이드의 손끝 혹을 모폴로지로 둥글게
변화 없음
가이드의 손끝 혹을 제거
더 나쁨 — 덩어리가 하나의 막대로 이어짐
프롬프트에 "손톱은 손끝에서 끝나고 피부색과 같다"처럼 값만 지정
더 나쁨 — 손톱 영역 채도가 올라감
네거티브 프롬프트
이 경로에는 구조적으로 없음 (가이던스 없는 샘플러)
후처리(업스케일·얼굴 복원·디노이즈) 단계별 점검
원인 아님
2단계 업스케일 정제를 켜서 격자 4배
훨씬 나쁨 — 손가락 구분이 통째로 사라지고 동작 에너지 −26%
프레임 수(105·249 비교 — 통제 비교)
원인 아님
두 가지가 특히 교훈이었습니다.
"손톱"이라고 쓴 것만으로 손톱이 강해졌습니다. 금지어를 안 쓰고 원하는 값만 긍정형으로 적어도, 그 대상의 이름이 들어가면 모델이 그것을 부릅니다. 없애고 싶은 것은 이름 자체를 쓰지 않는 편이 낫습니다.
해상도를 올리면 나아진다는 직관은 틀렸습니다. 2단계는 디테일을 더하는 단계가 아니라 평탄화하는 단계였고, 손가락을 지웠습니다.
가이드 개입은 출력을 움직였나 — 한쪽 쏠림은 났다, 원인은 가르지 않았다
별도로, 손 랜드마크로 만든 "더 입체적인" 손 뎁스(프록시)를 가이드에 넣는 A/B도 했습니다. 두 조건은 손 뎁스 파일 하나만 다르게 두고 나머지 입력을 해시로 묶었고, 판정은 맹검 으로 받았습니다.
판에 개입 없는 동일 조건 쌍 을 몰래 심어 거짓 양성률을 쟀습니다 → 0/3
같은 항목을 좌우만 바꿔 한 번 더 넣어 자기 일치도를 쟀습니다 → 일치
결과: 손가락 품질에서 현행 13 : 프록시 3 (p=0.021)
판정자의 거짓 양성으로는 설명되지 않는 한쪽 쏠림(13:3) 이 났고, 그 방향은 현행 쪽이었습니다. 다만 그 쏠림의 원인이 프록시 자체인지, 다른 체계적 요인인지는 가르지 않았습니다 — 배제한 것은 판정 잡음이고, 원인을 프록시로 귀속한 것은 아닙니다. 쏠림은 말린 손 자리에서 가장 컸습니다(7:0, 하위 분할이라 따로 유의성은 없음). 그래서 프록시는 채택하지 않았고, "가이드 쪽 개입이 출력에 닿을 수 있다"는 가능성은 닫지 않고 남겨 뒀습니다.
4. 효과가 있었던 축: 키프레임에서의 거리
같은 안무 순간을 여러 판에서 잘라 비교하다가 규칙이 보였습니다. 결함 크기가 조건 키프레임에서 몇 프레임 떨어졌는가 로 갈렸습니다.
키프레임에서 거리
렌더 길이
손등 분홍 화소 비율
판정
36
49프레임
0.12%
깨끗
36
105프레임
0.29%
깨끗
78
105프레임
4.21%
덩어리
78
249프레임
4.34%
덩어리
105프레임 렌더가 양쪽에 다 있습니다. 거리를 고정하고 길이를 바꾸면 결과가 그대로이고, 길이를 고정하고 거리를 바꾸면 결과가 뒤집힙니다. 가르는 변수는 길이가 아니라 거리 였습니다.
📏 여기서 "거리"는 원래 키프레임에서 결함 프레임까지 의 프레임 수입니다. 아래 세그먼트 표의 33·57은 다른 자입니다 — 세그먼트 하나 안에서 앵커로부터의 최대 거리(32·56) . 두 자를 섞으면 §5에서 헷갈리게 됩니다.
그래서 세그먼트를 짧게 잘라 키프레임을 자주 갱신하도록 바꿔 전체 클립으로 확인했습니다.
세그먼트 구성
결함 구간 평균
249프레임 × 1
5.62%
57프레임 × 5
5.36% ← 원 판에서는 이득이 없었으나, 재렌더에서는 재현되지 않음(§5)
33프레임 × 8
0.41% ← 13.7배 감소
기본 세그먼트 길이를 249 → 33 으로 바꿨습니다.
⚠ 이 해결의 근거는 클립 하나 · 결함 한 종류(손톱 모양 살덩이) · 조건마다 렌더 한 편 입니다. 33프레임은 효과가 확인됐고, 57프레임은 원 판에서 효과가 없었지만 다시 뽑은 렌더에서는 그 결과가 재현되지 않았습니다. 그래서 57프레임의 효과는 미정 이고, 문턱이 어디인지도 재지 않았습니다. 기본값은 확인된 33으로 둡니다.
대가도 쟀습니다. 세그먼트 경계에서 튀는지(경계 프레임 차분이 나머지의 0.99배로 벌점 없음 ), 구도가 흐르는지(뒤로 갈수록 약간 줌인 ), 정체성이 유지되는지(유지). 덤으로 버리던 꼬리 프레임이 줄어 클립이 7.50초에서 7.87초로 길어졌습니다.
5. 세운 가설 하나를 직접 시험했다 — 지지되지 않았다
원 판에서 57프레임 세그먼트가 효과가 없었던 게 이상했습니다. 세그먼트 경계 로그를 보면, 그 판에서 결함 프레임은 자기 앵커에서 22프레임 밖에 안 떨어져 있었습니다. 36프레임에서도 깨끗했는데, 22프레임에서 덩어리가 났습니다.
두 번째 세그먼트부터 앵커는 원래 키프레임이 아니라 직전 렌더의 마지막 프레임 입니다. 그래서 이런 가설을 세웠습니다 — "긴 세그먼트는 끝이 이미 드리프트된 채 다음 앵커가 되고, 다음 세그먼트는 앵커에서 가까워도 결함을 물려받는다 ."
그럴듯했지만 가를 수 있었던 원 렌더는 정리돼 지워진 뒤라, 새로 뽑았습니다. 입력(가이드·마스크·키프레임·시드·프롬프트·LoRA)은 해시로 묶고 앵커와 길이만 바꿨습니다.
렌더
구간
앵커
너클 위 살덩이 띠
249프레임, 갱신 없음
처음부터
원래 키프레임
키프레임에서 70~86프레임 구간에 재현
33프레임
f56부터
짧은 체인으로 만든 깨끗한 f56
없음
33프레임
f56부터
249프레임 렌더의 f56( 드리프트된 프레임)
없음
57프레임
f56부터
위와 같은 드리프트된 f56
없음
33프레임
f78부터
249프레임 렌더의 f78 — 띠가 눈에 보이는 프레임
8프레임 안에 사라짐 (대신 손이 가이드와 달리 펴짐)
드리프트된 앵커로 갈아도, 같은 앵커로 57프레임을 뽑아도, 심지어 결함이 보이는 프레임을 앵커로 써도 결함은 넘어가지 않았습니다. 갱신하지 않은 249프레임 판만 손이 가이드의 모양(새끼손가락을 든 손)에서 벗어나 꽉 쥔 주먹으로 무너지며 결함이 났습니다.
그래서 결론은 더 단순한 쪽입니다 — "키프레임을 갱신하면 된다. 앵커가 긴 렌더에서 온 프레임이어도." 정교하게 세운 "전파" 가설은 지지되지 않았고, 원 판의 "57프레임은 효과 없음"은 다시 뽑은 렌더에서 재현되지 않았습니다.
⚠ 단서: 조건마다 렌더 한 편 , 한 구간, 판정은 같은 좌표로 확대한 그림입니다. 결함이 보이는 앵커 판에서는 띠가 사라진 대신 손 자세가 가이드에서 벗어났으니 , "결함이 지워졌다"와 "손이 맞게 그려졌다"는 다른 결론입니다. 그리고 이 시험에서도 화소 지표는 결함을 못 갈랐습니다(결함이 뚜렷한 판이 분홍 비율은 가장 낮았습니다).
같은 모양의 관측이 다른 파이프라인(음악 영상 생성)에서도 있었습니다. "2초 클립은 버티고 3초부터 무너진다". 조건이 달라 숫자가 같다고는 하지 않지만, 조건에서 멀어질수록 무너지는 것은 LTX-2.5 계열의 특성일 수 있다 고 보고 무겁게 다루고 있습니다.
6. 손바닥이냐 손등이냐 — 정의가 없는 물음이었다
같은 기간에 손바닥/손등(앞뒤)이 원본과 뒤집히는 결함도 쟀습니다. 사람 판정으로는 편 손에서 뒤집힘 0/10 , 말린 손에서 4/10 이었습니다. 계수 규칙을 네 가지로 바꿔도 모양은 같았지만, p=0.087로 유의하지는 않았고 판정자 잡음을 받칠 바닥도 약했습니다(중복 3쌍, 잡음 상한 71%). 발견이 아니라 방향의 단서 입니다.
이 판을 AI 비전 도구에도 판정시켜 사람 답과 맞대 봤습니다.
층 × 원본/렌더
사람과 AI의 같은 답
편 손 · 원본
10/11
편 손 · 렌더
10/12
말린 손 · 렌더
9/11
말린 손 · 원본
2/13
편 손은 대체로 일치했지만 주먹(말린 손)에서는 거의 전부 갈렸습니다. AI의 이유를 보면 "주먹에서 손가락 관절이 보이면 손등"이라는 기준을 썼습니다. 주먹을 정면에서 보면 손가락 등과 접힌 손가락 안쪽이 동시에 보이는데, "그중 무엇을 보고 손등이라 하나"를 판에 정의하지 않았던 것입니다.
그렇다고 AI를 판정자로 쓸 수는 없었습니다. 같은 AI는 다른 판(렌더 A/B)에서 완전히 똑같은 두 영상 쌍에 3/3 "차이가 있다" 고 답했고, "같다"·"모르겠다"를 한 번도 고르지 않았습니다. 판정자 바닥을 통과하지 못한 것입니다. 그래서 사람 판정 결과는 그대로 두되, 이 축은 다음 판에서 "주먹에서 무엇이 손등인가"를 그림 예시로 먼저 정의 하고, 사람 판정이 회차를 넘어 재현되는지 부터 잽니다.
"MediaPipe로 뽑은 방향이 말린 손에서 8/10을 맞혔다"는 수도 있었지만, 정답이 손바닥 6 : 손등 4라 "늘 손바닥"만 답해도 60% 가 나오는 판이라 유의하지 않았고(p=0.167), 위의 정의 문제까지 겹쳐 지금은 기준선으로 쓰지 않습니다.
7. 방법론에서 배운 것 — 결과보다 오래 가는 것
손 결함은 자동 지표로 재기 어렵고, 사람 판정은 흔들립니다. 하룻밤에 여러 번 스스로 속았고, 동료 세션의 교차 검산이 그걸 잡았습니다. 남겨 둘 만한 것들입니다.
판에 "개입 없는 쌍"과 "중복"을 몰래 심는다. 판정자의 거짓 양성률과 자기 일치도가 공짜로 나옵니다.
문턱보다 천장(검정력)을 먼저 계산한다. 항목 수만으로 "완벽한 개입이라도 유의에 닿는가"가 나옵니다. 중복 3쌍이 전부 일치해도 판정자 잡음의 95% 상한은 71% 입니다 — 바닥으로 쓸 수 없는 크기였습니다.
귀무는 우연 50%가 아니라 "최빈 답만 하는 자"다. 그리고 그 값은 정답지 분포에 딸려 있습니다. 정답을 반반으로 뽑으면, 절반의 표본으로 두 배 표본보다 센 판이 됩니다(80% 후보 기준 균형 18개 = 검정력 87%, 기울어진 36개 = 83%).
제외는 입력으로만 한다. "한 크롭에 손이 둘로 보이면 뺀다"를 렌더에도 적용했더니, 원본은 한 손인데 렌더가 손을 하나 더 만든 자리 — 재려던 결함 — 을 빼고 있었습니다.
자는 "놓치면 안 되는 바로 그 경우"로 리허설한다. 손이 겹친 크롭을 세려고 만든 검출기가, 판정자가 알려 준 겹친 손 두 자리에서 모두 0을 냈습니다. 손이 붙으면 검출기가 하나로 뭉쳐 잡기 때문입니다.
파싱한 개수를 정답 키와 대조하고, 안 맞으면 멈춘다. 체크 표시 한 글자 때문에 답 49줄 중 26줄이 조용히 빠졌는데, 빠진 줄이 전부 한 조건이라 "뒤집힘 100%"가 나왔습니다. 30%로 나왔으면 아무도 못 잡았을 겁니다.
면적 지표는 "뭉개기"를 개선으로 찍는다. 덩어리가 하나로 합쳐지거나 손가락이 사라졌을 때 면적은 오히려 줄었습니다. 면적과 채도를 갈라 재고, 같은 좌표·같은 배율로 확대한 그림을 반드시 나란히 봅니다.
정정은 문서 한 곳이 아니라 파일까지. 수를 고쳐 놓고 json을 옛 값으로 두었더니, 동료가 그 파일로 논거를 세웠고 무너졌습니다.
판정자를 바꾸기 전에 널 바닥부터 통과시킨다. AI 판정기는 똑같은 두 영상에서 3/3 차이를 봤고 중립 보기를 쓰지 않았습니다. 판정자가 사람이든 도구든, 개입 없는 쌍을 먼저 통과해야 그 판정을 읽습니다. 그리고 판정자끼리 크게 갈리는 물음은 정의가 없는 물음 일 수 있습니다.
이상치 하나에 정교한 기제를 세우기 전에 그 이상치부터 재현한다. 57프레임 판 하나를 설명하려고 세운 "전파" 가설은 시험에서 무너졌고, 원 결과 자체가 재현되지 않았습니다.
8. 한계와 다음
드리프트 결과는 클립 하나, 결함 한 종류(손톱 모양 살덩이), 조건마다 렌더 한 편 입니다. 문턱이 어디인지, 57프레임의 효과가 정말 없는지는 모릅니다.
손가락 개수 오류·융합·여분의 손에도 같은 법칙이 걸리는지는 아직 안 쟀습니다.
결함이 보이는 앵커로 갈았을 때 결함은 사라졌지만 손 자세가 가이드에서 벗어났습니다 — "지워짐"과 "맞게 그려짐"을 가르는 판정이 필요합니다.
앞뒤 뒤집힘은 정답의 정의부터 다시 세웁니다(그림 예시 · 사람 판정의 회차 간 재판정 쌍 · 정답 균형 41자리).
손 문제는 "좋은 조건을 더 주면 풀린다"가 아니었습니다. 격자가 손가락보다 크고, 그 빈자리는 모델의 사전지식이 채우는 것으로 보이며, 그 사전지식은 조건에서 멀어질수록 무너지는 것으로 보입니다 — 이 마지막 문장은 한 클립에서 잰 거리와 결함의 관계에 추정 기제를 붙인 것이라 가설 입니다. 그래서 지금까지 가장 효과적이었던 개입은 손을 직접 고치는 게 아니라, 조건이 약해지기 전에 다시 붙잡아 주는 것 이었습니다 — 적어도 저희가 잰 한 클립, 한 종류의 결함에서는요.
© 2026. All rights reserved.