Prompt craft

MiniMax H3 글자 깨짐? 애니메이션 도중을 캡처한 것입니다

여섯 편을 프레임 단위로 확인했습니다. 프롬프트가 이름을 준 문자열 22 개는 전부 정확했습니다. 갈리는 쪽은 이름을 주지 않은 글자입니다.

13분 읽기편집팀편집팀
MiniMax H3 글자 깨짐? 애니메이션 도중을 캡처한 것입니다

AI 영상 속 글자에 대한 표준 조언은 「모델에게 쓰게 하지 말라」입니다. 소리 없이 뽑고, 편집 프로그램으로 가져가서, 글자는 직접 얹으라는 것이죠. 구글 첫 페이지의 가이드는 모두 이 이야기를 하고 이유도 같습니다. 영상 모델은 글자를 철자로 쓰는 게 아니라 질감으로 그리기 때문에, 프레임마다 자형이 흘러 오타가 난다는 겁니다.

이 말을 MiniMax H3 로 확인해 보러 갔다가, 그 조언이 놓치고 있는 것을 하나 찾았습니다.

공개된 예시 클립 여섯 편을 뽑아 프레임 단위로 넘겨 봤습니다. 여섯 편에는 프롬프트가 이름을 지정한 화면 글자가 22 군데 있습니다. 각각이 움직임을 멈춘 뒤에는 22 군데 모두 철자가 정확했습니다 — 게임 메뉴, 장비 목록, 그리고 부제가 붙은 두 줄짜리 타이틀 카드까지 포함해서요.

같은 여섯 편에는 완전히 읽을 수 없는 글자도 잔뜩 들어 있습니다. 그리고 그중 두 편에는 더 묘한 것이 있었습니다. 아무도 지정하지 않은 카피를 모델이 직접 써 냈고, 나올 때마다 정확하게 철자를 맞췄습니다. 이 두 가지를 갈라 두는 편이 제목보다 훨씬 쓸모 있습니다. 여러분 손에 있는 컷 중 어느 것이 안전한지가 거기서 나오기 때문입니다.

「깨진」 MiniMax H3 프레임은 실제로 어떻게 생겼나

같은 클립의 같은 메뉴 패널을 반 초 간격으로 놓은 것입니다. 위는 2.458 초, 아래는 2.958 초:

같은 장비 패널의 두 프레임. 2.458 초에서는 둘째 줄이 PHANTOM GRIP 이 번진 복제본이고, 2.958 초에서는 CHRONOS CLAW 라고 또렷하게 읽힌다

위 프레임이 바로 「AI 는 철자도 못 쓴다」라는 문구와 함께 올라오는 그 스크린샷입니다. 둘째 줄은 윗줄이 번진, 쓰다 만 복제본입니다. 깨져 보이는 이유는 실제로 깨져 있기 때문입니다 — 패널이 둘째 줄을 써 넣는 0.4 초 정도 동안만요.

그다음에는 CHRONOS CLAW 로 자리를 잡고, 그 뒤로는 변하지 않습니다.

프레임을 세어 봤습니다. 패널은 56 프레임에 등장해서 103 프레임에 사라집니다. 둘째 줄은 56 프레임부터 65 프레임까지 읽을 수 없고, 68 프레임부터 깨끗합니다. 24 fps 이니 2.0 초짜리 패널 안의 0.4 초 구간입니다. 화면에 있는 시간의 5 분의 1 정도가 오타처럼 보이지만, 오타가 아닙니다.

이건 들리는 것보다 중요합니다. 5 분의 1 이 거기에 걸릴 실제 확률은 아니기 때문입니다. 타임라인을 끌 때 사람은 무언가 일어나고 있는 곳에서 손을 멈춥니다. 그리고 무언가 일어나고 있는 프레임이란, 정확히 글자가 아직 자리를 못 잡은 프레임입니다. 끌어 보는 행위 자체가 결함 쪽으로 치우쳐 있습니다.

그래서 첫 번째 규칙은 창작이 아니라 절차의 문제입니다. 글자는 아무것도 움직이지 않는 프레임에서 판단하세요. 썸네일을 뽑을 때는 카드가 고정된 뒤에 뽑으세요. 그러지 않으면 그 결함을 직접 내보내는 셈이 되고, 누군가 그걸 스크린샷으로 남깁니다.

문자열을 적어 주면 MiniMax H3 는 그대로 씁니다

여기서부터가 프롬프트 쓰는 방식을 바꾸는 발견입니다.

아래 이미지의 위아래는 같은 클립, 같은 한 번의 생성에서 10 초 떨어진 두 지점입니다:

위: MINIMAX, RIGHT ARM EQUIPMENT, PHANTOM GRIP, CHRONOS CLAW 가 모두 또렷하고 정확한 게임 UI. 아래: 네온 간판이 하나같이 읽을 수 없는 글자로 된 사이버펑크 거리

위쪽은 또렷합니다. MINIMAX, RIGHT ARM EQUIPMENT, PHANTOM GRIP, CHRONOS CLAW — 전부 정확하고, 게다가 패널은 미끄러지고 있고 카메라도 움직이고 있습니다.

아래쪽은 네온 간판으로 가득한 거리인데, 그 위의 간판 중 단어인 것은 하나도 없습니다. 같은 모델, 같은 클립, 같은 시드, 10 초 뒤입니다.

프롬프트가 이걸 완전히 설명합니다. 문자열 열 개에 이름을 줬고, 돌아온 결과는 이렇습니다:

프롬프트에서 이름을 준 문자열결과
START NEW GAME정확
CONTINUE정확
SETTINGS정확
EXIT GAME정확
MINIMAX정확
RIGHT ARM EQUIPMENT정확
PHANTOM GRIP정확
CHRONOS CLAW정확
ARMAMENT CUSTOMIZATION정확
CONFIRM CONFIG정확

열 개 중 열 개입니다. 거리 쪽은 프롬프트가 사이버펑크 도시를 요청했을 뿐, 간판에 무엇을 써야 하는지는 한마디도 하지 않았습니다. 그래서 모델은 할 수 있는 유일한 일을 했습니다. 간판 모양의 질감을 그린 것이죠.

경쟁 가이드들이 측정한 것도 바로 이 동작입니다. 다만 두 경우를 나누지 않았을 뿐입니다. 「글자는 기호가 아니라 질감으로 그려진다」는, 프롬프트가 카피를 한 번도 써 주지 않은 배경에 대한 설명으로는 정확합니다. 여러분이 직접 건넨 문자열에 대한 설명으로는 정확하지 않습니다.

같은 클립에는 세 번째 경우도 있습니다. 프롬프트는 「손·팔뚝·팔꿈치·위팔 컴포넌트를 표시하는」 그리드를 요청합니다. 지정한 것은 컴포넌트이고, 라벨 문자열은 끝까지 주지 않았습니다. 돌아온 그리드는 아이콘 줄이고, 그 아래에 글자가 하나도 없습니다. 깨진 게 아니라 없는 겁니다.

여기까지는 규칙이 「이름을 준 글자는 써지고, 이름을 주지 않은 글자는 안 써진다」로 보입니다. 저도 그렇게 알고 있었습니다. 어떤 제품 클립을 보기 전까지는요. 그리고 그건 틀렸습니다.

이름을 주지 않았는데 완벽하게 나온 글자

두 편 더 보겠습니다. 둘 다 여러분이 곧 읽을 글자에 이름을 주지 않았습니다:

위: 나무 상자 위의 레모네이드 네 병, 라벨마다 BRIGHTSIP 이 또렷하게 읽힌다. 아래: 포토리얼한 인체공학 의자 도해로, 양옆 HUD 패널은 읽을 수 없는 얼룩이다

위 프레임은 여름 음료 광고입니다. 프롬프트 전체가 한 문장입니다. 배달 라이더가 언덕 마을을 지나며 「스파클링 레몬 음료를 연다」, 만화풍. 브랜드 없음. 라벨 카피 없음. 따옴표 안에는 아무것도 없습니다.

모델은 BRIGHTSIP 을 스스로 만들어 병에 얹었고, 한 프레임 안의 서로 다른 네 각도의 라벨 네 장에서 전부 정확하게 썼습니다. 9 초 뒤 히어로 컷에서도 정확했고, 엔드 카드에서 한 번 더 나옵니다. 그 엔드 카드에서는 TASTE THE SUN 이라는 카피까지 스스로 만들어 역시 정확하게 썼습니다. 굽은 유리, 계속 바뀌는 크기, 움직이는 카메라. 그런데도 이 단어는 한 번도 무너지지 않습니다.

아래 프레임은 포토리얼한 의자 광고입니다. HUD 주석은 읽을 수 없는 얼룩인데, 같은 클립의 엔드 카드에는 한자 여덟 자가 한 자도 틀리지 않고 들어 있습니다.

두 쪽 모두 이름을 주지 않은 글자입니다. 한쪽은 완벽하고 한쪽은 잡음입니다. 그러니까 이름을 주는 것은 문자열이 써지게 하기에 충분하지만, 써질지 말지를 결정하는 것은 아닙니다. 결정하는 것은 그 문자열이 이 컷 안에서 맡은 역할이 있는가입니다. 제품 공개는 병에 브랜드가 없으면 제품 공개가 되지 않습니다. 그래서 모델이 하나를 마련하고 끝까지 밀고 갑니다. 기술 계기 표시는 배경이고 그 안의 어느 단어도 개별적인 의미가 없습니다. 그래서 모델은 「계기 표시의 질감」을 그립니다. 배경의 네온 간판 마흔 장도 HUD 와 같은 경우입니다.

이름을 주는 것은 철자를 켜는 스위치가 아닙니다. 선택권을 모델에게서 되찾아 오는 방법입니다. 그냥 두면 H3 가 여러분의 제품에 이름을 붙여 줍니다. BRIGHTSIP 은 꽤 괜찮은 발명이지만, 여러분이 고른 것이 아니고, 지시를 내릴 수도 없고, 다음 테이크에서 같은 것이 다시 나오지도 않습니다.

같은 일이 포토리얼에서, 카피 전문이 모델 것인 채로 한 번 더

BRIGHTSIP 은 만화풍 클립 속 한 단어라 「저건 그린 글자니까」로 넘기기 쉽습니다. 넘기기 어려운 쪽은 이겁니다. 오리구이 제품 영상인데, 화면에 나오는 말이 전부 모델의 것입니다:

위: 검은 배경의 오리구이 제품 컷. 헤드라인 Bebek Panggang. 과 그 아래 Beli Sekarang 이 모두 선명하다. 아래: 같은 오리의 접사 컷으로, 오른쪽 작은 글씨 Rasa Pro. 도 선명하다

이건 그린 그림이 아닙니다. 포토리얼한 식품 광고입니다. 스튜디오 조명, 젖은 하이라이트, 반사가 있는 슬레이트 접시. 그리고 그 프롬프트는 655 자인데 문자열을 하나도 지정하지 않았습니다. 지정한 것은 언어 쪽입니다:

Use clean, lightweight sans-serif typography throughout, with generous negative space and a consistent visual system. All Bahasa Indonesia text must be spelled and rendered correctly.

모델이 광고를 직접 썼습니다. 다섯 줄, 전부 인도네시아어, 전부 정확합니다. Memperkenalkan(소개합니다), Kulit Sempurna(완벽한 껍질), Rasa Pro., Bebek Panggang.(오리구이), Beli Sekarang(지금 구매). 지시 자체도 옮겼습니다. 프롬프트에는 영어로 "Peking duck" 이라고 되어 있고, 엔드 카드는 Bebek Panggang 입니다.

여기서 두 가지가 떨어져 나옵니다. 그리고 그건 이 클립 자체보다 중요합니다.

포토리얼이냐 아니냐는 변수가 아닙니다. 저는 제가 재 온 정확한 라벨들이 정확한 이유가 그것들이 그려진 글자이기 때문이라고 봤습니다. 평평하게 얹힌 자형이라 모델이 그리기만 하면 되고 빛을 다시 줄 필요가 없다고요. 그런데 이 클립은 HUD 가 뭉개졌던 그 의자 광고와 똑같이 포토리얼인데 글자가 완벽합니다. 둘을 가르는 것은 렌더링 스타일이 아닙니다.

단어를 지정하지 않고 언어만 지정할 수 있습니다. 이게 꽤 중요합니다. 돌아오는 문자 체계가 여러분이 쓴 문자 체계라는 보장이 없기 때문입니다. 그 의자 클립은 엔드 카드를 영어로 지정했는데 — "Inspiration and Comfort Online Simultaneously" — 모델이 내놓은 것은 灵感与舒适同时在线, 중국어 대응 표현이었고, 철자는 정확했습니다. 정확하지만 요청한 것이 아니었죠. 언어를 적는 한 줄이 이 문제의 해결 전부입니다.

글자 크기는 사람들이 생각하는 그 문턱이 아닙니다

이 주제에서 가장 많이 인용되는 숫자는 「글자 높이가 약 40 px 아래로 내려가면 철자를 쓸 픽셀이 모자라 뭉개진다」입니다.

이 여섯 편에서 재 보면 성립하지 않습니다. MiniMax 예고편 예시의 삽입 카드는 1280×720 화면에서 자간 높이 29〜30 px 로 문턱 아래인데, THE MISSION WAS A LIE 는 정확합니다. START NEW GAME 은 42 px 이고 역시 정확합니다.

제가 찾은 정확한 문자열 중 가장 작은 것은 그보다 더 작고, 그것도 포토리얼 클립 위에 있습니다. Rasa Pro.1698×720 화면에서 22 px 로 화면 높이의 3 퍼센트인데 깨끗합니다. 그리고 이것도 아무도 이름을 주지 않았습니다.

작은 글자가 더 어려워지는 건 사실입니다. 다만 이 모델에서 문자열이 정확하게 나올지를 결정하는 것은 높이가 아닙니다.

문자열에 이름을 주어 써지게 하는 법

구체적으로 네 가지입니다. 전부 실제로 통한 프롬프트에서 가져왔습니다:

  1. 따옴표에 넣고, 대문자로, 원하는 형태 그대로 적으세요. Cursor clicks "CONTINUE" 가 통하는 형태입니다. 버튼을 「continue 버튼」이라고 설명하면 모델에게 가는 것은 모양이지, 써야 할 단어가 아닙니다.
  2. 어디에 놓일지 말하세요. "Right side displays game menu UI", "Top left displays player profile". 위치가 있는 글자는 장면 속 물체이고, 위치가 없는 글자는 장식입니다.
  3. 자형 처리를 단어 내용과 따로 지시하세요. MiniMax 예고편 프롬프트는 처리에만 90 단어를 씁니다. 자간, 발광, 「폰트는 순백이 아님」, 어떻게 들어오는지. 이 90 단어는 문자열을 하나도 지정하지 않지만, 지정된 쪽 문자열이 그냥 타이핑한 게 아니라 미술로 짜인 것처럼 보이게 만드는 건 바로 이 90 단어입니다.
  4. 단어를 지정하지 않을 때도 언어는 지정하세요. "All Bahasa Indonesia text must be spelled and rendered correctly" 가 그 오리 영상의 글자 지시 전부였고, 돌아온 줄은 전부 인도네시아어였습니다. 지정하지 않으면 장면이 암시하는 쪽이 옵니다. 영어 브리프에서 중국어 엔드 카드가 나오는 게 이 때문입니다.

그리고 실제로 돈을 아껴 주는 따름정리 하나. 이름을 주지 않은 간판은 결코 중립이 아닙니다. 거기에 무엇이 쓰일지는 무언가가 결정했고, 그게 여러분이 아니면 모델입니다. 구도로 피해 가야 할 질감이 되거나, 앞으로 같이 살아가야 할 브랜드 이름이 되거나 둘 중 하나입니다.

MiniMax H3 의 글자 표현이 아직 깨지는 곳

정직한 한계 세 가지, 전부 위 클립들에서 보입니다.

철자를 쓰는 것과 조판하는 것은 다릅니다. 비교 이미지의 위쪽을 다시 보세요. CHRONOS CLAW 가 위아래 두 줄에 두 번 나옵니다. 글자는 전부 맞고 목록이 틀렸습니다. 이 모델은 믿을 만한 식자공이자 믿을 수 없는 UI 디자이너입니다. 이 둘은 별개의 문제입니다.

배경 소품은 계속 읽을 수 없고, 이름을 줘서 해결하는 데에는 상한이 있습니다. 중요한 간판 세 장에는 이름을 줄 수 있습니다. 마흔 장에는 못 줍니다. 그리고 밀도 있는 도시 거리에는 마흔 장이 필요합니다.

채우지 못한 칸이 정확히 하나 있습니다. 포토리얼에서 굽은 표면 위의 글자입니다. 여기서는 변수가 둘 움직이고 있고, 갈라 둘 값어치가 있습니다. 이 주제의 설명 대부분이 둘을 하나로 뭉개기 때문입니다.

평면 위의 글자굽은 표면에 감긴 글자
그림 / 만화풍정확 — 예고편 카드, 게임 UI정확 — BRIGHTSIP, 유리 위 네 각도
포토리얼정확 — 오리 영상어느 쪽 증거도 없음

오리 영상은 「포토리얼이 문제다」를 부정합니다. BRIGHTSIP 은 「굽은 면이 문제다」를 부정합니다. 어느 쪽도 둘의 겹침은 부정하지 못합니다. 그리고 이 조합이 어려우리라 예상할 물리적인 이유가 있습니다. 그려진 라벨은 모델이 유리 위에 그리는 모양이지만, 포토리얼 라벨은 새 각도마다 다시 투영하고 다시 빛을 줘야 하기 때문입니다.

이 사례를 찾으러 갔지만 라이브러리에 없습니다. 102 건 중 프롬프트가 실제로 「ultra-slow rotating close-ups」를 요구하는 포토리얼 클립은 이 오리뿐이고, 오리에는 라벨이 없습니다. 포토리얼 병 컷을 다루는 제작자들은 라벨이 첫 프레임부터 무너지고, 사진으로 동영상 만들기로도 레퍼런스 이미지로 영상 만들기로도 살릴 수 없다고 보고합니다. 저는 재현하지 못했고, 남의 스크린샷으로 단언할 생각도 없습니다. 다만 이 규칙이 멈출 자리로 가장 그럴듯한 곳이 거기이고, 그 컷이 제 것이라면 제일 먼저 시험할 곳도 거기입니다.

이것들은 선별된 예시입니다. 여섯 편 중 넷은 MiniMax 자신의 쇼케이스이고 둘은 같은 라이브러리의 커뮤니티 투고라, 평균적인 날이 아니라 좋은 날을 나타냅니다. 22 대 22 도 재현을 기대할 숫자가 아닙니다. 이 선택 편향을 견디고 남는 것은 그 규칙이지 점수가 아닙니다. 그리고 견디는 이유의 일부는, 읽을 수 없는 글자가 바로 그 선별된 클립 안에 같이 들어 있다는 점입니다. 좋은 것만 골라 내놓는 쪽이라면 그 거리는 내놓지 않았을 겁니다.

매번 반드시 맞아야 하는 그 한 문자열을 위해

이름을 준 문자열은 정확하게 나옵니다. 그래도 그건 한 번의 생성입니다. 이번 테이크에서 맞았다고 다음 테이크에서도 맞는다는 뜻은 아니고, 그 문자열이 여러분의 브랜드나 제품명이나 실제 작품 제목이라면 「대체로 맞음」은 사양이 아닙니다.

이 주사위를 빼는 길이 하나 있습니다. 단어를 레퍼런스 이미지에 넣는 것입니다. 그러면 모델 손에는 그려야 할 글자가 아니라 맞춰야 할 완성된 조판이 있습니다. 애초에 글자를 그리고 있지 않으니 달라질 것이 없습니다. MiniMax 예고편 예시에서 작품 내 단 한 장의 설계된 타이틀 카드가 바로 이겁니다. 그건 입력한 정지 이미지 그 자체이고, 앞머리와 끝에 한 번씩 나옵니다.

전체 순서는 MiniMax H3 로 AI 영화 예고편 만들기에 있습니다. 박자 배치도 그쪽입니다.

그래서 분담은 이렇게 됩니다:

프롬프트에서 이름 주기레퍼런스 이미지에 넣기
어울리는 것메뉴 라벨, 삽입 카드, 중요한 간판브랜드, 제품명, 진짜 작품 제목
이번엔 맞나맞습니다. 이 여섯 편에서 22 대 22맞습니다. 단 글자가 평면에 머무는 경우
다음 테이크도 맞나생성이니 다시 굴립니다완전히 동일
문자 체계와 언어언어는 따로 지정하세요. 안 하면 장면이 암시하는 쪽이미지에 적힌 그대로
대가없음레퍼런스 자리 하나

오른쪽 열에는 경계가 있고, 위와 같은 경계입니다. 타이틀 카드는 모델이 붙들 수 있는 평면입니다. 도는 병에 감긴 라벨은 각도가 바뀔 때마다 다시 그려야 하는 곡면이고, 레퍼런스를 줘도 그 다시 그리기는 사라지지 않습니다. 레퍼런스 이미지 경로는 얹는 글자에 대해서는 결론이 났고, 굽은 면에 대해서는 아직 검증되지 않았다고 보시면 됩니다.

내 클립을 1 분쯤에 확인하는 법

플레이어로 판단하지 마세요. 먼저 클립 전체를 한 번에 펼쳐 놓고, 이상해 보이는 데만 원본 해상도로 되돌아갑니다:

# 대략 한 프레임 건너 하나씩 뽑아 한 장으로 늘어놓기
ffmpeg -i clip.mp4 -vf "fps=2,scale=320:-1,tile=5x7" -frames:v 1 sheet.png

# 그다음 의심스러운 순간을 원본 크기로, 프레임 지정해서
ffmpeg -i clip.mp4 -vf "select='eq(n,59)'" -fps_mode passthrough frame.png

한 장짜리 표에서 어떤 문자열이 틀리게 읽히면, 결론을 내기 전에 앞뒤 프레임을 뽑아 보세요. 이 여섯 편에서 처음에 깨져 보였던 문자열은 결국 전부 애니메이션 도중이었습니다. 그리고 이름을 주지 않은 글자가 자동으로 깨지는 건 아니지만, 깨져 있던 것은 전부 이름을 주지 않은 글자였습니다.

해 보기

가장 빠른 판본은 이렇습니다. 따옴표 붙인 한 줄을 프롬프트에 쓰고, 8 초로 생성하고, 결과를 프레임 단위로 넘겨 보세요.

텍스트로 동영상 만들기면 한 문장에서 시작할 수 있습니다. 그 단어들이 매번 정확히 같아야 한다면, 직접 만든 정지 이미지를 들고 레퍼런스 이미지로 영상 만들기로 가서 이미지가 글자를 지게 하세요.

여기서 인용한 클립과 프롬프트, 레퍼런스 이미지는 awesome-minimax-h3-prompts (CC BY 4.0)의 것입니다. 네 편은 MiniMax 명의이고, 레모네이드 광고와 오리 영상은 같은 라이브러리의 커뮤니티 투고로 각각 Hemanth 와 Feyber 명의입니다. 오리 영상의 프롬프트는 라이브러리가 발췌만 싣고 있어 작성자의 원 게시물에서 전문을 인용했습니다. 위의 프레임 번호와 시간, 글자 높이, 문자열은 전부 파일에서 읽어 낸 값입니다.

편집팀

쓴 사람

편집팀

minimax-h3ai.video

MiniMax H3 AI Video Generator 에 게시. MiniMax H3 를 사용하는 독립 서드파티 인터페이스입니다.

글 전체