럼펠슈틸츠킨 AI 비디오 파이프라인 구축하기
요약
본 글은 Claude Code의 도움을 받아 AI 비디오 파이프라인 구축 과정에서 얻은 경험적 분석을 담고 있습니다. 초기 테스트 결과, 정지 이미지나 프롬프트 수정만으로는 일관된 캐릭터 아이덴티티를 유지하는 데 어려움이 있었습니다. 따라서 의상, 배경 등 요소를 분리하고 재사용 가능한 에셋(마네킹, 세트 등)으로 구축하여 파이프라인을 개선했습니다.
핵심 포인트
- 단순 프롬프트 수정만으로는 일관된 캐릭터 아이덴티티 유지 불가
- 의상/배경 등 요소를 분리하여 재사용 가능한 에셋 구축 필요
- AI 비디오 모델은 카메라 움직임에 따라 얼굴 특징이 쉽게 변함
- 성공적인 파이프라인을 위해 레퍼런스 아트를 체계적으로 관리해야 함
설득력 있는 첫 프레임이 설득력 있는 럼펠슈틸츠킨 AI 비디오를 만들어주지는 못했습니다. 초기 테스트 중 하나에서는 정지 이미지가 얼굴을 유지했지만, 비디오 모델이 즉시 다시 그렸습니다. 또 다른 경우에서는 카메라가 아래로 움직여 인물의 머리가 프레임 밖에 있을 때까지 얼굴은 살아남았습니다.
본 내용은 Claude Code의 도움을 받아 진행한 튜닝 작업에 대한 AI 지원 작성 글입니다. 실험은 2026년 10월 10일~11일에 기록되었습니다. 이는 일반적인 모델 벤치마크가 아닌 소규모 테스트 세트입니다. 제품 인계(product handoff)와 실험 도구는 별개입니다.
1. 스타일과 아이덴티티 분리부터 시작하기
저희는 클로즈업된 “쉿” 프레임으로 시작하여 이미지 편집 경로들을 비교했습니다. Seedream 4.0 Edit은 그 라운드에서 유용한 출발점을 제공했지만, 프롬프트 수정 과정에서 트레이드오프(tradeoff)가 드러났습니다.
의상, 시대극(period-film), 캐릭터 설명을 추가하면 분위기는 개선되었지만 인물이 바뀌었습니다. 한 번의 수정으로 테스트 얼굴이 다른 성별 표현 쪽으로 기울어졌습니다. 다음 수정에서는 설명을 단순화하고, 헤어스타일과 성인 얼굴 특징을 명시적으로 보존하며, 중요한 시각적 세부 사항만 남겼습니다.
필름 그레인은 로컬 후처리(local post-processing)로 옮겼습니다. 이미지 프롬프트 내부에서 아이덴티티 지침과 경쟁할 필요가 없었기 때문입니다.
저희는 이상적인 셀카 하나에 의존하기보다 생성된 성인 테스트 인물 사진들과 일부 열화된 변형들을 사용했습니다. ArcFace 점수는 로컬 반복(local iterations)을 비교하는 데 도움이 되었지만, 이는 시청자가 누군가를 인식할 확률이 아니라 저희 테스트 세트에 대한 진단적 측정값일 뿐이었습니다.
2. 좋은 정지 이미지가 모든 비디오 경로에서 살아남지는 못했다
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
- Wan 2.6, 단일샷 이미지-투-비디오: 기록된 유사도는 입력 스틸에서 약 0.79에서 첫 비디오 프레임에서는 약 0.42로 떨어졌습니다. 더 가까운 크롭이 나중에 탐색하는 데 도움이 되었지만, 경로의 신원 및 배경 변화를 해결하지는 못했습니다.
- Kling 2.6, 하나의 긴 샷: 초반에는 얼굴이 강했지만, 카메라가 네 번째 초경에쯤 아래로 움직였습니다. 춤은 머리가 프레임 밖에 있는 상태로 계속되었습니다.
- 세 개의 별도로 생성된 Kling 클립: 공유 승인 스틸을 편집하는 것이 컷 전반에 걸쳐 의상과 배경을 연결하는 데 도움이 되었습니다. 표정과 움직임은 여전히 너무 미미했고, 춤을 추는 동안 얼굴이 너무 작아졌습니다.
- 초기 다중샷 시도: 시퀀스는 더 표현력이 생겼지만, 나중에 클로즈업 장면들이 벗어났습니다. Kling 3.0 Omni 시도 중 하나에서는 보조 캐릭터가 업로드된 사람의 얼굴 특징을 가지기도 했습니다.
이러한 관찰들은 우리가 작업을 재현하는 방식을 바꾼 이유를 설명합니다. 원래 프롬프트에 형용사를 추가하는 것만으로는 네 가지 실패 모드 모두를 해결할 수 없습니다.
3. 재사용 가능한 레퍼런스와 의상 스틸 구축
더 유망한 경로는 재료들을 다섯 개의 재사용 가능한 에셋으로 분리했습니다:
- 얼굴이 없는 마네킹에 입힌 의상.
- 가상의 성인 보조 캐릭터.
- 구겨진 신발의 클로즈업.
- 빈 헛간 세트.
- 마지막에 사용된 금색과 빛.
각 입력 사진마다 이미지 편집 단계가 사진, 의상, 그리고 신발을 사용하여 전신 의상 스틸을 생성했습니다. 이 스틸은 최종 출력이 와이드스크린(landscape)일 때도 세로형(vertical)으로 유지되었습니다. 이는 비디오의 첫 프레임이 아니라 사람과 의상을 위한 레퍼런스였습니다.
비디오 통화에서는 고정된 순서로 일곱 개의 레퍼런스를 받았습니다. 다음 간소화된 매핑은 역할을 보여주며, 실행 가능한 API 요청은 아닙니다:
reference_images = [
person_photo, # @Image1: identity
costume_still, # @Image2: person wearing the outfit
...
해당 순서는 템플릿 계약의 일부였습니다. 프롬프트는 해당 위치들을 명시적으로 언급했기 때문에, 두 이미지를 바꾸면 어떤 얼굴이나 의상이 어떤 역할에 속하는지 바뀔 수 있었습니다.
저희가 기록한 단일 인물 경로(single-person route)는 제공업체의 Seedance 2.0 Mini 참조 이미지 모드를 사용했으며, 13초 길이, 720p 해상도, 그리고 생성된 오디오를 제외하도록 요청했습니다. 이 과정에서는 참조 목록과 함께 첫 프레임 이미지를 전달하지 않았습니다. 저희의 통합 테스트에서 두 가지 입력 모드를 결합하자 매개변수 오류(parameter error)가 발생했습니다.
4. 샷 시퀀스를 작성한 후, 이를 고정하기 (freeze it)
저희는 서면 타이밍 노트를 작성하기 위해 참조 비디오들을 검토했습니다. 원본 푸티지(footage)는 생성 입력으로 제공되지 않았고, 생성된 출력물로 잘려 나오지도 않았습니다.
프롬프트에는 접근하는 장면, “쉿” 클로즈업, 리액션 샷, 과장된 미소, 춤 동작, 신발 클로즈업, 그리고 엔딩까지 총 15개의 타이밍이 지정된 샷이 설명되어 있었습니다. 공유 블록(shared blocks)은 정체성, 의상, 배경, 시각적 스타일을 설명했습니다. 프롬프트 빌더는 모델이 모든 세부 사항을 자동으로 이어가리라고 가정하는 대신, 각 샷마다 관련 블록들을 반복해서 사용했습니다.
결과는 여전히 근사치에 머물렀습니다. 수락된 풍경(landscape) 실험은 15개 샷 계획 중 약 12개의 감지된 샷을 생성했습니다. 몇몇 매우 짧은 비트들이 합쳐졌습니다. 명시적인 타이밍 지정은 프레임 단위의 편집 제어는 아니었지만, 더 유용한 시퀀스를 제공해 주었습니다.
이 버전이 수락된 후, 핸드오프(handoff) 과정에서는 두 개의 프롬프트와 다섯 개의 공유 이미지를 하나의 버전화된 템플릿으로 처리했습니다. 이 일곱 개 파일 중 어느 하나라도 변경되면 새로운 버전과 또 다른 풍경/인물 사진 검토가 필요했습니다.
인물 사진(portrait) 실험은 안경과 콧수염을 포함하는 다른 테스트 얼굴을 사용했지만, 비디오 프롬프트와 참조 방식은 동일하게 유지했습니다. 이 두 가지 사례 모두 검토된 결과에 보존되었습니다. 이는 모든 얼굴에 걸친 신뢰성을 입증한 증거라기보다는, 두 번째 유용한 검증 사례였습니다.
5. 결정론적(deterministic) 완료를 유지하기
결과적인 워크플로우는 다음과 같았습니다:
Input photo + costume + shoes
|
v
...
FFmpeg은 트리밍(trimming), 스케일링/크롭핑(scaling/cropping), 픽셀 포맷(pixel format) 처리, 그리고 필름 처리를 담당했다. 컨택 시트(Contact sheets)를 사용함으로써 모든 비교를 위해 전체 비디오를 다시 재생할 필요 없이 순서(sequence)를 검사하기가 더 쉬워졌다. 튜닝 결과물은 무음이었으며, 음악 패키징은 별도의 제품 영역이었다.
실험 실행기(experiment runner)는 유료 호출 전에 지출 한도를 확인하고, 프롬프트 버전과 요청 매개변수(requested parameters)를 기록했으며, 보고된 크레딧을 잔액 변화와 대조했다. 이는 작업이 이미 제출된 후 명령이 중단되었을 때 중요했다: 로컬 프로세스를 중지했다고 해서 작업이 청구되지 않은 것은 아니었다.
단독 사용 경로가 승인되면서, 기록된 생성 구성 요소는 의상 스틸컷에 10 크레딧, 비디오에 106.6 크레딧이었다. 공유 자산 생성 및 이전 실험은 별도의 비용이 발생했다. 이 수치들은 해당 실행(run)을 설명하는 것이지, 현재 가격 견적이나 전체 납품 비용을 의미하지는 않는다.
6. QA 스크립트가 실험의 일부가 되다
우리의 첫 번째 채점 접근 방식은 비디오의 너무 많은 부분을 업로드된 인물이 어디서든 보여야 하는 것처럼 취급했다. 그 결과, 두 번째 캐릭터의 리액션 샷(Reaction shots)은 마치 신원 실패처럼 보였다. 와이드 샷(Wide shots), 표정 연기, 그리고 놓친 컷 포인트(cut points) 역시 결과를 왜곡시켰다.
우리는 프레임의 짧은 변수와 관련된 얼굴 크기 조건(face-size condition)을 포함하는 샷 인식 채점(shot-aware scoring)을 시도했다. 그러나 이는 또 다른 의존성을 도입했다: 만약 컷 감지(cut detection)에 실패하면, 신원 측정(identity measurement)이 서로 다른 사람들을 하나의 세그먼트에 결합할 수 있었다.
결국 핸드오프(handoff)는 얼굴 유사성 채점(face-similarity scoring)을 프로덕션 블로킹 조건(production blocking condition)에서 제외했다. 대신 작업 실패, 읽을 수 없는 파일, 검은 프레임, 정지된 출력과 같은 결정론적 기술 점검(deterministic technical checks)만을 유지했다. 얼굴 분석 도구(face-analysis tooling)는 튜닝 워크스페이스에 남겨졌다. 이 결정이 모든 출력이 좋아 보일 것이라는 것을 확립한 것은 아니었으며, 그러한 측정들이 무엇을 할 수 있고 무엇을 결정할 수 없는지를 인정하는 것이었다.
7. 두 인물 모드: 작동하는 실험에서 통합까지
다음 실험에서는 두 번째 인물에게 의상 스틸컷과 원본 사진에 대한 여덟 개의 레퍼런스 이미지를 추가했습니다. 15초짜리 스토리보드는 발과 춤 동작에 더 많은 주의를 기울였습니다.
수동 검토 기록 결과, 얼굴 변환(face transfer) 없이도 두 인물의 신원을 식별할 수 있었습니다. 하지만 자동화 점수는 여전히 실패했는데, 이는 놓친 컷들이 여러 샷들을 그룹으로 묶었기 때문입니다. 따라서 전체 결과를 기계 점수로 제시하기보다는, 두 가지 결과를 모두 기록했습니다.
두 인물 모드는 현재 개발 중이며 곧 출시될 예정입니다. 검토된 한 번의 실험은 통합 작업에 유용한 증거가 되지만, 사진 쌍 전반에 걸친 광범위한 커버리지를 확립하는 것은 아닙니다.
시각적 맥락을 위해, Rumpelstiltskin AI 비디오 예시 및 사진 튜토리얼에서 현재 공개된 단일 인물 결과와 원본 레퍼런스를 구분하여 보여줍니다. 해당 페이지는 모델 리더보드가 아니라 출력 스타일을 문서화합니다.
가장 유용했던 변경 사항은 실험을 검사하기 더 쉽게 만든 것입니다: 이름이 지정된 에셋, 순서가 지정된 레퍼런스, 버전 관리되는 프롬프트, 저장된 출력물, 그리고 무엇이 실패했는지에 대한 기록입니다. 유사한 워크플로우를 구축하는 모든 사람들에게 질문합니다. 어떻게 고장 난 파일과 의도된 성능을 여전히 놓치고 있는 기술적으로 유효한 결과를 분리할 수 있을까요?
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기