Prompt craft

Текст в ИИ-видео не с ошибкой — вы поймали его в движении

Шесть клипов покадрово: все 22 строки, названные в промпте, написаны верно. Решает всё тот текст, который никто не назвал.

13 мин чтенияРедакцияРедакция
Текст в ИИ-видео не с ошибкой — вы поймали его в движении

Стандартный совет про текст в ИИ-видео — не генерировать его вовсе. Сделайте клип без надписей, заберите его в монтажку, наберите шрифт сами. На первой странице поиска это в том или ином виде пишут все, и причина у всех одна: видеомодели рисуют буквы как фактуру, а не набирают их посимвольно, поэтому надпись плывёт и от кадра к кадру выходит с ошибками.

Я пошёл проверять это на MiniMax H3 и нашёл то, что этот совет упускает.

Я взял шесть опубликованных примеров и прошёл их покадрово. Вместе они несут 22 надписи, которые промпт назвал поимённо. Как только каждая перестаёт двигаться, все 22 написаны верно — включая меню игры, список снаряжения и двухстрочную титульную карточку с подзаголовком.

В тех же клипах полно текста, который является полной абракадаброй, — а в двух из них есть надписи, которых никто не просил, которые модель придумала сама и которые она безошибочно писала каждый раз, когда они появлялись. Разобраться почему стоит дороже, чем сам заголовок: это говорит вам, какие из ваших собственных кадров в безопасности.

Как на самом деле выглядит «сломанный» кадр MiniMax H3

Вот одна панель меню из того же клипа, с разницей в полсекунды. Верхний кадр на 2,458 с, нижний на 2,958 с:

Одна и та же панель снаряжения дважды: на 2,458 секунды вторая строка — смазанный дубль строки PHANTOM GRIP, на 2,958 секунды она чисто читается как CHRONOS CLAW

Верхний кадр — это тот самый скриншот, который выкладывают с подписью о том, что нейросети не умеют писать. Вторая строка там — смазанный полусформированный дубль строки над ней. Выглядит сломанным, потому что оно и есть сломанное — примерно четыре десятых секунды, пока панель дописывает вторую строку.

Дальше она разрешается в CHRONOS CLAW и такой и остаётся.

Я посчитал кадры. Панель приходит на 56-м кадре и уходит на 103-м. Вторая строка нечитаема с 56-го по 65-й и чиста начиная с 68-го. При 24 кадрах/с это окно в 0,4 секунды внутри двух секунд панели — примерно пятая часть её экранного времени выглядит орфографическим провалом и им не является.

Это важнее, чем звучит, потому что пятая часть — не настоящая вероятность попасть на такой кадр. Когда вы тянете плейхед, вы останавливаетесь там, где что-то происходит, а кадры, где что-то происходит, — ровно те, где шрифт ещё не устоялся. Перемотка смещена в сторону артефакта.

Поэтому первое правило процедурное, а не творческое. Оценивайте шрифт на кадре, где ничего не движется. А когда снимаете превью, снимайте его после того, как карточка зафиксировалась, — иначе вы сами выложите артефакт, и скриншотить будут вас.

Назовите строку — и MiniMax H3 её напишет

Теперь находка, которая меняет то, как вы пишете промпт.

Обе половины картинки ниже взяты из одного клипа, из одной генерации, с разницей в десять секунд:

Сверху: игровой интерфейс с надписями MINIMAX, RIGHT ARM EQUIPMENT, PHANTOM GRIP, CHRONOS CLAW — все резкие и верные. Снизу: киберпанк-улица, где каждая неоновая вывеска — нечитаемая абракадабра

Верхняя половина — чёткая. MINIMAX, RIGHT ARM EQUIPMENT, PHANTOM GRIP, CHRONOS CLAW — всё верно, на панелях, которые едут, под движущейся камерой.

Нижняя половина — улица, забитая неоновыми вывесками, и ни на одной из них нет ни одного слова. Та же модель, тот же клип, тот же seed, десятью секундами позже.

Промпт объясняет это целиком. Он называет десять строк, и вот что вернулось:

Строка, названная в промптеКак отрисовалась
START NEW GAMEверно
CONTINUEверно
SETTINGSверно
EXIT GAMEверно
MINIMAXверно
RIGHT ARM EQUIPMENTверно
PHANTOM GRIPверно
CHRONOS CLAWверно
ARMAMENT CUSTOMIZATIONверно
CONFIRM CONFIGверно

Десять из десяти. А для улицы промпт попросил киберпанк-город и ни слова не сказал о том, что должно быть написано на вывесках, — поэтому модель сделала единственное доступное ей и нарисовала фактуру в форме вывесок.

Это то же самое поведение, которое измерили конкурирующие руководства. Они просто ни разу не развели эти два случая. «Текст рисуется как фактура, а не как символы» — справедливое описание фона, для которого промпт не написал ни одной надписи. Это не описание строки, которую вы модели передали.

В том же клипе есть и третий случай. Промпт просит сетку, «отображающую компоненты кисти, предплечья, локтя, плеча». Он описывает компоненты и ни разу не называет строку-подпись — и сетка возвращается иконками, под которыми текста нет вообще. Не искажён. Отсутствует.

Пока правило выглядит так: «названный текст пишется, неназванный — нет». Я в это верил, пока не проверил рекламный клип, и оно неверно.

Неназванный текст, который вышел безупречным

Ещё два клипа. Ни один не называет тот текст, который вы сейчас прочитаете:

Сверху: четыре бутылки лимонада на ящике, на каждой этикетке чётко читается BRIGHTSIP. Снизу: фотореалистичная схема эргономичного кресла, боковые HUD-панели которой — нечитаемые смазы

Верхний кадр — реклама летнего напитка. Весь её промпт — одно предложение: велосипедист пересекает городок на холме, «открывает газированный лимонный напиток», комикс-графика. Никакого бренда. Никакого текста на этикетке. Вообще ничего в кавычках.

Модель придумала BRIGHTSIP, поставила его на бутылку и дальше написала верно на четырёх этикетках в одном кадре под четырьмя разными углами, потом ещё раз на главной бутылке девятью секундами позже и ещё раз на финальной карточке — где она заодно придумала и безошибочно написала слоган 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 — это 29–30 px высоты прописной в кадре 1280×720, ниже порога, — и THE MISSION WAS A LIE написано верно. START NEW GAME меряется в 42 px и тоже верно.

Самая маленькая верная строка, которую я нашёл, ещё меньше, и она на фотореалистичном клипе: Rasa Pro. — это 22 px прописной в кадре 1698×720, три процента высоты кадра, и она чистая. Её тоже никто не называл.

Мелкий текст действительно даётся тяжелее. Но на этой модели высота — не то, что предсказывает, выйдет ли строка написанной.

Как назвать строку, чтобы она отрисовалась

Конкретно — четыре вещи, и все они сняты с промптов, которые сработали:

  1. Поставьте её в кавычки, капслоком, ровно в том виде, в каком хотите. Работает форма Cursor clicks "CONTINUE". Описание кнопки как «кнопки продолжения» даёт модели форму для закрашивания, а не слово для написания.
  2. Скажите, где она стоит. «Right side displays game menu UI», «Top left displays player profile». Текст с позицией — это объект в сцене; текст без позиции — украшение.
  3. Режиссируйте шрифт отдельно от слов. Трейлерный промпт MiniMax тратит 90 слов на одну лишь подачу: межбуквенное расстояние, свечение, «шрифт не чисто белый», как надпись входит в кадр. Ни одно из этих слов не называет строку, и всё вместе делает так, что названные строки выглядят отрежиссированными, а не набранными.
  4. Назовите язык, даже когда не называете слов. «All Bahasa Indonesia text must be spelled and rendered correctly» — это вся текстовая инструкция в ролике с уткой, и каждая строка вернулась на индонезийском. Без неё вы получаете то, что подразумевает сцена, — так английский бриф и заканчивается китайской финальной карточкой.

И следствие, которое как раз экономит деньги: неназванная вывеска никогда не нейтральна. Что бы на ней ни было написано, это кто-то решил, и если не вы, то модель — либо в виде фактуры, которую вам придётся обрезать, либо в виде названия бренда, с которым вам теперь жить.

Где отрисовка текста в MiniMax H3 всё-таки ломается

Три честных предела, и все три видны на клипах выше.

Вёрстка — это не орфография. Посмотрите ещё раз на верхнюю половину сравнительной картинки: CHRONOS CLAW появляется дважды, на двух соседних строках. Каждая буква верна, а список неверен. Модель — надёжный наборщик и ненадёжный интерфейсный дизайнер, и это разные задачи.

Реквизит остаётся абракадаброй, и вычерпать это называнием получится не до конца. Вы можете назвать три вывески, которые важны. Сорок вывесок вы назвать не можете, а плотной городской улице нужно сорок.

Есть ровно одна клетка, которую я заполнить не могу: фотореалистичный шрифт на изогнутой поверхности. В игре две переменные, и развести их стоит, потому что большинство советов по этой теме схлопывают их в одну.

Шрифт на плоскостиШрифт, обёрнутый по изогнутой поверхности
Рисованное / комиксверно — трейлерные карточки, игровой интерфейсверно — BRIGHTSIP, четыре угла на стекле
Фотореализмверно — ролик с уткойсвидетельств нет ни за, ни против

Ролик с уткой отменяет версию «дело в фотореализме». BRIGHTSIP отменяет версию «дело в кривизне». Ни один из них не отменяет их сочетание, и есть физическая причина ждать, что тяжёлым окажется именно оно: рисованная этикетка — это форма, которую модель наносит на стекло, а фотореалистичную приходится перепроецировать и заново освещать под каждым новым углом.

Я пошёл искать такой случай, и в библиотеке его нет. Из 102 записей единственный фотореалистичный клип, чей промпт действительно просит «ultra-slow rotating close-ups», — это утка, а у утки нет этикетки. Авторы, работающие с фотореалистичными бутылками, сообщают, что этикетка ломается с первого кадра и не выживает ни при генерации из фотографии, ни при генерации по референсному изображению. Я этого не воспроизводил и не собираюсь утверждать это с чужого скриншота — но именно здесь правилу логично закончиться, и это первое, что я бы проверил, будь кадр моим.

Это отобранные примеры. Четыре клипа из шести — собственная витрина MiniMax, два — работы сообщества из той же библиотеки, так что они представляют удачный день, а не средний, и 22 из 22 — не та цифра, которую стоит ждать от повторения. Отбор переживает закономерность, а не счёт, — и переживает отчасти потому, что абракадабра лежит здесь же, в тех же отобранных клипах. Вендор, черри-пикающий результаты, эту улицу бы не выпустил.

Для той единственной строки, которая обязана быть верной всегда

Названные строки отрисовываются верно — и остаются генерацией. Верно на этом дубле не значит верно на следующем, и если строка — это ваш бренд, название продукта или настоящий заголовок, то «обычно верно» спецификацией не является.

Есть маршрут, убирающий бросок кубика: положите слова в референсное изображение. Тогда у модели есть готовый блок для совпадения, а не буквы для рисования, — она вообще не отрисовывает шрифт, и варьироваться нечему. В трейлерном примере MiniMax единственная нарисованная двухстрочная титульная карточка сделана именно так: это входное изображение, оно на экране в начале и ещё раз в конце.

Полный разбор — в статье как сделать трейлер на MiniMax H3, там же лежит тайминг по событиям.

Итого разделение труда такое:

Назвать в промптеПоложить в референсное изображение
Для чего лучшеподписи меню, титры-перебивки, важные вывескибренд, название продукта, настоящий заголовок
Верно сейчасда, 22 из 22 на этих клипахда, для шрифта, остающегося на плоскости
Верно на следующем дублеэто генерация, значит перебрасываетсяидентично
Текст и языкязык фиксируйте отдельно, иначе получите то, что подразумевает сценачто на картинке, то и будет
Чего стоитничегоодин референсный слот

У правой колонки есть граница, и она та же, что и выше. Титульная карточка — это плоскость, которую модель удерживает. Этикетка, обёрнутая вокруг вращающейся бутылки, — поверхность, которую ей приходится перерисовывать под каждым новым углом, и передача референса эту перерисовку не убирает. Считайте маршрут через референсное изображение решённым для плашек и недоказанным для всего изогнутого.

Как проверить свой клип примерно за минуту

Не судите по плееру. Разложите весь клип разом, а потом вернитесь в полном разрешении к тому, что выглядит неправильно:

# примерно каждый второй кадр, одной контролькой
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 — независимом стороннем интерфейсе к модели MiniMax H3.

Все статьи