Генератор видео, часть 7: как я проверяю, что модель держит героя
Два человека выходят из пекарни. Один передаёт другому круассан, оба смеются. Я смотрю на это уже который раз и проверяю, не исчезли ли очки.
Так выглядит один из рабочих экспериментов в Vini Studio. Со стороны можно подумать, что я просто генерирую милые мультики. Мультики мне тоже нравятся. Но сейчас меня интересует вполне конкретная вещь: останется ли персонаж собой, когда картинка начнёт двигаться.
В пятой части я писал о референсах героев и предметов, а в шестой показывал, как из этого собирается студия. За такими изменениями есть менее заметная работа: придумать проверку, получить результат и разобраться, что он позволяет утверждать. Иногда приходится зачеркнуть собственное объяснение.
Мира, Бо и один круассан
Для опыта взял двух взрослых вымышленных героев. У Миры рыжая коса, круглые очки и жёлтый плащ. Бо ниже ростом, с бородой, в красной шапке и зелёном свитере. Их трудно перепутать даже на небольшом превью.

Мира. На одном листе собраны ракурсы и приметы, по которым я узнаю её в следующих кадрах.

Бо. Оранжевые кеды удобны ещё и для проверки: их хорошо видно в общем плане.
Сюжет нарочно простой. Мне нужно увидеть, как герои идут рядом и передают предмет. Если сразу отправить их спасать галактику, будет сложнее понять, в какой момент всё сломалось.
При этом даже у такой сцены хватает условий. В кадре должны остаться именно эти двое. Круассан должен перейти из одной руки в другую. Внешность нужно сохранить в движении, а не только на первом красивом кадре.
Один из результатов Gemini Omni Flash. Смотрите на героев во время движения и передачи круассана. Надписи на пекарне тоже стоит заметить: к ним ещё вернёмся.
Сначала решаю, что именно проверяю
«Модель хорошо делает видео» — слишком широкое утверждение для рабочего решения. Мне нужен вопрос, на который можно ответить, посмотрев результат.
Поэтому я разделил задачи. В одном опыте герои должны появиться в новой сцене по своим изображениям. В другом нужно заменить персонажа в готовом видео, сохранив происходящее вокруг. Отдельно проверил сборку первого кадра: ошибка на этом этапе может уйти дальше в ролик.
Это разные проверки. Хороший стартовый кадр ещё не показывает, что будет с лицом при повороте головы. А успешная замена человека в готовом видео сама по себе ничего не говорит о том, как модель придумает движение с нуля.

Исходный ролик для проверки замены: по улице идёт манекен. Кадры расположены по времени слева направо.

Результат Kling O3: вместо манекена идёт Мира. Теперь можно отдельно сравнить её внешность и то, насколько сохранились улица и движение. В этом прогоне замена получилась: улица узнаваема, Мира идёт к камере по ходу исходного ролика.
У сравнения есть ещё одна тонкость: одинаковая задача не всегда означает одинаковый запрос. Разные модели по-разному принимают изображения. Я проверял и текущую сборку студии, и варианты по документации производителей. Если отличаются сразу несколько условий, такой опыт помогает проверить весь способ работы, но не позволяет приписать результат одной удачной формулировке.
Что получилось у разных моделей
Вот несколько наблюдений из этих прогонов. На одной сцене хорошо видно, как узнаваемость героя и выполнение задания могут разойтись.
Grok и Gemini: герои узнаются
Grok Imagine 1.5 сохранил Миру и Бо: оба узнаются с первого кадра, а листы с ракурсами не превратились в часть декораций. Для меня это уже полезный результат. Можно узнать косу Миры, очки, одежду Бо и при этом смотреть на обычную сцену у пекарни.

Grok Imagine 1.5. Круассан переходит к Мире, герои узнаваемы по ходу сцены. Вывеску модель тоже нарисовала — этот результат не выполнил все условия задания.
У Gemini Omni Flash в ролике выше тоже получилась передача круассана. Мне нравится, что здесь можно проверить действие целиком: предмет был у Бо, оказался у Миры, оба отреагировали. Но надписи на пекарне появились и в этом варианте. По сохранению героев оба примера удачные, а требование к тексту на экране всё равно пришлось отмечать отдельно.
Wan и HappyHorse: кто попал в кадр
В одном из вариантов Wan 3.0 Мира и Бо остались узнаваемыми, но к концу камера приблизилась настолько, что перестала вмещать их целиком. Смотришь на лица — всё знакомое. Смотришь на постановку — она уже изменилась. Если присмотреться, Бо в этих кадрах ещё и выглядит выше Миры, хотя в исходных референсах он ниже.
Wan 3.0, один из вариантов опыта. Посмотрите на последние секунды: Мира и Бо узнаваемы, но камера оставляет за краем кадра всё больше их фигур.
У HappyHorse 1.1 другая небольшая вольность: в одном ролике Бо сначала частично скрыт дверью, в другом Мира задерживается за дверью. Для обычной сцены выход по очереди вполне естественен. Но в моём задании оба должны были быть видны с самого начала. Такая ошибка легко теряется за приятной анимацией.
Seedance: ролик ещё не начался, а проверка уже закончилась
Seedance 2.0 Fast и 2.5 отклонили лист Миры: фильтр сообщил, что на изображении может быть реальный человек. При этом Мира вымышленная, а лист Бо проверку прошёл. Обидно: я собирался смотреть, как героиня двигается, и даже до этого не дошёл.
В других вариантах входных изображений обе модели дали ролики с узнаваемыми героями. Поэтому отказ я записываю отдельно от качества генерации. Он показывает проблему с приёмом конкретного материала; про движение в несуществующем ролике судить нечего.
Узнать героя недостаточно
В первых результатах было много приятного: персонажи узнаваемы, одежда похожа, сцена выглядит живой. Тут легко поставить галочку и пойти дальше.
Но вот отдельный результат сборки первого кадра на Nano Banana 2:

Nano Banana 2. Герои на месте. Надписи тоже, хотя в задании их просили не рисовать. Узнаваемость персонажей и выполнение ограничений здесь дали разные результаты.
Мне самому нравится эта картинка. Именно поэтому полезно заранее записать, что я собираюсь проверять. Иначе после генерации очень легко решить, что вывески даже украшают сцену, и незаметно поменять критерий под понравившийся результат.
А вот первый кадр из другого прогона, на GPT Image 2.5:

GPT Image 2.5. Герои расположились по-другому: Бо слева, Мира справа. В этом варианте задания стороны не задавались, поэтому такую перестановку я не считаю ошибкой.
Эта пара мне нравится ещё и как проверка собственной оценки. Надпись, которую запретили, — нарушение. Положение персонажа, которое я только представлял себе, но не указал, модель угадывать не обязана. Если смешать эти вещи, сравнение быстро превращается в конкурс совпадений с моей картинкой в голове.
У исследователей похожее разделение есть в VBench: неизменность внешности героя, плавность и интенсивность движения оцениваются отдельно. Мои примеры не проходили этот бенчмарк; здесь мне полезна сама постановка задачи.
Есть и обратная ловушка. Можно так увлечься сохранением внешности, что перестать замечать слабое движение. В работе ConsistI2V авторы отмечают, что их метод иногда даёт небольшую амплитуду движения. Это ограничение конкретного метода, но хороший повод смотреть на действие, когда проверяешь, остаётся ли герой собой. Для моей сцены мало сохранить очки Миры. Круассан всё-таки должен сменить владельца.
Самая полезная часть — когда гипотеза не сходится
На аккуратной сцене с Мирой и Бо многое работало. А в рабочем проекте раньше появлялись совсем другие результаты: изображения-референсы превращались во вставки внутри ролика, возникали лишние персонажи. Возник соблазн списать это на случайную неудачную генерацию.
Я попробовал воспроизвести сбой. На тестовых героях отдельные изменения условий его не вернули. Зато при повторе рабочего запроса с его исходными материалами характерные ошибки появились снова. Условия совпадали не полностью: в одной из проверок использовалось другое разрешение. Но теперь у меня был пример, на котором можно проверять объяснения.
Первое объяснение выглядело убедительно: проблема в исходных изображениях. Дальше я изменил их подачу и получил неприятный ответ. Часть дефектов исчезла, другие остались или сменились новыми. Рано я решил, что разобрался.
Последующие опыты показали, что нужно учитывать и описание сцены, и визуальные входы. Их сочетание оказалось важнее, чем предполагала первая версия объяснения. Для меня здесь важен момент, когда следующая проверка заставила пересмотреть вывод.
Так я и понимаю научный подход в своей работе. Сначала есть наблюдение и предполагаемая причина. Потом нужно придумать опыт, в котором это объяснение может не сработать, и действительно его провести. Если результат неудобный, он всё равно остаётся в записях.
Стараюсь менять по одному условию там, где это возможно. При смене нескольких условий сразу отмечаю это отдельно. И даже аккуратное сравнение единичных генераций считаю подсказкой для следующего опыта: случайность никуда не исчезает.
Чего эта проверка пока не доказывает
В основной матрице был один прогон на сочетание условий. Этого хватило, чтобы увидеть рабочие варианты и найти проблемы для дальнейшей проверки. Частоту ошибок так не измерить.
Если персонаж сохранился один раз, я знаю, что такой результат получился. Я ещё не знаю, сколько попыток понадобится в следующем проекте. Даже повторившийся сбой не даёт права объявить модель непригодной для всех сцен.
К тому же основная проверка здесь на стилизованных взрослых героях и коротких сценах. Часть вариантов осталась без запуска. Выводы о длинном эпизоде или другом визуальном стиле потребуют своих примеров и повторов.
Для следующего этапа мне нужны серии прогонов на нескольких сценах. Хочется понять, как часто приходится переделывать результат и какие ошибки возвращаются после изменений. Картинки в этой статье показывают, что получилось в отдельных опытах; оценку надёжности ещё предстоит собрать.
Что из этого попадает в студию
Для разработки такая проверка уже полезна. После неё понятнее, где искать проблему и какой пример взять, чтобы проверить будущую правку. Иногда выясняется, что нужно точнее описать задачу. Иногда приходится разбираться, как студия передала материалы модели. Переключатель на другую модель сам по себе этот вопрос не снимает.
В первой части цикла я похожим образом разбирался со сценаристом. Сейчас вместо текста передо мной герои с круассаном, но привычка та же: сохранить вход и результат, чтобы потом можно было вернуться к собственному выводу и проверить его.
Мне нравится, что эта работа оставляет после себя ещё и такие картинки. Бо можно разглядывать просто потому, что он симпатичный. А потом включить ролик ещё раз и заметить ошибку, которую пропустил за первым впечатлением.