레퍼런스 한 개로 하룻밤에 영상 다섯 편: 악역영애 말포이 AI 제작기
5년 전에 완결된 한국 웹소설 한 편, 「악역영애 말포이」가 요즘 해외에서 Fem Malfoy라는 밈으로 역주행 중이죠. 9월 22일 X에 올라온 팬아트 한 장이 조회 2,075만을 찍으면서 2021년에 끝난 원작까지 다시 불려 나왔습니다.
시작은 「젠레스 존 제로」 에이전트 쇼케이스를 패러디한 10초짜리 인스타 릴스 하나였는데, 보자마자 든 생각은 딱 하나였습니다. 이거, AI로 개쩔게 만들 수 있나?
10월 7일 오후에 시작해 하룻밤 사이 영상 다섯 편이 나왔습니다. 사실 제가 한 일은 방향을 정하고 마음에 안 드는 걸 반려한 것뿐입니다. 이미지는 codex, 영상은 Flow, 소리는 ElevenLabs가 맡았고, 배경 그래픽·글자·효과·편집은 전부 코드가 짰습니다. 이 전체를 지휘한 건 Claude고요.
- 1편 S-RANK PULL: 가챠에서 S랭크로 뽑힌 말포이가 "You pulled me... with FREE gems?" 하고 비웃는 26.5초
- 2편 AGENT SHOWCASE: 레퍼런스 문법 그대로, 드릴컬이 포니테일로 바뀌는 원테이크
- 3편 로판 OP: 한국어 보컬곡을 얹은 가짜 애니 오프닝 30초
- 4편 HYPER EDIT: 170 BPM에 78컷을 박는 애니 에딧
- 5편 로판 OP 영어판: 3편의 곡을 영어 보컬로 바꾼 버전
다섯 편 어디에도 제 손이 닿은 프레임은 없습니다.
재료 만들기: 그림보다 그림 바깥
이미지는 codex의 gpt-image-2로 약 35장을 뽑았는데, 정작 손이 많이 간 건 그림보다 그림 바깥이었죠.
캐릭터 시안 4종(포니테일·드릴컬·생머리·올백)에 제가 단 답은 "포니테일 많은 게 좋아, 40% 정도"였고, 진짜 반려는 그다음에 나왔습니다. "옷이 다 고정이잖아!!!" 가챠 캐릭터는 스킨 갈아입는 맛인데, 한 벌짜리 인형을 만들어 놓은 거죠. 그래서 교복부터 무도회 드레스, 빗자루 스포츠 유니폼, 배틀 스킨, 아이돌까지 7벌을 새로 입혔습니다.
배경은 전부 파란 단색(#1E3CFF)인데, 블루스크린 촬영과 같은 원리로 나중에 영상에서 사람만 오려 내려면 배경이 한 색이어야 하거든요. 프롬프트에는 해리포터·말포이·슬리데린·호그와트를 한 번도 쓰지 않았습니다. 남의 작품 이름을 그대로 박는 대신 "백금발 귀족 영애, 초록·은색 뱀 문장 교복"처럼 생김새만 묘사했습니다.
사고도 있었습니다. 여러 장을 동시에 뽑으면 결과 파일 이름이 서로 뒤바뀌는데, 이게 배치마다 터졌습니다. 4종 중 4개, 8장 중 3개, 7벌 중 4개, 15장 중 8개. 바로잡은 건 사람이 아니라 Claude였는데, 이미지를 직접 열어 보고 파일 이름 대신 그림 내용을 기준으로 이름을 다시 붙였죠.
따라 하실 분께 요령 셋.
- 오려 낼 캐릭터는 처음부터 단색 배경에 그리세요. 캐릭터에 없는 색으로 고르면 됩니다.
- 작품 이름 대신 생김새를 쓰세요. 머리색, 옷 색, 문장 모양이면 충분합니다.
- 병렬로 뽑았다면 파일 이름을 믿지 말고 열어 보세요. 그 확인도 AI에게 맡기면 됩니다.
재료는 예쁜 것보다 다음 공정에 들어맞는 게 먼저더군요.
영상: Flow에는 그림을 쥐여 준다
"flow에는 이미지 기반 제작해야지 왜 순수 flow로 만들어."
영상 첫 단계에서 제가 던진 이 반려 한 줄이 그대로 원칙이 됐습니다. 텍스트만으로는 영상을 만들지 않는다, 모든 컷은 codex가 그린 이미지를 첫 프레임으로 깔고 시작한다. 글로만 시키면 얼굴도 옷도 Flow가 정하게 되니까요.
먼저 360p로 2건, 10크레딧만 써서 찔러봤는데, 블루 배경은 유지됐고 컷도 쪼개지지 않았습니다. 대신 가슴의 뱀 문장이 방패로 바뀌었고, 우하단에는 ✦ 워터마크가 박혔죠(한국 계정은 강제). 함정을 미리 알고 들어가니 720p 1편 11컷을 88크레딧에 끝냈습니다. 재생성은 0.
이미지를 넣는 방법은 셋을 비교했는데, 첫 프레임 지정이 블루 배경을 끝까지 지켜서 합성용 기본값이 됐습니다. 참조(Ingredients) 모드는 캐릭터를 @Malfoy로 등록하면 카메라가 자유로워지지만 배경 유지가 약했습니다. 그래도 무도회장 크레인 숏만큼은 참조 모드가 제일 좋았죠. 첫+끝 프레임은 2편의 드릴컬에서 포니테일로 바뀌는 변신 컷에 썼습니다.
프롬프트 끝에는 늘 같은 꼬리를 달았습니다. "One continuous shot, no scene cuts. No dialogue, no music." Omni는 가만두면 컷을 쪼개고 소리까지 붙이는데, 사람만 오려 배경에 얹을 소스라 원테이크여야 했고 소리는 ElevenLabs 몫이었거든요.
속도는 "flow는 한 번에 5~6개 돌려도 됨"이라는 한마디에서 나왔습니다. 동시 5개씩 제출해 클립 약 44개를 뽑았고, 크레딧은 1,050에서 664로 386을 썼습니다. 결국 Flow가 정한 건 움직임 하나뿐이었죠.
캐릭터만 AI, 나머지는 전부 코드
완성본 한 프레임을 멈춰 놓고 뜯어보면, AI가 그린 건 말포이와 대연회장 같은 장소 그림뿐입니다. 뒤에서 솟는 줄무늬, 화면을 가로지르는 가타카나 띠, 박자마다 터지는 플래시, 카메라가 확 당겨지는 움직임은 전부 코드가 만들었습니다.
AI는 그림을 잘 그리는데, 170 BPM 곡의 반박에 맞춰 글자를 정확히 떨어뜨리는 일은 이야기가 다릅니다. 몇 번째 프레임에 무엇이 나올지 정해야 하는 일은 코드가 틀리지 않거든요.
왼쪽부터 코드가 그린 배경·글자 / AI 영상에서 오려 낸 캐릭터 / 완성본
배경은 블록 7종으로 짰습니다. 가챠 화면, S랭크 카드 플래시, 이름판 슬램, 엔딩 도장, 생성 클립 12개를 모니터 벽처럼 쌓은 CRT 클립 월까지, 서브에이전트 3기가 나눠 맡았죠. 제 주문은 "뒤에 확확 올라오고 변화하는 서브컬처 패턴" 한 줄이었습니다. 그래서 제가 만들어 둔 모션 도감 awesome-ai-motion의 기법 637개에서 골라 쓰게 했고, 끝나고 정리해 보니 쓰인 효과 용어만 278개였습니다.
밀도는 숫자로 봐야 실감이 나는데, 78컷짜리 4편에 화면을 확 당겨 확대하는 punch-in이 51번, 속도를 늦췄다 당기는 speed ramp가 54번, 색을 어긋나게 찢는 RGB split이 42번 들어갔습니다. 사람이 손으로 키프레임을 찍었다면 엄두가 안 났을 밀도죠.
같은 순간을 셋으로 나눈 것. 전체 24장은 01_코드vsAI.md에
둘을 잇는 다리가 영상에서 사람만 오려 내는 매팅(matte)인데, 캐릭터를 처음부터 단색 블루 배경에 그려 둔 것도 이 단계 때문이었습니다. 블루를 빼는 색차 키에 애니 전용 AI 마스크를 겹쳐서, 머리카락 가닥과 초록 안감을 함께 살렸습니다. 문제는 속도였는데, CPU로는 프레임당 1.3~1.5초가 걸리던 게 "그냥 GPU 쓰면 되잖아" 한마디에 그래픽카드로 옮기자 0.09~0.5초로 떨어졌습니다. 하룻밤에 5편이 나온 것도 AI를 많이 써서가 아니라 AI에게 그림만 맡겨서였죠.
소리: 귀 대신 숫자로 골랐는데, 노래는 영어가 이겼다
1편 배경음악 후보는 7개였는데, 하나씩 들어 보며 감으로 고르는 대신 곡마다 BPM과 드롭이 터지는 시점을 재서 128 BPM에 하프시코드와 바이올린이 얹힌 일렉트로 스윙을 골랐죠. 드롭은 7.48초에 터집니다.
목소리는 오디션을 봤습니다. 영국 상류층 억양의 10대 목소리 3명 가운데 말포이 역은 Emmaline. 걸림돌은 대사 속 "FREE gems"였습니다. 어떤 테이크는 gems를 gens로 발음하더군요. 귀로 일일이 잡는 대신 음성인식에 받아 적게 하고, 철자가 어긋난 테이크를 걸러냈습니다.
크레딧이 가장 많이 들어간 건 3편 한국어 OP곡입니다. 후보만 21개를 뽑았고, 훅 「딱히 너 좋아서 그런 거 아니거든」은 13자 중 11자가 음성인식에 잡혔습니다. 사실 숫자로만 보면 합격이었는데, 들어 본 제 반응은 한 줄이었습니다. "한국어 보컬 별로다, 영어로." 3편은 그대로 두고, 같은 곡을 영어 보컬로 바꾼 5편을 따로 만들었습니다. 후보 12개 끝에 남은 훅은 "It's not like I like you or anything!"
물론 AI 음악이 시키는 대로 나오는 것도 아닙니다. 4편용 170 BPM 하이퍼팝은 후보 4개 중 어느 것도 지시한 브레이크를 지키지 않았습니다. 다시 뽑는 대신 편집으로 박을 맞췄죠.
ElevenLabs 크레딧은 합쳐서 약 19,500, 그중 9,938이 3편 한 편 몫입니다. 발음은 숫자로 거를 수 있었는데 듣기 좋은지는 끝내 숫자로 안 잡히더군요. 노래는 아직 영어가 낫습니다. 한국어 보컬은 좀 더 지켜보시죠.
지휘와 사고: 워커 9기를 돌려도 방향은 사람이 꺾었다
이번 작업에서 동시에 돈 워커는 최대 9기였습니다. Claude 메인이 일을 나눠 맡기고 결과를 모으는 오케스트레이터를 맡고, 서브에이전트들이 이미지 정리와 배경 블록, 소리 후보를 나눠 들었죠. 그 옆으로 매팅 큐 2줄이 따로 돌았고요.
그런데 그래프의 방향을 꺾은 건 워커가 아니었습니다. LangGraph식으로 그리면 제 반려 한마디가 인터럽트 노드, 그러니까 흐름을 세우고 사람 입력을 받아 다음 길을 고르는 지점이 됩니다. 이미지 기반 강제, 의상 다양화, Flow 동시 5개, 한국어 보컬 반려가 전부 그 자리에서 나왔습니다. "도는 거 멋없다, 확확 바뀌는 거"라는 한 줄에서는 4편이 통째로 태어났고요.
전체 그래프. 사람 반려가 어느 단계로 되돌아갔는지는 03_파이프라인_그래프.md의 되돌림 지도에
물론 매끄럽게 굴러가진 않았습니다. 사고가 세 번 났거든요.
첫 사고는 과부하였습니다. 클립 월 확인용 ffmpeg 30개를 한꺼번에 띄우고 폰트를 찾겠다고 D 드라이브 전체를 뒤지자 로드 160에 남은 RAM 2GB, WSL이 재부팅되며 세션이 끊겼고, 이후 무거운 작업은 동시에 들어갈 수 있는 수를 정해 둔 문지기인 세마포어로 2개까지만 돌렸죠.
C 드라이브 쪽은 WSL 가상 디스크 안에서 실제로 쓰는 건 27GB인데 파일이 75GB로 부풀어 있었고, 임시 파일이 쌓인 탓이라 임시 폴더를 D로 옮겼습니다. 배경이 투명한 알파 영상을 HyperFrames에 넣으면 render가 멈춰 버리는 문제도 있었는데, 결국 배경만 HyperFrames로 render하고 캐릭터는 파이썬과 ffmpeg로 얹는 하이브리드로 갈아탔습니다.
반전은 따로 있었습니다. render가 느리면 GPU 가속부터 떠올리기 마련인데, 실측해 보니 거의 효과가 없었어요. 화면 없이 도는 브라우저인 WSL의 headless Chrome이 GPU를 못 잡았거든요. 사실 속도를 약 2배 올린 건 더 센 장비가 아니라 몇 개를 동시에 돌리느냐, 병렬 워커 수 조정이었습니다.
하룻밤 동안 사람이 한 일이라곤 방향을 정하고 아닌 걸 아니라고 말한 것 두 가지뿐이었고 손작업은 0이었으니, 다음엔 이번 반려들을 처음부터 규칙으로 적어 두고 시작해 볼 생각입니다. 인터럽트 노드가 몇 개나 줄어들지, 그게 다음 실험입니다.
같이 보면 좋은 자료
- 코드 vs AI 레이어 비교 24장
- 실제 프롬프트 원문집
- 파이프라인 그래프
- 도구별 파이프라인 (Aside·codex·매팅·오디오·합성·지휘)
- 에이전트 배선도
- 효과 사전 278개