Sequential Consistency через промпт-архитектуру
Sequential Consistency через промпт-архитектуру
Удержание когерентности на multi-shot- и multi-scene-генерации без обучения
Автор: Alex Nix Статус: Рабочий черновик — for public release
Abstract
Каноничный ответ на «как мне держать персонажа неизменным через тридцать шотов видео» — это обучить модель на нём. LoRA, DreamBooth, textual inversion, full fine-tune. Они работают и они дорогие. Под один продакшн — тридцать шотов за неделю, один раз — обучение это overkill; оно меняет гибкость на консистентность по более высокой цене, чем нужно.
Эта статья описывает четыре композируемые промпт-архитектуры, которые вместе удерживают консистентность через длинные последовательности генеративных выходов без обучения каких-либо per-subject-моделей. Четыре это:
- Reference-Inheritance — собственные предыдущие выходы пайплайна становятся входами для последующих стадий
- Series-Aware Anti-Repetition — предыдущие выходы прикрепляются как ограничение чего избегать, не что копировать
- Neighbor-Aware Prompts — каждый выход описывает, как он соединяется с соседними
- Reference Condensation — много типизированных референсов схлопывается в один связный референс для downstream-потребления
Четыре операционно независимы, но архитектурно композируются: каждая отвечает на свой вопрос о sequence-консистентности, и продакшн-пайплайн обычно использует все четыре. Эта статья описывает каждую, как они композируются, и когда тянуться к ним вместо обучения.
1. Задача sequential-consistency
Сгенерировать тридцать шотов персонажа в ролике. Тридцать отдельных генераций производят тридцать слегка разных персонажей — wardrobe drift, face drift, environment drift, lighting drift. По отдельности каждый шот выглядит нормально; как последовательность зритель регистрирует «это разные люди в разных сценах».
Два канонических решения:
Решение A — обучить модель на персонаже. Пятьсот референсов, LoRA-прогон, деплой. Надёжно; дорого; негибко (персонаж теперь залочен в той pose/wardrobe/lighting, что подразумевала тренировочная выборка). Избыточно для разового продакшна.
Решение B — прикрепить референсы к каждой генерации и надеяться. Дёшево; хрупко. Поведение генератора с прикреплёнными референсами непоследовательно. Silent-reference-режимы отказа изобилуют. Консистентность улучшается, но не приземляется.
Эта статья описывает Решение C — промпт-архитектуру, накладывающую консистентность структурно, без обучения. Механизмы ниже работают, потому что генераторы уже принимают reference-conditioning; паттерн — про то, как референсы прикреплены и что текст промпта про них говорит.
2. Графовая модель
До четырёх паттернов — назвать граф, в котором живёт последовательность.
Продакшн — это не плоский список из тридцати генераций. Это лес из линейных цепочек, сгруппированных по сценам:
сцена 1: 1A → 1B → 1C → 1D (линейно внутри сцены)
сцена 2: 2A → 2B → 2C (линейно, параллельно сцене 1)
сцена 3: 3A → 3B → 3C → 3D → 3E
- Внутри сцены: шоты — линейная цепочка. Шот 1B зависит от выхода 1A; 1C — от 1B.
- Между сценами: зависимости нет. Сцены 2 и 3 рендерятся независимо.
Эта форма не случайная деталь имплементации — это архитектура, делающая паттерны ниже возможными. Консистентность обеспечивается внутри цепочки; cross-scene-консистентность обрабатывается внешними референсами (общий character-референс, общий style-референс), а не цепной inheritance.
3. Паттерн 1 — Reference-Inheritance
Собственные предыдущие выходы пайплайна становятся входами последующих стадий.
Рендер шота 1B:
текст: описывает только subject action, location, camera (что варьируется)
vision refs: внешний moodboard + storyboard_1B + [rendered_1A.jpg]
выход: rendered_1B.jpg
Render-джоб шота 1B прикрепляет отрисованную картинку шота 1A как vision-референс. Identity персонажа, гардероб, состояние окружения — всё несётся визуально через 1A-рендер, не переописывается в тексте 1B.
Почему работает
- Генераторы принимают vision-conditioning нативно. Новая модельная инфраструктура не нужна.
- Плотный сигнал в референсе. Текст не может специфицировать «точное расположение пуговиц рубашки»; картинка может.
- Линейные цепочки избегают compound-дрейфа. Каждый шот должен совпасть только с непосредственным предшественником; ошибки не накапливаются экспоненциально на короткой цепи (типично 3–6 шотов).
Что это требует от текста промпта
Намеренное умолчание. Если текст пытается описать identity/гардероб в дополнение к vision-наследованию от предыдущего рендера, два канала конкурируют. Текст должен описывать только то, что меняется — действие, локацию (если варьируется), камеру. Identity — vision-carried.
Ограничения
- Только короткие цепи. Drift накапливается; за пределами 6–8 шотов паттерн деградирует.
- Жёсткая зависимость от предшественника. Шот 1B не может рендериться до завершения 1A. Это накладывает строгий внутри-сценный порядок.
- Без cross-scene-inheritance. Сцена 2 не может наследовать от сцены 1 — слишком много шотов вмешивается, drift будет доминировать.
4. Паттерн 2 — Series-Aware Anti-Repetition
Предыдущие выходы прикреплены как ограничение «чего избегать».
Генерация шота 1B:
текст: описание текущего шота
vision refs: предыдущие шоты в серии (1A)
системный промпт: "Analyse the prior frames. Identify their camera angles
and framing. For this shot, intentionally choose a
DIFFERENT angle while keeping the same style."
Референс — негативный якорь. LLM читает его, чтобы идентифицировать, что уже сделано, и выбирает что-то другое по поимённым измерениям.
Почему работает
- LLM-ы по умолчанию имитируют прикреплённые референсы. Явное инвертирование дефолта поимённой инструкцией производит variety.
- Раздельные vary-vs-constant-измерения. Паттерн требует объявить, что должно варьироваться (угол камеры, кадрирование), и что должно держаться (стиль, identity персонажа). Без этого разделения «произведи что-то другое» дрейфует по всему.
Каноничный случай: генерация storyboard
Storyboard'ы внутри сцены делят визуальный стиль (толщина линии, штриховка, красные акценты — см. концепт style-prefix-architecture), но должны варьироваться в углу камеры и кадрировании. LLM читает предыдущие storyboard-кадры, чтобы идентифицировать уже использованные углы, затем намеренно выбирает неиспользованные.
Отношение к Reference-Inheritance
Эти два паттерна тянут в противоположных направлениях. Inheritance тянет выходы вместе (держать identity константой); anti-repetition отталкивает их (варьировать камеру). Они композируются только когда измерения чисто разделены: наследовать identity, варьировать камеру. Путаница — наследование камеры или варьирование identity — проваливает оба.
5. Паттерн 3 — Neighbor-Aware Prompts
Каждый выход описывает, как он соединяется с соседними.
Motion-промпт шота 1A:
"Camera pushes in. Subject's gaze rotates from off-frame to the camera.
Motion lands on a pose that sets up 1B's opening action."
Motion-промпт шота 1B:
"Subject, now making eye contact (continuing the gaze landed in 1A),
begins to speak."
Промпт для выхода n явно ссылается на состояние из n−1 и setup для n+1. Генератор производит motion, которая стыкуется с соседями, а не с воображаемыми другими шотами.
Где это важно
- Сшивка видео-переходов. Когда два соседних шота должны соединиться бесшовно (непрерывный жест, hand-off нарративного beat'а), motion между ними генератор-driven, и промпт должен специфицировать соединение.
- Hand-off между нарративными сценами. Промпт генерации каждой сцены наследует нерешённые нити и оставляет нити для следующей.
- Multi-turn-генерация диалога. Промпт каждого хода знает, что сказал предыдущий говорящий, и что ожидает следующий.
Композиция с first/last-frame-ограничениями
Паттерн сильнее всего в паре с жёстким визуальным ограничением: start frame = рендер шота n, end frame = рендер шота n+1. Генератор должен произвести motion, которая начинается в старте и приземляется в конце; промпт описывает как motion соединяет, а не что на эндпоинтах.
Режимы отказа
- Чрезмерное наследование. Контент-внутри-выхода загрязнён контентом соседа. Контрмера: изолировать «точки соединения по краям» от «контента внутри».
- Отсутствующие соседи. Первые и последние выходы последовательности не имеют предшественника или преемника. Контрмера: fallback-правила — «opening shot; begin fresh; no predecessor state».
- Backfill-стоимость. Если шот n+1 генерируется после шота n, шот n не мог знать про него. Контрмера: two-pass-планирование — сначала спланировать все шоты абстрактно, затем уточнить каждый с neighbor-awareness.
6. Паттерн 4 — Reference Condensation
Много типизированных референсов → один связный single-image-референс.
Per-scene set референсов:
location_ref.jpg, character_ref.jpg, style_ref.jpg,
prop_ref.jpg, color_ref.jpg, camera_ref.jpg
↓ LLM + generator condensation step
↓
Одна композитная reference-картинка (типично 16:9 cinematic moodboard)
↓
Downstream-стадии прикрепляют ТОЛЬКО композит.
Per-scene-референсы конденсируются в один anchor, которым последующие стадии генерации могут пользоваться эффективно. Оригиналы сохраняются для дебага, но больше не прикрепляются напрямую.
Зачем конденсировать
У генераторов конечный attention-бюджет для reference-conditioning. Прикрепление больше ~3 референсов даёт убывающие, а потом отрицательные возвраты — модель пытается удовлетворить все референсы и производит размытый, некогерентный выход.
Конденсация конвертирует many-reference-задачу в one-reference-задачу ценой одного дополнительного generation-шага. Композит несёт дистиллированное намерение оригиналов в форме, которую генератор на следующей стадии реально может использовать.
Как работает condenser-стадия
- Читает каждый референс через vision
- Читает типизированную роль каждого референса (refType: location, character, style, prop, color, camera)
- Применяет объявленный порядок разрешения, когда референсы расходятся (типично: environment → style → color → subject)
- Эмитит single-reference-промпт (сам по себе deliberate-omission-промпт), описывающий целевой композит
- Передаёт промпт генератору для производства композита
Выход — сгенерированная картинка, которая сама становится референсом следующей стадии. Рекурсивное использование генерации для построения референсов.
Роль в общем sequential-consistency-стеке
- Enables deliberate omission downstream. Когда композит надёжно несёт стиль / цвет / свет, текст промпта последующие стадии может уверенно умалчивать эти измерения.
- Стабильный per-scene anchor. Сцены, охватывающие несколько шотов, все наследуют от одного композита; стилевая консистентность между шотами структурная.
- Дебагопригодно. Плохой выход трассируется либо к композиту (осмотрите его), либо к downstream-текст-промпту (осмотрите его).
7. Как четыре паттерна композируются
Продакшн-пайплайн обычно использует все четыре в конкретной аранжировке:
Per-scene setup (один раз на сцену):
- типизированные референсы: location, character, style, color, camera
- Паттерн 4 (Condensation): → композитный moodboard image
Рендер шотов сцены (линейно внутри сцены, все четыре активны):
Шот 1A:
- выход паттерна 4 прикреплён как vision (style/colour/lighting)
- Паттерн 2 (Anti-Repetition): предыдущие шоты (нет — opening)
- Паттерн 1 (Inheritance): предыдущий шот (нет)
- Текст: намеренно минимальный — только subject/location/camera
Шот 1B:
- выход паттерна 4 прикреплён как vision
- Паттерн 2: предыдущий шот 1A рассмотрен под angle variety
- Паттерн 1: rendered_1A.jpg прикреплён как continuity-референс
- Паттерн 3 (Neighbor-Aware): текст отмечает связь с 1A, setup под 1C
- Текст: минимальный, neighbor-aware
Шот 1C:
- все четыре активны, ссылаясь на 1B
...
Порядок имеет значение: condensation — это setup; остальные три активны во время внутри-сценного рендера. Anti-repetition и inheritance тянут в противоположные стороны и должны быть чисто разделены по измерениям. Neighbor-awareness работает в точках соединения между шотами.
Ни один паттерн в одиночку не достаточен. Inheritance без condensation производит over-referenced-кашу. Anti-repetition без separation-of-dimensions производит style drift. Neighbor-awareness без inheritance производит fine-переходы-между-несовместимыми-субъектами. Все четыре вместе производят консистентный, директабельный sequential-выход.
8. Когда тянуться к этим паттернам vs. обучение
| Стек паттернов | Обучение (LoRA / fine-tune) | |---|---| | Быстро поставить | Дни на подготовку + тренинг | | Per-project | Per-subject (переиспользуемое) | | Гибко — субъект может делать всё, что подсказывают референсы | Негибко — субъект залочен в тренировочное распределение | | Ограниченная within-chain длина (5–8 шотов до drift'а) | Без ограничения длины цепи | | Cross-scene-консистентность через внешние референсы | Cross-scene-консистентность встроена | | Стоимость: маргинальные generator-reference-токены | Стоимость: upfront-тренинг + inference |
Правило большого пальца:
- Один продакшн (любой длины) с одним субъектом → стек паттернов
- Много продакшнов с повторяющимся субъектом → обучить LoRA
- Продакшны, комбинирующие повторяющиеся субъекты + новые вариации → оба: LoRA даёт cross-scene-anchoring, стек паттернов обрабатывает within-scene-drift
9. Режимы отказа стека
- Накопление drift в длинных цепях. Reference-Inheritance надёжен только на коротких цепях. Длинные сцены (8+ шотов) должны разбиваться на под-серии с external-reference-refresh'ами на границах.
- Путаница измерений между inheritance и anti-repetition. Если два паттерна применены без separation-of-dimensions, оба деградируют. Явное объявление vary-vs-constant — несущее.
- Composite drift. Композитный референс от condensation сам по себе сгенерирован; если генератор производит стилистически распознаваемый композит (сильная непреднамеренная эстетика), последующие стадии переподражают. Контрмера: системный промпт condensation должен производить нейтральные композиты, которые якорят измерения, не накладывая новый стиль.
- Stale composite. Пользователь обновляет референс; композит не перегенерирован; downstream наследует stale. Контрмера: инвалидировать композит, когда любой из его источников меняется.
- Neighbor-awareness без hard-constraint-эндпоинтов. Описание того, как шот 1A соединяется с 1B, менее полезно, когда генератор не видит реальный эндпоинт 1B. Контрмера: парить с first/last-frame-image-ограничениями там, где генератор их поддерживает.
10. Обобщения за пределы image/video
Стек применим к любой sequential-генерации, где консистентность важна, а per-subject-обучение нецелесообразно:
- Long-form-нарративная генерация. Каждая глава наследует от предыдущей (Паттерн 1), варьируется от неё по поимённым измерениям (Паттерн 2), стыкуется на краях (Паттерн 3). Описания персонажей конденсируются в persona-anchor (Паттерн 4).
- Code-base-consistent code generation. Каждая функция наследует стиль и паттерны от ранее сгенерированных «сиблингов»; конденсированный «style anchor» захватывает голос code-base'а.
- Серия эпизодов подкаста. Каждый эпизод наследует от предыдущего; варьируется в теме, удерживая тон; стыкуется на cold-open и sign-off.
- Conversational-агент с длинным контекстом. Каждый ход наследует от последних нескольких ходов (Паттерн 1), варьируется по теме по user-intent (Паттерн 2), чисто сигналит переходы (Паттерн 3) и конденсирует длинные истории в persona/context-anchor (Паттерн 4).
Форма та же: within-chain линейная консистентность, between-chain параллелизм, явное разделение измерений, condensation для attention-экономии.
11. Открытые исследовательские вопросы
- Эмпирическая валидация. Количественное сравнение pattern-stack vs. LoRA-trained vs. naïve-генерация на стандартном consistency-бенчмарке. Сильно нужно; поле сейчас аргументирует анекдотами.
- Максимальная длина цепи на паттерн. Reference-Inheritance наблюдается деградирующим на 5–8 шотах; какие аналогичные лимиты для neighbor-awareness в длинных нарративах? Для anti-repetition в длинных сериях?
- Автоматический тюнинг композиции. Учитывая новую задачу, как решить, какие из четырёх паттернов активировать и как сконфигурировать? Сейчас вручную; pipeline-designer-ассистент правдоподобен.
- Кросс-модальный перенос. Передаются ли паттерны между image/video и text/code? Неформально да; формально не изучено.
- Pattern-interaction-режимы отказа. Когда inheritance и anti-repetition конфликтуют? Когда neighbor-awareness перебивает inheritance? «Исчисление» взаимодействий паттернов было бы полезным.
- Метрики качества condensation. Как измерить, захватывает ли конденсированный референс намерение исходного набора? Возможно CLIP-style-similarity с role-weighted attention; не проверено.
12. Заключение
Sequential-consistency в генеративном AI не требует обучения. Она требует другого — аккуратной композиции четырёх промпт-архитектур, каждая адресующая конкретную под-задачу sequence-когерентности: перенос состояния вперёд (Reference-Inheritance), варьирование по явным измерениям, удерживая остальное константой (Anti-Repetition), соединение выходов на их границах (Neighbor-Awareness) и снижение attention-нагрузки от многих референсов к одному (Condensation).
Четыре композируются в стек, производящий директабельный, консистентный sequential-выход из off-the-shelf-генераторов. Это не silver bullet — длинные цепи дрейфуют, композиты могут устареть, взаимодействия паттернов требуют аккуратности. Но для общего случая (один продакшн, один или несколько субъектов, разумные длины цепей, желание гибкости) стек — наименьшее обязательство, которое надёжно работает.
Обучение остаётся правильным ответом для повторяющихся субъектов и cross-scene-консистентности. Стек — правильный ответ для within-production-когерентности. Большинство реальных пайплайнов используют и то, и другое.
Цитирование
Nix, A. (2026). Sequential Consistency via Prompt Architecture — Holding Coherence Across Multi-Shot and Multi-Scene Generative AI Without Training. Working paper.