뮤직비디오 주인공을 나로 바꾸기 - Genjutsu로 하회탈 군무 영상 만들며 아홉 번 다시 돌린 기록
뮤직비디오 한 장면(28초)의 주인공을 한복 입은 저로, 뒤에 선 학생 수백 명을 하회탈을 쓴 탈춤꾼으로 바꿨습니다. 원본은 GENER8ION과 Yung Lean의 「STORM」 뮤직비디오로, 주인공이 담배를 피우다 고개를 숙이면 교복 입은 군중이 일제히 절하고 하늘을 올려다보는 장면입니다. Higgsfield의 영상 변환 모델 Genjutsu motion-transfer를 API로 돌렸습니다.
최종본(9회차). 담배는 바나나로, 교복 군중은 앞이 열린 흰 겉옷의 탈춤꾼으로 바뀌었습니다.
한 번에 되지는 않았습니다. 최종본까지 motion-transfer 9번, 원본 정리용 object-swap 2번을 돌렸습니다. 회차마다 하나가 고쳐지면 다른 하나가 틀어졌고, 그 과정에서 이 모델이 어떻게 움직이는지 감이 왔습니다. 한 줄로 줄이면 이렇습니다.
원본에 있는 「모양」은 남고, 레퍼런스는 그 위에 색과 질감만 입힌다.
원본과 모양이 부딪히는 걸 요구하면 매번 원본이 이겼습니다. 거꾸로 레퍼런스를 원본 모양에 맞춰 주니 풀렸습니다. 이 글은 회차별로 무엇을 넣었고 무엇이 틀어졌는지, 그리고 무엇이 실제로 도움이 됐는지를 정리한 기록입니다.
2026-10 기준, Apple M5 Max 맥북에서 API로 실행했습니다. 모든 판단은 회차당 한 번 돌린 결과입니다. Genjutsu는 seed를 지정할 수 없어서 같은 설정으로 다시 돌려도 결과가 달라집니다.
이것만 기억하면 됩니다
- 군중 옷은 원본 옷 모양에 맞춘다. 원본이 앞이 열린 블레이저면 레퍼런스도 앞이 열린 옷이어야 한다. 여민 한복에 허리띠를 그리면 흰 블레이저로 돌아간다
- 소품은 원본 동작과 어울리는 것으로 고른다. 담배 자리에 가는 막대(빼빼로)를 넣으면 모양은 맞아도 담배처럼 물고 내뿜는다. 「베어 물고 씹는」 바나나가 동작을 바꿔 놓았다
- 원본부터 확인한다. 첫 0.3초에 YouTube 앱 화면이 찍혀 있었고, 주인공 목에는 문신이 있었다. 둘 다 결과물에 흔적을 남겼다
- 금지어를 나열하지 않는다. 「NO smoke」 대신 「입 앞에 뒤의 탈춤꾼들이 또렷하게 보인다」처럼 보여야 할 것을 쓴다
- 첫 1초는 한 프레임씩 본다. 1초 간격으로 보면 첫 5프레임의 담배를 놓친다
준비물
| 준비물 | 내용 |
|---|---|
| Higgsfield API 키와 크레딧 | open.higgsfield.ai에서 발급. 잔액 조회 API는 없다 |
| 원본 영상 | 28초, 2340×1080. 휴대폰 화면 녹화본이었다 |
| 주인공 사진 | 한복 입은 제 전신 사진 1장 (june.png) |
| 탈춤꾼 레퍼런스 | Codex CLI의 이미지 생성으로 자세별 5장을 만들었다 |
| 스크립트 | 업로드, 제출, 상태 확인, 다운로드를 묶은 파이썬 스크립트 (higgsfield-client 0.2.0) |
비용(1회 기준): motion-transfer 480p는 입력 영상 1초당 $0.318이고, 28초 영상 한 번에 $8.90입니다. 모델 페이지에 50% 할인이 표시되어 있어 실제로는 그 절반일 수 있습니다. 원본 정리에 쓴 object-swap 720p는 1초당 $0.681로, 한 번에 $19~20입니다. 생성에는 회당 8~14분 걸렸습니다.
API 호출 자체는 단순합니다. 영상과 레퍼런스 이미지를 업로드하고, URL을 넣어 제출한 뒤 끝날 때까지 상태를 확인합니다.
1
2
3
4
5
6
{
"video_url": "https://.../original-clean-trim.mp4",
"image_urls": ["주인공.png", "탈춤꾼_정면.png", "...최대 8장"],
"prompt": "Use the uploaded reference video as the exact motion ...",
"resolution": "480p"
}
프롬프트에서는 업로드 순서대로 @Image 1, @Image 2처럼 이미지를 가리킵니다.
처음 쓴 레퍼런스
왼쪽부터 주인공(@Image 1), 탈춤꾼 정면, 뒤, 카메라 쪽 인사, 옆 인사, 하늘 보기. 탈춤꾼은 고름으로 여민 흰 저고리에 남색 허리띠를 맸다. 이 옷이 나중에 문제가 된다
탈춤꾼 이미지는 원본 장면에 나오는 동작(정면으로 서기, 돌아서기, 절하기, 하늘 보기)에 맞춰 자세별로 만들었습니다. 앞서 같은 영상의 군중을 라이언으로 바꿨을 때 절하는 장면에서 몸통에 얼굴이 그려졌는데, 그때는 자세별 레퍼런스만으로는 안 됐고 라이언에게 원본 교복을 입힌 레퍼런스로 풀었습니다. 이번에는 그 교훈을 옷이 아니라 자세에만 적용한 셈이었고, 이게 뒤에서 발목을 잡습니다.
프롬프트는 역할별 문단으로 나눴습니다. 뼈대는 끝까지 같습니다.
1
2
3
4
5
6
7
8
REFERENCE IMAGES (in upload order):
@Image 1: the main character, a real Korean man ... navy-gray hanbok vest ...
@Image 2: the surrounding dancer: a Korean mask dancer wearing a pale wooden Hahoe Yangban mask ...
...
MAIN CHARACTER: 주인공 한 명만 @Image 1로 바꾼다
PROP REPLACEMENT: 손에 든 것을 무엇으로 바꿀지
SURROUNDING CHARACTERS: 군중 전원을 탈춤꾼으로, 동작별로 어느 이미지를 따를지
ACTION / CAMERA / TEMPORAL CONSISTENCY: 원본 동작과 카메라를 그대로
회차별 기록
1회차. 담배 대신 부채
- 이미지: 주인공 1장 + 탈춤꾼 5장
- 프롬프트: 담배를 합죽선(접부채)으로 바꾼다
0.0초. 부채는 올라오는 중이고 입에는 아직 담배가 있다. 0.2초부터 부채로 바뀐다
얼굴과 한복은 사진과 똑같이 나왔고, 군중도 전원 하회탈을 썼습니다. 문제는 두 가지였습니다.
- 첫 5프레임(0.0~0.2초)에 담배가 남았다. 1초 간격으로 훑어봐서 저는 놓쳤고, 재생해 본 뒤에야 알았습니다
- 군중 옷이 한복이 아니라 흰 블레이저로 나왔다. 원본 교복 재킷의 깃과 엠블럼 자리는 그대로이고, 레퍼런스의 흰색과 남색만 입혀졌습니다
2회차. 초코바 + 궁궐 배경
- 이미지: 1회차 6장 + 궁궐 배경 2장(근정전풍 정전, 박석과 단청)
- 프롬프트: 소품을 초코바로, 「첫 프레임부터 초코바를 물고 있다」 명시, 배경을 궁궐로
왼쪽 0.0초, 오른쪽 2.0초. 목 앞쪽에 솟은 자국은 원본 인물의 목 문신 자리와 겹친다
- 「첫 프레임부터」라고 써도 첫 0.5초는 담배였다. 앞 0.6초를 잘라내 봤지만, 잘라낸 영상에서도 초코바 옆에 흰 담배가 함께 들려 있었습니다
- 목에 문신 모양대로 요철이 생겼다. 색은 빠지고 윤곽만 피부 위에 남은 모양입니다
- 궁궐은 색만 바뀌었다. 벽돌 건물이 붉은 벽과 단청 무늬로 바뀌었지만, 아치 문과 창문 배치는 원본 그대로였습니다
춘식이로 바꿀 때는 담배가 고구마로 깔끔하게 바뀌었는데 이번에는 왜 안 되는지가 궁금했습니다. 제 추정은 이렇습니다. 춘식이는 사람과 생김새가 전혀 달라서 모델이 손과 몸을 처음부터 다시 그립니다. 사람을 사람으로 바꾸면 얼굴 교체에 가까워져서 손가락 사이의 담배나 목 문신 윤곽 같은 원본 세부가 그대로 남습니다.
3회차. 담배와 같은 모양의 빼빼로
- 이미지: 주인공 1장 + 탈춤꾼 5장 + 궁궐 1장 + 빼빼로를 손가락에 끼운 손 1장
- 프롬프트: 소품을 빼빼로로, 「담배, 연기 없음」 한 줄
원본 모양을 이길 수 없다면 원본 모양에 맞추자는 생각으로, 담배와 같은 가는 막대인 빼빼로를 골랐습니다.
왼쪽이 3~5회차에 쓴 빼빼로, 오른쪽이 6회차부터 쓴 바나나. 둘 다 Codex로 만들었다
왼쪽 0.0초, 오른쪽 22.5초. 원본은 군중을 가까이서 잡은 장면인데, 궁궐 사진의 구도를 그대로 가져와 군중이 작게 일렬로 섰다
- 첫 프레임의 담배는 사라졌습니다. 대신 흰 화면에서 서서히 밝아지는 0.2초가 새로 생겼습니다
- 군중이 처음으로 한복으로 나왔습니다. 바꾼 건 소품뿐이라 이유는 모릅니다
- 와이드 장면이 궁궐 사진의 구도를 따라갔습니다. 배경 이미지가 배경뿐 아니라 카메라 위치까지 바꿔 버렸습니다
원본을 다시 보다 - 화면 녹화의 함정
흰 화면과 첫 몇 프레임의 담배가 계속 나와서 원본을 한 프레임씩 열어 봤습니다. 원본 첫 0.3초(12프레임)에 YouTube 앱 화면이 덮여 있었습니다. 원본이 휴대폰 화면 녹화본이라 영상 제목, 일시정지 버튼, 재생 막대가 찍혀 있었던 겁니다. 모델은 이 프레임들을 제대로 바꾸지 못했고, 1~3회차 첫 프레임 문제는 이 구간 때문인 것으로 보입니다.
그래서 순서를 바꿨습니다. object-swap으로 원본부터 정리한 뒤 motion-transfer를 돌리기로 했습니다.
- object-swap(720p) 프롬프트: 담배를 빼빼로로 바꾸고, 목과 손의 문신을 지우고, 나머지는 그대로
- 결과: 문신은 깨끗하게 지워졌습니다. 담배는 입에 물고 있는 0~0.7초만 바뀌고, 손을 내린 0.8~1.0초에는 흰 담배가 그대로 남았습니다. 연기도 남았습니다
- 정리본의 앞 0.5초를 잘라 YouTube 화면 구간을 없앴습니다. 이후 회차는 모두 이 영상(27.22초)을 입력으로 씁니다
4회차. 정리한 원본 + 카메라 고정 문장
- 입력: 정리한 원본
- 이미지: 3회차와 같은 8장
- 프롬프트: 「궁궐 사진의 구도는 쓰지 않는다. 모든 장면은 원본의 카메라 위치와 크기를 유지하고, 궁궐은 군중 뒤와 위에만 보인다」
왼쪽 0.4초, 오른쪽 1.3초. 빼빼로를 담배처럼 물었다 떼고, 입에서 흰 연기를 내뿜는다
- 첫 프레임 담배, 목, 와이드 장면 구도는 모두 해결됐습니다
- 빼빼로를 담배처럼 피웠습니다. 물고, 떼고, 입을 오므려 내뿜는 원본 동작을 그대로 따릅니다
- 정리본에 남아 있던 연기가 그대로 옮겨졌습니다
5회차. 배경은 원본 그대로
- 이미지: 궁궐을 빼고 7장
- 프롬프트: 궁궐 문단을 지우고 「원본 배경, 건물, 바닥을 그대로 둔다」 한 줄
배경까지 바꾸라고 하니 다른 게 흐트러지는 것 같아서 배경 지시를 뺐습니다.
왼쪽 5회차 1.3초, 가운데 4회차 1.0초, 오른쪽 5회차 1.0초. 5회차는 막대를 계속 입에 물고 있고 얼굴도 달라졌다
- 군중이 처음부터 끝까지 한복으로 맞춰졌습니다
- 빼빼로를 아예 입에 문 채로 다녔습니다. 초콜릿 색도 안 보여서 빼빼로로 읽히지 않습니다
- 주인공 얼굴이 눈이 가늘고 둥글게 바뀌었습니다
object-swap으로 담배만 지우기
빼빼로를 포기하고, 정리본에서 담배만 지워 빈손으로 만들어 보기로 했습니다. 빈손 레퍼런스는 원본 0.85초 프레임을 Codex에 주고 손가락 사이만 비워서 만들었습니다.
- 첫 클로즈업의 담배와 머리 옆 연기 덩어리는 지워졌습니다
- 두 번째 흡연 장면(14.5~16.3초)은 그대로였습니다. 군중 사이에서 주인공이 작게 잡히는 장면인데, 인물이 작으면 object-swap이 손을 대지 않는 것으로 보입니다
- 구간을 잘라 다시 돌리고 이어 붙이는 방법도 있었지만, 이음매가 거슬려서 쓰지 않았습니다
6회차. 담배 대신 바나나
- 입력: 문신만 지운 정리본
- 이미지: 주인공 1장 + 탈춤꾼 5장 + 반쯤 깐 바나나를 든 손 1장
- 프롬프트: 「손에 들고 입에 가져가는 것은 반쯤 깐 바나나다. 입에 가져갈 때마다 한 입 베어 물고 씹어서 조금씩 짧아진다」. 담배, 연기, 빼빼로라는 단어는 넣지 않았다
모양이 전혀 다른 소품이라 원본 모양에 밀릴까 걱정했는데, 반대였습니다.
- 첫 프레임부터 바나나를 먹었습니다. 떼고 나면 볼이 부풀어 씹는 모양이 되고, 연기 장면이 씹는 입 모양으로 바뀌었습니다
- object-swap이 못 지운 두 번째 흡연 장면도 바나나를 먹는 장면이 됐습니다
왼쪽 10초, 오른쪽 21초 확대. 군무 구간에서 옷 모양이 달라지고, 옷깃을 쥔 주먹마다 주황색과 빨간색 덩어리가 붙었다
- 군무 구간에서 옷이 갑자기 바뀌고, 군중의 손에 주황색 덩어리가 생겼습니다. 바나나 지시가 군중에게 번진 것으로 보입니다
7회차. 군중은 맨손
- 프롬프트: 6회차 + 「바나나는 주인공만 든다」, 「탈춤꾼들은 아무것도 들지 않은 맨손이다. 옷깃(jacket collar)을 쥘 때도」
왼쪽 1.3초, 오른쪽 10초. 손은 고쳐졌지만 입김과 블레이저가 돌아왔다
두 줄을 더했을 뿐인데 손 말고 다른 것까지 달라졌습니다. 손은 맨손이 됐지만, 군중은 다시 흰 블레이저가 됐고 입 앞에 큰 흰 김이 나왔습니다. 주인공 얼굴도 갸름해졌습니다. 추가한 문장의 「jacket」이 블레이저를 끌어왔을 수도 있지만 확인하지 못했습니다.
8회차. 얼굴 클로즈업 + 「보여야 할 것」을 쓰기
- 이미지: 7회차 7장 + 제 사진에서 얼굴만 잘라 키운 1장(
@Image 8) - 프롬프트:
- 「클로즈업에서는 @Image 8과 같은 얼굴」
- 「클로즈업 동안 입을 다물고 씹는다. 숨을 내쉴 때도 입과 얼굴 바로 앞에 뒤의 탈춤꾼들이 또렷하게 보인다」
- 뒤의 사람들을
students대신masked dancers로 부름. 「학생」이라는 단어가 교복을 끌어올까 봐서다
왼쪽 1.3초, 오른쪽 10초. 입김은 사라졌지만 군중은 회청색 속옷에 가슴 배지가 달린 흰 블레이저다
- 입김이 사라졌고, 제 눈에는 얼굴도 7회차보다 원래 얼굴에 가까워졌습니다
- 군중은 여전히 흰 블레이저였습니다
9회차. 앞이 열린 옷 - 최종본
여기서 결정적인 걸 알아챘습니다. 원본 군중은 블레이저 앞이 열려 있고, 군무에서 그 옷깃을 움켜쥡니다. 그런데 제 탈춤꾼 레퍼런스는 고름으로 여민 저고리에 허리띠를 맨 옷이었습니다. 춘식이와 라이언 때 「라이언에게 원본 교복을 입혀서」 몸통 얼굴 문제를 풀었던 것과 같은 상황이었습니다.
왼쪽부터 얼굴 클로즈업(@Image 8), 탈춤꾼 정면, 뒤, 카메라 쪽 인사, 옆 인사, 하늘 보기. 고름과 허리띠를 없애고 앞을 열었다. 양쪽 깃이 라펠처럼 내려오고, 안의 남색 속옷이 원본의 셔츠와 넥타이 자리에 온다
- 이미지: 주인공 1장 + 앞이 열린 탈춤꾼 5장 + 바나나 1장 + 얼굴 1장
- 프롬프트: 탈춤꾼 옷 설명을 「무릎 길이 흰 모시 겉옷을 앞을 열어 입고, 고름과 허리띠는 없다. 깃이 라펠처럼 내려오고 안에 남색 속옷이 보인다」로, 옷깃 쥐는 동작은 「겉옷의 열린 앞자락을 잡는다」로 바꿨다
1
2
3
4
5
6
@Image 2: the surrounding dancer: ... a knee-length white ramie hanbok outer coat
worn open at the front with no ties and no sash, its two white collar bands running
down the open front edges like lapels, a plain dark navy inner shirt showing as a
vertical strip down the chest ...
@Image 6: ... head tilted back looking up at the sky,
both hands grabbing the two open front edges of the coat.
군중 옷이 처음부터 끝까지 레퍼런스대로 나왔고, 군무 구간에서도 바뀌지 않았습니다. 큰 입김이 없는 것, 바나나, 맨손도 그대로 유지됐습니다. 이 회차를 최종본으로 정했습니다.
최종본에 남은 문제
왼쪽 10초, 오른쪽 24.2초 확대. 가슴의 흰 동그라미는 원본 교복의 학교 배지 자리다
- 가슴 장식: 군중 겉옷 가슴에 흰 동그라미가 남았습니다. 원본 블레이저의 배지 자리입니다. 이것도 「원본 모양이 남는다」의 한 예입니다
- 24초 손: 주인공이 손을 옷 속으로 집어넣은 것처럼 손이 보이지 않습니다
- 2초 입김: 숨을 내쉬는 순간 짧게 김이 나갑니다. 8회차의 「입 앞이 또렷하게 보인다」 문장으로도 완전히 막지는 못했습니다
다시 돌리면 고칠 수도 있지만, 7회차처럼 다른 곳이 틀어질 수 있어서 여기서 멈췄습니다.
무엇이 도움이 됐나
| 시도 | 결과 | 효과 |
|---|---|---|
| 군중 레퍼런스를 원본 옷 모양(앞이 열린 옷)에 맞춤 | 9회차에서 옷이 처음부터 끝까지 일관됨 | ✅ 가장 컸다 |
| 소품을 「먹는 것」(바나나)으로 바꾸고 베어 무는 동작을 씀 | 흡연 동작이 먹는 동작으로 바뀜, 연기 장면도 씹는 입으로 | ✅ |
| object-swap으로 원본 문신 지우기 | 목 요철 사라짐 | ✅ |
| 원본 앞 0.5초(YouTube 화면) 잘라내기 | 4회차부터 첫 프레임 담배와 흰 화면이 사라짐 (원본 정리와 함께 적용) | ✅ |
| 「원본 카메라 위치와 크기를 유지한다」 문장 | 4회차에 와이드 장면 구도가 원본으로 돌아옴 | ✅ |
| 배경 지시를 빼고 원본 배경 유지 | 5회차에 처음으로 군중이 처음부터 끝까지 한복 | △ 한 번 관찰 |
| 얼굴 클로즈업 레퍼런스 추가 | 얼굴이 원래 얼굴에 가까워짐 | △ 한 번 관찰 |
| 「보여야 할 것」을 쓴 입김 문장 | 8, 9회차에 큰 김은 사라짐, 짧은 김은 남음 | △ |
| 담배와 같은 모양의 소품(빼빼로) | 모양은 맞지만 담배처럼 피움 | ❌ |
| 「NO smoke」, 「첫 프레임부터」 같은 지시 | 바뀌지 않음 | ❌ |
| 궁궐 배경 이미지 | 색만 바뀌거나, 구도까지 사진을 따라감 | ❌ |
| object-swap으로 담배 지우기 | 클로즈업만 일부 지워지고 작게 잡힌 장면은 그대로 | ❌ |
정리하면 프롬프트 문장을 다듬는 것보다 레퍼런스 이미지를 원본에 맞추는 것과 원본을 미리 정리하는 것이 효과가 컸습니다. 문장 한두 줄을 바꾸면 의도하지 않은 곳까지 달라졌습니다.
잘 안 될 때
군중 옷이 레퍼런스대로 안 나온다
원본 옷의 실루엣(앞이 열렸는지, 깃이 어디 있는지, 배지가 어디 있는지)을 먼저 봅니다. 레퍼런스를 그 실루엣에 맞춰 다시 만듭니다. 특히 군무에서 손으로 잡는 부분(옷깃)이 레퍼런스에도 있어야 합니다.
첫 몇 프레임에 원본이 남는다
원본 첫 프레임에 앱 화면, 자막, 페이드가 있는지 한 프레임씩 확인합니다. 화면 녹화본이면 UI가 찍힌 구간을 잘라내고 넣습니다.
사람을 사람으로 바꾸면 원본 세부가 남는다
담배, 문신 같은 원본 세부가 새 얼굴과 옷 아래에 남습니다. 문신처럼 지워야 할 것은 object-swap으로 원본에서 먼저 지우는 편이 나았습니다. 다만 화면에서 작게 잡힌 인물에는 object-swap이 잘 듣지 않았습니다.
한 줄 고쳤는데 다른 곳이 틀어진다
seed가 없어서 생기는 무작위성과, 새 문장의 단어가 다른 곳으로 번지는 것이 섞여 있습니다. jacket, students처럼 원본 옷을 떠올리게 하는 단어는 피했습니다. 고친 뒤에는 이전 회차에서 잘 나온 항목도 다시 확인합니다.
결과를 1초 간격으로만 보면 놓친다
첫 1초는 프레임 단위로, 담배나 연기처럼 짧게 나오는 건 확대해서 봅니다. 저는 1초 간격으로 보고 「담배 없음」이라고 했다가 첫 5프레임을 놓쳤습니다.
참고 자료
- Genjutsu Motion Transfer Playground
- Genjutsu motion-transfer API 문서
- 원본: GENER8ION, Yung Lean 「STORM」 뮤직비디오 YouTube 4:17부터 28초. 영상과 음원의 권리는 원저작자에게 있습니다