주성진·article·2026.10.01·8 min read·조회수412
커서를 따라보는 캐릭터 만들기 1편, 이미지 한 장을 Higgsfield로 영상화하기
블로그 첫 화면 캐릭터는 이미지 한 장에서 시작했습니다. 커서로 되감아 쓸 영상을 AI로 만들 때 필요한 조건과, 실제로 써 본 프롬프트를 공유합니다.
AI로 만든 히어로 캐릭터· 1 / 3펼치기접기
- 1. 커서를 따라보는 캐릭터 만들기 1편, 이미지 한 장을 Higgsfield로 영상화하기
- 2. 커서를 따라보는 캐릭터 만들기 2편, 193프레임에서 21개 포즈 고르기
- 3. 커서를 따라보는 캐릭터 만들기 3편, 잔상 없이 부드럽게 스크러빙하기
이 블로그 첫 화면에는 커서를 따라 고개를 돌리는 캐릭터가 있습니다. 마우스를 왼쪽으로 옮기면 왼쪽을 보고, 오른쪽으로 옮기면 오른쪽을 봅니다. 화면 밖으로 나가면 다시 정면으로 돌아오고요.
처음 이걸 만들려고 했을 때는 3D 모델이나 Lottie 같은 걸 떠올렸습니다. 그런데 손에 있는 건 일러스트 한 장뿐이었고, 이걸 위해 3D 모델을 따로 만들기엔 일이 너무 커 보였습니다. 그래서 방향을 바꿨습니다. 이미지를 AI로 영상화하고, 그 영상을 프레임 단위로 잘라 커서에 연결하면 되지 않을까?
결론부터 말하면 됐습니다. 다만 생각보다 손이 훨씬 많이 갔습니다. 이 시리즈는 그 과정을 세 편에 나눠 정리한 기록입니다.
- 이미지 한 장을 영상으로 만들기 (이 글)
- 193프레임에서 쓸 포즈를 고르고 스프라이트 시트 만들기
- 잔상 없이 부드럽게, 광학 흐름 보간과 바닐라 JS 스크러버
이번 글에서는 스크러빙용 영상이 일반 영상과 어떻게 다른지, 그리고 Higgsfield에서 어떤 프롬프트로 영상을 만들었는지 다룹니다.
1. 전체 흐름
먼저 전체 그림을 보면 이렇습니다.
| 단계 | 도구 | 결과물 |
|---|---|---|
| 캐릭터 이미지 | 준비한 일러스트 | main_hero.png |
| 영상화 | Higgsfield (Seedance 2.0) | 8초 영상 main.mp4 |
| 프레임 추출 | FFmpeg | PNG 193장 |
| 포즈 선별 | Python (NumPy, PCA) | 키 포즈 21개 |
| 배경 제거 | Python (OpenCV) | 투명 배경 프레임 |
| 중간 프레임 생성 | OpenCV 광학 흐름 | 62프레임 |
| 스프라이트 시트 | Pillow, WebP | 8×8 격자 이미지 1장 |
| 인터랙션 | 바닐라 JS | 커서 스크러빙 |
코드는 대부분 Claude Code와 같이 작성했습니다. 저는 뭘 만들지, 그리고 결과가 괜찮은지를 판단하는 쪽이었고요. 에이전트가 스크립트를 짜면 결과 이미지를 직접 열어 보고 "여기 잔상이 남는다", "이 프레임은 왼쪽이 아니라 정면이다" 하면서 방향을 잡았습니다.
2. 출발점은 이 이미지 한 장이었습니다

노트북을 무릎에 올리고 턱을 괸 캐릭터입니다. 프론트엔드 개발자 블로그 얼굴로 괜찮겠다 싶었습니다. 이 이미지를 Higgsfield에 올려 고개를 좌우로 돌리는 영상을 만들었습니다.
3. 스크러빙용 영상은 조건이 다릅니다
처음엔 그냥 "고개를 좌우로 돌리는 영상 만들어 줘" 정도로 시작했습니다. 결과는 꽤 그럴듯했는데, 막상 프레임을 잘라 보니 쓸 수가 없었습니다. 카메라가 미세하게 줌인되면서 프레임마다 캐릭터 크기가 달랐거든요. 커서로 되감으면 캐릭터가 숨 쉬듯 커졌다 작아졌다 했습니다.
보기 좋은 영상과 커서로 되감아 쓸 영상은 요구사항이 다릅니다. 영상을 처음부터 끝까지 틀어 주는 게 아니라, 커서 위치에 맞는 장면 하나를 골라 보여 줘야 하기 때문입니다. 몇 번 실패하고 나서 정리한 조건은 이렇습니다.
- 카메라는 완전히 고정이어야 합니다. 줌이나 팬이 조금만 들어가도 화면에서 흔들려 보입니다.
- 움직이는 건 캐릭터 하나여야 합니다. AI는 시선을 끌 대상(점, 벌레, 손 같은 것)을 자꾸 끼워 넣는데, 스크러빙하면 이게 갑자기 나타났다 사라지는 물체가 됩니다.
- 시선이 한 방향으로 일관되게 움직여야 합니다. 왼쪽, 정면, 오른쪽 순서가 분명해야 커서 x 좌표와 맞출 수 있습니다.
- 첫 프레임과 마지막 프레임이 같아야 합니다. 정면 포즈를 기준점으로 쓰기 때문입니다.
- 배경은 단색이 좋습니다. 나중에 배경을 지워야 하는데, 단색이면 일이 훨씬 줄어듭니다.
4. 실제로 쓴 프롬프트
Higgsfield에서 Seedance 2.0 모델에 캐릭터 이미지, 움직임 레퍼런스 영상, 프롬프트를 같이 넣었습니다. 아래는 첫 시도 때 쓴 프롬프트입니다. 그때는 다른 동물 캐릭터로 먼저 실험하고 있어서 귀나 수염 이야기가 들어 있습니다.
업로드한 이미지를 그대로 기준으로 삼아줘. 캐릭터, 표정, 비율, 조명, 카메라 앵글, 구도, 배경까지
전부 보이는 그대로 유지하고, 카메라는 줌이나 팬, 회전, 크롭, 장면 전환 없이 완전히 고정해줘.
움직이는 건 캐릭터 하나뿐이야. 커서, 포인터, 점, 벌레, 장난감, 손, 그림자, 파티클 같은
새로운 요소는 절대 넣지 마.
주변에서 뭔가가 360° 여기저기 돌아다니는 걸 눈으로 쫓는 느낌으로 자연스럽게 반응하게 해줘.
눈이 먼저 움직이고, 머리는 살짝 늦게 따라오는 식으로.
순서는 이렇게 가면 좋겠어. 왼쪽 끝 → 왼쪽 아래 → 왼쪽 위를 보고 중앙으로 돌아온 다음,
오른쪽 끝 → 오른쪽 아래 → 오른쪽 위를 보고 나서 원래 포즈로 딱 돌아와서 멈추는 거야.
몸통, 어깨, 가슴, 앉은 자세는 거의 안 움직이게 해줘. 몸이 늘어나거나 얼굴이 뭉개지거나,
빙글 돌거나, 너무 과하게 고개를 돌리는 건 다 빼고.
나중에 프레임 단위로 스크러빙할 거라서 첫 프레임이랑 마지막 프레임은 완전히 똑같아야 해.영상 길이는 8초로 했고, 첫 시도는 720p 세로(9:16)였습니다. 최종본은 1920×1080 가로(16:9)로 다시 만들었습니다.
몇 번 고쳐 보면서 효과가 컸던 건 세 가지였습니다.
첫째, 용도를 직접 밝히는 문장입니다. "나중에 프레임 단위로 스크러빙할 거라서"라고 이유를 적었더니 첫 프레임과 마지막 프레임을 맞춰 달라는 요구가 확실히 더 잘 지켜졌습니다.
둘째, 금지 목록은 구체적으로 적어야 했습니다. "새로운 요소 넣지 마"라고만 쓰면 여전히 뭔가를 넣습니다. "커서, 포인터, 점, 벌레, 손"처럼 하나하나 나열하고 나서야 줄었습니다.
셋째, "눈이 먼저, 머리가 나중에"라는 표현입니다. 사람이 무언가를 따라볼 때의 순서를 적어 줬더니 시선 이동이 훨씬 자연스러워졌습니다.
5. 결과 영상을 열어 보니
최종 영상 정보를 ffprobe로 확인해 봤습니다.
ffprobe -v error \
-show_entries stream=codec_name,width,height,r_frame_rate,nb_frames,pix_fmt \
-of default=nw=1 main.mp4codec_name=hevc
width=1920
height=1080
pix_fmt=yuv420p10le
r_frame_rate=24/1
nb_frames=19324fps에 8초, 193프레임입니다. 16프레임(0.67초 정도)마다 한 장씩 뽑아 보면 이렇습니다.

이렇게 보면 잘 나온 것 같습니다. 그런데 프레임을 한 장씩 넘겨 보니 바로 쓰기 어려운 점이 세 가지 있었습니다.
먼저 순서가 왕복합니다. 정면에서 왼쪽을 봤다가 다시 정면, 그다음 오른쪽, 다시 정면입니다. 영상 순서를 그대로 커서에 매핑하면 커서를 오른쪽으로 옮기는 동안 고개가 왼쪽으로 갔다가 돌아옵니다.
그리고 포즈가 2프레임마다 바뀝니다. 24fps 영상이지만 실제 움직임은 초당 12장 수준이었습니다.
마지막으로 전환이 너무 빠릅니다. 고개를 돌리는 동작이 8프레임 정도 만에 끝나서, 전환마다 서로 다른 포즈가 3~4개밖에 없었습니다. 이게 나중에 꽤 큰 문제가 됩니다.
첫 번째 문제는 다음 편에서 프레임을 다시 골라 순서를 재배열하는 방법으로 풀었고, 나머지 두 개는 마지막 편에서 광학 흐름으로 중간 프레임을 만들어서 해결했습니다.
마치며
해 보고 나서 든 생각은, AI 영상은 완성품이 아니라 재료로 보는 게 맞다는 겁니다. 영상 자체도 프롬프트를 몇 번 다듬어야 했지만, 결과 품질을 결정한 건 오히려 그다음 후처리였습니다.
비슷한 걸 만들어 보실 분이라면, 프롬프트에 "스크러빙할 거다"라는 용도를 꼭 적어 보시길 권합니다. 그 한 줄로 결과가 꽤 달라집니다. 다음 편에서는 193프레임 중에 어떤 프레임을 어떻게 골랐는지 이야기해 보겠습니다.
Comments (0)