본문 바로가기

이미지.영상제작(FLOW 등)

Google Flow로 캐릭터 일관성 잡으려다 며칠을 갈아넣은 이야기

Google Flow로 캐릭터 일관성 잡으려다 며칠을 갈아넣은 이야기

애프터파티라는 곡을 하나 만들고 나서, 이걸로 짧은 스토리 영상을 만들어보기로 했다. 공주 캐릭터와 해골 코스튬을 입은 덩치 큰 캐릭터, 둘이 파티에서 만나 밀당하는 내용이다. 문제는 Google Flow로 캐릭터를 여러 장면에 계속 등장시키려다가, 생각보다 훨씬 많은 시행착오를 겪었다는 것.

 

레퍼런스 이미지만으로는 안 됐다

처음엔 그냥 잘 나온 이미지 한 장을 레퍼런스로 물려주고 "이 캐릭터로 계속 만들어줘" 하면 될 줄 알았다. 그런데 이 방식으론 매번 얼굴도 옷도 조금씩 다르게 나왔다. 레퍼런스는 그냥 "참고용"일 뿐이지, 캐릭터를 고정시켜주는 게 아니었다.

 

캐릭터 등록도 하고 나서 또 실패했다

Flow에는 "캐릭터" 등록 기능이 따로 있다는 걸 알고 나서, 기준 이미지를 올리고 이름을 붙여 등록했다. 그런데 등록만 해두면 끝인 줄 알았던 게 착각이었다. @Bella, @Bones처럼 이름만 불러서 프롬프트를 돌렸는데, 완전히 엉뚱한 사람이 나왔다. 그것도 만화 캐릭터가 아니라 아예 실사 사진 속 중년 여성과 성인 남성이 나온 적도 있다. 이름을 등록해뒀다고 해서 그 이름만으로 캐릭터가 항상 불러와지는 게 아니었다.

 

캐릭터 이미지를 직접 첨부해야 했다

결국 방법은 이름만 부르는 게 아니라, 그 캐릭터의 기준 이미지를 프롬프트에 직접 첨부하면서 동시에 이름을 같이 써주는 것이었다. 이미지와 이름을 함께 줘야 Flow가 "아, 이 사람을 말하는 거구나" 하고 제대로 인식했다. 등록해놓은 이름만 믿고 텍스트로만 부르면 언제든 이렇게 딴 사람이 튀어나올 수 있다는 걸 알게 됐다.

 

이미지와 이름을 같이 쓰면 장황한 설명이 필요 없어진다

그동안은 프롬프트를 쓸 때마다 매번 "갈색 곱슬머리에 파스텔 드레스를 입고 티아라를 쓴 공주가~"처럼 캐릭터 생김새를 길게 설명해왔는데, 이미지를 첨부하고 이름을 같이 쓰는 방식으로 바꾸고 나니 이럴 필요가 없어졌다. 이미지 자체가 생김새 정보를 다 담고 있으니, 매번 장황하게 다시 설명하지 않아도 됐다. 그동안 헛수고를 한 셈이다.

 

이름은 복붙이 아니라 직접 타이핑해야 한다

여기서 또 하나 걸린 게 있었다. 이전 프롬프트에서 썼던 @Bella라는 글자를 그대로 복사해서 붙여넣었더니, 이건 캐릭터를 부르는 게 아니라 그냥 "@Bella"라는 텍스트로만 인식됐다. 프롬프트 입력창에 @을 직접 타이핑해서 뜨는 자동완성 목록에서 캐릭터를 선택해야만 실제로 그 캐릭터가 연결됐다. 겉보기엔 똑같은 글자인데 입력 방식에 따라 완전히 다르게 처리된다는 걸 이번에 알았다.

 

등록해도 디테일은 계속 흔들린다

캐릭터를 등록하고 나서도 문제가 끝난 게 아니었다. 공주 캐릭터가 신발을 벗어서 옆에 내려놓은 장면을 한 번 만들었더니, 그 다음 컷부터 신발이 계속 왔다갔다했다. 어떨 때는 손에 들고 있고, 어떨 때는 다시 신고 있고, 어떨 때는 아예 안 보였다. "신발 없음"이라고 프롬프트에 적으면 이번엔 그걸 "신발을 신은 상태"로 해석해버리기도 했다.

결국 알게 된 건, 한 번 자리 잡은 디테일도 다음 프롬프트에서 다시 언급하지 않으면 원래 레퍼런스 이미지 상태로 돌아가버린다는 것. 지우고 싶은 디테일은 매번 "이건 없다"고 명시적으로 다시 말해줘야 했다.

 

좌우 위치도 제멋대로 바뀐다

두 캐릭터를 나란히 앉혀놓고 표정이나 동작만 바꾸려고 했는데, 어느 순간 둘의 자리가 통째로 바뀌어 나온 적도 있다. 이것도 프롬프트에 "왼쪽 캐릭터는 계속 왼쪽에" 식으로 명시해야 겨우 고정됐다.

 

미세한 감정 표현은 잘 안 먹힌다

"살짝 다가간다", "약간 수줍어한다" 같은 미묘한 지시는 거의 반영이 안 됐다. 오히려 자세를 통째로 바꿔버리거나, 아니면 아예 무시하고 원래 레퍼런스와 똑같이 나왔다. 표정이나 동작을 확실히 바꾸고 싶으면 "이 부분만 바꿔라, 나머지는 그대로 둬라"처럼 변경 범위를 아주 좁게, 그리고 꽤 과장된 수준으로 지시해야 그나마 반영됐다.

 

배경 소재도 따로 분리해야 한다

캐릭터가 있는 배경(파티장)과 인물이 없는 조용한 배경을 따로 만들어서 소재로 등록해두는 게 나았다. 처음엔 "인물 없이 조용하게"라고만 텍스트로 요청했는데, 이미 등록된 붐비는 파티 배경을 그대로 참조해서 사람들이 계속 나왔다. 아예 처음부터 인물 없는 버전을 별도로 만들어서 이름을 붙여둬야 했다.

 

여전히 못 푼 것

  • 신발처럼 사소한 디테일이 매번 흔들리는 근본 원인은 아직도 정확히 모르겠다. 캐릭터 등록 시점에 그 디테일 자체가 명확히 고정되지 않은 것 같은데, 이걸 어떻게 처음부터 방지할 수 있는지는 계속 시행착오 중이다.
  • "약간의 변화"를 요청했을 때 결과가 크게 후퇴하거나 과하게 바뀌는 문제는 아직 일관된 해법을 못 찾았다. 지시를 세게 주면 부자연스러워지고, 약하게 주면 반영이 안 된다.
  • 여러 번 생성했을 때 나오는 미세한 구도 차이(같은 프롬프트인데 매번 조금씩 다른 결과)를 어떻게 활용해야 편집 단계에서 덜 헷갈릴지도 아직 정리가 안 됐다.

제미나이가 말하는 발생 원인 및 해결책

현상  발생 원인 해결책
캐릭터 이름을 @이름 형태로 등록했음에도 실사 사진이나 엉뚱한 인물이 출력됨 인스턴스 바인딩 누락 및 단순 텍스트 파싱 오류 — 프롬프트 내 @이름 복사-붙여넣기 시 내부 렌더링 노드에 캐릭터 파라미터가 맵핑되지 않으며, UI의 자동완성 선택(UI Trigger)을 거쳐야만 객체 ID가 바인딩됨. 자동완성 기반 인스턴스 태깅 및 이미지 직접 첨부 — 입력창에서 @를 직접 타이핑하여 등장인물 레이블을 수동 선택하고, 기준 캐릭터 이미지를 프롬프트 세션에 직접 멀티모달 입력으로 첨부.
특정 소품(신발 등)이나 좌우 위치 구도가 다음 컷 생성 시 제멋대로 바뀌거나 복원됨 잠재 공간(Latent Space)의 기본 레퍼런스 회귀 성향 — AI 모델은 변형 프롬프트가 들어오더라도 기준 캐릭터 시트의 원본 상태(신발을 신은 상태, 기본 배치)로 돌아가려는 강력한 프라이어(Prior) 저항을 가짐. 지우고자 하는 요소의 지속적 억제 및 명시적 위치 지정 — 장면이 전환되어도 사라져야 할 디테일은 매 컷 프롬프트에 지속 명시하고, Left/Right 등 구도 고정용 공간 지시어를 프롬프트 상단에 배치.
"살짝 다가간다", "약간 수줍어한다" 등 미세한 감정 및 동작 변화 지시가 무시됨 텍스트 임베딩의 임계값(Threshold) 미달 — 생성형 AI는 추상적이거나 미세한 정도 표현(Nuance)에 대한 감도가 낮아, 기존 이미지 레퍼런스의 특징에 묻히거나 아예 무시하는 경향이 발생함. 지시어 명확화 및 변경 범위 과장 지정 — "약간" 대신 "눈동자를 오른쪽으로 30도 돌린"처럼 구체적이고 다소 과장된 수준으로 변경 범위를 명시하여 프롬프트 가중치 반영 유도.

 

정리

캐릭터를 하나 만드는 것보다, 그 캐릭터를 여러 장면에서 일관되게 유지하는 게 훨씬 어려운 일이라는 걸 이번에 제대로 느꼈다. 등록 기능이 있다고 해서 모든 게 자동으로 고정되는 게 아니라, 결국 사람이 매번 세밀하게 디테일을 다시 짚어줘야 하는 부분이 많았다. 다음 글에서는 이 캐릭터들로 실제 밀당 장면을 어떻게 설계했는지, 그리고 그 과정에서 또 어떤 문제가 있었는지 이어서 적어볼 생각이다.