Персонажи-зависимости: как не развалить ИИ-сериал на тридцати сценах
Тридцать сцен одного эпизода — это уже не демо, а производство, и на нём ломается всё, что прощала одна удачная генерация: шрам над левой бровью из третьей сцены к четырнадцатой исчезает, пальто между кафе и улицей меняет цвет, письмо, о котором говорит героиня, в кадре так и не появляется. Рабочий выход — перестать описывать героя словами в каждом отдельном запросе и превратить его в версионируемый ассет-зависимость: портрет, сцена и реквизит генерируются один раз, утверждаются человеком, получают версию, и каждая сцена ссылается на конкретную версию. А перед каждым платным вызовом видеомодели прогоняется дешёвая детерминированная проверка по правилам, без обращения к модели: если в реплике упомянут шрам, а в описании сцены его нет, сцена блокируется до списания денег. Ниже — разбор этой схемы на семи этапах, с архитектурой и честными ограничениями.
Основа — практический разбор автора открытой студии OpenMontage, опубликованный 5 ноября 2026 года на dev.to: Keeping AI characters consistent across a 30-shot short drama. Дальше — пересказ с моими комментариями и цифрами из статистики нашего сайта.
Почему одна и та же героиня превращается в трёх разных женщин
Причин ровно пять, и все они технические, а не «модель плохая».
- Каждый вызов амнезийный: видеомодель не помнит предыдущую сцену, всё, что не передано заново, отдаётся на волю случая.
- Текст — слабое описание лица: «начало двадцатых, длинные тёмные волосы, шрам над левой бровью» подходит миллионам людей.
- Описания дрейфуют: когда языковая модель пишет тридцать описаний подряд, детали пересказываются, сокращаются, теряются.
- Сиды: тот же текст с другим сидом — другой человек.
- Устойчивость внутри одного клипа не равна устойчивости между клипами. Первое модели уже умеют, второе — ваша работа.
Отсюда неприятный вывод: чем длиннее серия, тем меньше смысла вылизывать отдельный кадр. Экономнее один раз договориться, что именно считается «той же героиней», и хранить это как данные, а не как абзац текста.

Что обычно советуют и во что это упирается
Стандартный набор решений известен, и у каждого своя цена.
- Референсные изображения. Утверждаем портрет и передаём его с каждой сценой. Просто, поддерживается везде, но детали всё равно уплывают при сильной смене ракурса, мимики или света.
- Дообучение адаптера под персонажа. Ограничение сильнее, зато нужно время на обучение, данные и доступ к самой модели.
- Адаптеры на основе референса. Изображение кодируется и подмешивается внутрь внимания, без обучения под каждого героя.
- Управление первым и последним кадром. Начало и конец клипа закрепляются, что помогает состыковать соседние сцены.
Все четыре решения делают одно и то же: дают модели что-то более устойчивое, чем текст. Но ни одно не отвечает на вопрос «а та ли это версия героя, на которой мы остановились», и ни одно не спасает от ошибки, которую видно ещё до генерации.
Семь этапов, у каждого — свой артефакт
Главная идея автора в том, что производство серии повторяет обычный съёмочный процесс, только каждый этап оставляет файл или запись в базе.
- Сценарий. Жанр, соотношение сторон, стиль, синопсис, тексты серий. Серия можно продолжить, переписать или зафиксировать.
- Персонажи. Референсные портреты, версионируемые: меняется причёска — растёт номер версии.
- Локации. Пространство и свет, концепт-кадр места.
- Реквизит. Ключевые предметы и материалы — то, о чём говорит герой и что должно быть видно.
- Раскадровка. Языковая модель разбивает серию на сцены, видеомодель генерирует каждую сцену с опорой на референсы ассетов.
- Голос. Озвучка реплик и закадрового текста.
- Монтаж. Таймлайн и выгрузка.
Ключевой момент — связи. Сцена не «описывает» героиню, она ссылается на ассет и его версию. Поменяли портрет — видно, какие сцены собраны на старой версии и что придётся перегенерировать. Откат и повторный прогон получают опору, которой у текстового описания не бывает. Наш собственный раздел генерации видео устроен похожим образом: одна и та же сцена может быть пересобрана заново, и это нормальная часть работы, а не авария.
Проверка, которая стоит ноль и спасает дорогую генерацию
Перед любым запросом к видеомодели в студии работает файл prompt_consistency.py — набор детерминированных правил, без единого дополнительного вызова модели. Правила простые и потому дешёвые:
- каждый персонаж, который говорит в диалоге, должен присутствовать в описании сцены;
- если в реплике упомянута видимая улика — шрам, кольцо, письмо, — она обязана оказаться в кадре;
- предметы, о которых диалог молчит, не должны перетягивать на себя сцену;
- каждая ссылка вида «собака с именем ассета» должна существовать в библиотеке ассетов.
Если в реплике есть шрам, а в описании сцены его нет, сцена блокируется до того, как за неё заплатят. Второй слой — порядок очереди: задания на статичные изображения, включая референсные портреты, идут раньше видеозаданий, чтобы плохой референс исправлялся первым, а не сжигал видеогенерации.
Архитектура: четыре части и никакой магии
Внутри — веб-интерфейс, сервер на Python и три хранилища, у каждого своя роль.
- Реляционная база. Сценарии, ассеты, сцены и версии лежат структурированными данными, поэтому любой этап можно откатить или перезапустить, не переделывая серию целиком.
- Очередь задач. Медиа-задания ждут в очереди и выполняются отдельным воркером, интерфейс только наблюдает за статусом по веб-сокету. Упала одна сцена — повторяется только она.
- Объектное хранилище. Референсы, клипы и готовые серии складываются туда, в базе остаются ссылки.
- Один YAML-файл описывает сам процесс: этапы, инструменты, подписи интерфейса. Переименовать этап — правка в одном месте, а не поиск строк по всему фронтенду.
Модели подключаются как сменные: текстовые — через любой совместимый интерфейс, изображения — можно отдать собственной сборке, если вы уже используете адаптеры под героев. Студия просто вызывает её и складывает результат.
Как это запустить
Разворачивается тремя командами: клонирование репозитория, копирование файла с примером настроек и подъём через compose. Дальше — локальный адрес и проверка здоровья по GET /api/health.
git clone https://github.com/charliewwdev/OpenMontage.git && cd OpenMontage
cp studio/.env.example .env
docker compose -f docker-compose.studio.yml up --buildВ compose уже входят интерфейс с сервером, медиа-воркер, база, очередь и объектное хранилище. Не входят: ключи к языковым моделям, ключи к платным генераторам изображений и видео (или своя сборка для картинок). Синтез речи по умолчанию работает без ключа. Перед публикацией наружу автор просит сменить учётные данные объектного хранилища по умолчанию и выключить демо-вход. Лицензия — AGPL-3.0: если вы отдаёте изменённую версию как сетевой сервис, исходники придётся открыть.
Сколько стоит ошибка: наши цифры
Смысл предварительной проверки виден только на деньгах. По нашей таблице себестоимости генераций за 6 октября — 5 ноября 2026 года средняя генерация видео обошлась в $0,442 по 2 146 запускам, а средняя генерация картинки — в $0,035 по 14 344 запускам. Разница в двенадцать с лишним раз, поэтому «сначала картинка, потом видео» — не стилистическое предпочтение, а экономия.
Разброс между видеомоделями ещё больше: 229 генераций Seedance 2.5 в том же окне стоили в среднем $2,137 за штуку, а 148 генераций Seedance 1.5 Pro — $0,074. Тридцать раз. Если в раскадровке тридцать сцен, то один неверный выбор модели на этапе черновика стоит дороже, чем весь остальной пайплайн.
Брак тоже считаем. По 299 завершённым генерациям Kling 3.0 за 27 июля — 25 октября успешных было 91%, по 2 991 генерации другой модели изображений — 93,3%, по 1 395 — 91,2% (агрегаты бенчмарка, считаются из продакшн-базы по терминальным статусам). Иначе говоря, каждая десятая сцена потребует повтора, и деньги за неудачу уже списаны. Подробнее про сами модели — в обзоре видеомоделей.
Чего эта схема не решает
Автор честно перечисляет края, и они важны, чтобы не ждать чуда.
- Референс — не серебряная пуля: при сильной смене ракурса, мимики или света детали всё равно плывут. Утверждение ассетов и предварительная проверка ловят многое, но не всё.
- Инвалидация грубая: после правки сценария система по статусам этапов понимает, что пересобирать, но отслеживания на уровне отдельных реплик пока нет.
- Флаги контроля качества шумят: иногда помечают годные клипы.
- Интерфейс в основном на китайском, встроенные голоса тоже; для другого языка нужен внешний синтез речи.
- Нужен свой сервер и свои ключи, а версия пока нулевая — ожидания лучше держать точными.
С чего начать, если серия нужна на этой неделе
Не с эпизода. Соберите три-пять сцен, утвердите портрет героя и один ключевой предмет, прогоните проверку и только потом запускайте остальное. Если после пятой сцены герой всё ещё один и тот же, схема работает; если нет — проблема в ассетах, а не в модели, и дальше будет только дороже.
И ещё одно: устойчивость между сценами — это то, что читатель замечает только тогда, когда её нет. Никто не похвалит вас за одинаковый шрам в четырнадцатой сцене, но именно он решает, досмотрят ли серию до конца.