3,583 papers
arXiv:2604.13452 71 15 апр. 2026 г. FREE

CANVAS: трёхшаговая система слежения за непрерывностью при создании длинных последовательностей

КЛЮЧЕВАЯ СУТЬ
Попросить модель «помни детали» — всё равно что сказать человеку с амнезией «не забывай». Механизма нет, только намерение. Метод CANVAS позволяет создавать длинные истории и серии изображений без дрейфа: персонаж не меняет пальто без причины, музей не перестраивается между сценами, украденный артефакт не появляется обратно на полке. Фишка: составь таблицу состояний персонажей, локаций и объектов ДО начала генерации — и передавай нужные строки в каждый запрос. Модель не должна ничего «помнить» — она читает план заново каждый раз. Это надёжнее любых инструкций типа «будь последовательным».
Адаптировать под запрос

TL;DR

CANVAS — техника, которая решает проблему «дрейфа» персонажей и деталей в длинных последовательностях. Переносит логику кинорежиссёра в промптинг: сначала составить «библию мира» для всех сцен сразу, потом генерировать каждую сцену, явно сверяясь с ней.

Главная боль при создании длинных историй, визуальных стори или серий изображений — дрейф деталей. Персонаж в первой сцене носит синее пальто, в пятой уже зелёное. Музей из первой сцены не похож на музей из седьмой. Артефакт, который украли в четвёртой сцене, снова стоит на полке в шестой. Это происходит потому, что модель держит контекст «в голове» по инерции и теряет детали — особенно если между сценами много текста или сцены не следуют сразу друг за другом.

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


🔬

Схема метода

ШАГ 1: Глобальное планирование (один запрос перед генерацией)
  → Таблица состояний персонажей по сценам (внешность, одежда)
  → Карта локаций (какие сцены в каком месте)
  → Таблица состояний объектов (присутствует / изменился / исчез)
  Все три шага — в одном запросе к LLM

ШАГ 2: Последовательная генерация с памятью (отдельный запрос на каждую сцену)
  → Для каждой сцены: извлечь из плана нужные состояния → передать в промпт
  → Если локация повторяется — приложить описание из предыдущей сцены в этой локации
  → Если локация новая — сгенерировать без якоря

ШАГ 3: QA-проверка (в конце каждого запроса или отдельно)
  → Контрольные вопросы: "Соответствует ли внешность персонажа плану?"
  → "Изменилось ли состояние объекта согласно плану?"
  → "Совпадает ли описание локации с предыдущим появлением?"

ШАГ 1 выполняется один раз. Шаги 2–3 повторяются для каждой сцены.


🚀

Пример применения

Задача: Вы делаете серию промптов для Midjourney — визуальную историю про детектива Гришу Ковалёва, который расследует кражу в московском музее. 8 сцен. В третьей сцене он меняет пальто на форму охранника. В пятой появляется снова в пальто. Артефакт в первых сценах стоит на витрине, в седьмой его уже нет.

Промпт (Шаг 1 — Планирование):

Я создаю визуальную историю из 8 сцен. 
Вот краткое описание каждой сцены:

Сцена 1: Гриша Ковалёв приходит в зал Оружейной палаты. 
  На витрине — золотая корона. Гриша в длинном сером пальто.
Сцена 2: Гриша разговаривает с директором в том же зале.
Сцена 3: Гриша надевает форму охранника, чтобы затаиться.
Сцена 4: Гриша в форме охранника ждёт у витрины ночью.
Сцена 5: Гриша видит вора — и снова в пальто (переоделся обратно).
Сцена 6: Погоня по коридорам музея.
Сцена 7: Гриша возвращается в зал — витрина пустая, корона украдена.
Сцена 8: Гриша стоит перед витриной — корона вернулась на место.

Создай три таблицы:

[ПЕРСОНАЖИ]
Для каждой сцены: имя персонажа → точное описание внешности и одежды в этой сцене.

[ЛОКАЦИИ]
Для каждой сцены: название локации → ключевые визуальные детали, которые должны 
оставаться неизменными при повторном появлении этой локации.

[ОБЪЕКТЫ]
Для каждой сцены: название объекта → статус (присутствует / изменился / отсутствует) 
+ точное визуальное описание в этом статусе.

Это будет мой «Continuity Plan» для всей истории.

Промпт (Шаг 2 — Генерация одной сцены):

Сейчас я генерирую промпт для Midjourney для Сцены 5.

Описание сцены: Гриша видит вора — и снова в пальто.

Из Continuity Plan:
- Гриша: [вставить строку из таблицы ПЕРСОНАЖИ → Сцена 5]
- Локация: коридор музея [вставить строку из таблицы ЛОКАЦИИ]
- Объекты: [вставить строку из таблицы ОБЪЕКТЫ → Сцена 5]

Напиши детальный промпт для Midjourney, который строго соответствует 
этим параметрам. После промпта — ответь на три вопроса:
1. Внешность Гриши соответствует плану для Сцены 5?
2. Корона в этой сцене — в каком статусе по плану?
3. Детали коридора совпадают с описанием локации из плана?

Результат:

После Шага 1 модель выдаст три структурированные таблицы — ваш «Continuity Plan». В Шаге 2 для каждой сцены модель сформирует промпт для Midjourney, а затем ответит на три контрольных вопроса. Если что-то расходится с планом — видно сразу, до того как вы потратили время на генерацию.


🧠

Почему это работает

Модель не «помнит» детали между запросами — она каждый раз начинает с чистого листа. Даже внутри одного длинного контекста детали из начала вытесняются деталями из середины. Попросить «пиши консистентно» — всё равно что сказать повару «не забывай про соль»: намерение есть, механизма нет.

У модели хорошо работает следование явным инструкциям в текущем запросе. Если прямо написано «пальто серое, длинное» — она так и сделает. Если написано «проверь, совпадает ли с планом» — проверит.

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

  • Детализация плана → чем подробнее таблицы, тем жёстче контроль. Для простых историй — достаточно одной таблицы персонажей.
  • Контрольные вопросы → добавляй или убирай под задачу. Для текстовых историй: «упоминается ли цвет пальто?». Для промптов изображений: «есть ли все визуальные якоря?»
  • Предиктивное планирование → можно добавить в план колонку «что нужно показать в этой сцене, чтобы следующая работала». Это ключевой трюк CANVAS: думать на сцену вперёд.

📋

Шаблон промпта

=== ШАГ 1: CONTINUITY PLAN ===

Я создаю {тип_контента} из {число_сцен} сцен.

Краткое описание каждой сцены:
{список_сцен_с_номерами}

Создай три таблицы:

[ПЕРСОНАЖИ]
| Сцена | Персонаж | Внешность и одежда |

[ЛОКАЦИИ]
| Сцена | Локация | Ключевые визуальные детали |

[ОБЪЕКТЫ]
| Сцена | Объект | Статус | Описание |

Это мой Continuity Plan для всей истории.

=== ШАГ 2: ГЕНЕРАЦИЯ СЦЕНЫ {номер} ===

Описание сцены: {описание}

Из Continuity Plan:
- Персонажи: {строки из таблицы ПЕРСОНАЖИ}
- Локация: {строка из таблицы ЛОКАЦИИ}
- Объекты: {строки из таблицы ОБЪЕКТЫ}

Напиши {текст_сцены / промпт для изображения}, строго соответствующий плану.

Затем ответь на вопросы:
1. Внешность каждого персонажа соответствует плану?
2. Состояние каждого объекта соответствует плану?
3. Детали локации совпадают с предыдущим появлением этого места?

Что подставлять: - {тип_контента} → «визуальную историю», «сценарий», «серию промптов для Midjourney» - {список_сцен_с_номерами} → 1-2 предложения на каждую сцену - В Шаге 2 вставляй нужные строки из плана — это и есть «якоря» для модели


🚀 Быстрый старт — вставь в чат:

Вот шаблон CANVAS для создания контента с непрерывностью. 
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит количество сцен и их описания — потому что без этого не получится составить таблицы состояний. Она возьмёт трёхчастную структуру (план → генерация → проверка) и адаптирует под твой контент.


⚠️

Ограничения

⚠️ Длинные многосерийные истории: При очень длинных историях (20+ сцен) таблицы становятся громоздкими. Разбивай на «акты» по 5-8 сцен с переносом итоговых состояний в следующий блок.

⚠️ Субъективные детали: Continuity Plan работает хорошо для фактических деталей (цвет, наличие объекта, место действия). Для «атмосферы» или «настроения сцены» менее точен — это сложнее зафиксировать в таблице.

⚠️ Исходная система — про изображения: CANVAS создан для генерации картинок через диффузионные модели. В оригинале каждый «якорь» — это реальное изображение, которое подаётся в модель. В текстовом применении роль якоря играет текстовое описание — это работает, но слабее.

⚠️ Первая сцена задаёт всё: Если Continuity Plan содержит ошибку или неточность — она тянется через все сцены. Перечитай план перед тем как начать генерацию.


🔗

Ресурсы

CANVAS: Continuity-Aware Narratives via Visual Agentic Storyboarding

Ishani Mondal, Yiwen Song, Mihir Parmar, Palash Goyal, Jordan Boyd-Graber, Tomas Pfister, Yale Song

University of Maryland, College Park; Google

Проект: https://ishani-mondal.github.io/canvas-project-page/

Использованные бенчмарки: ViStoryBench, ST-Bench, HardContinuityBench (новый)

Метрика: ContinuityEval (оценивает персонажей, фоны, реквизит через VLM-судью)


📋 Дайджест исследования

Ключевая суть

Попросить модель «помни детали» — всё равно что сказать человеку с амнезией «не забывай». Механизма нет, только намерение. Метод CANVAS позволяет создавать длинные истории и серии изображений без дрейфа: персонаж не меняет пальто без причины, музей не перестраивается между сценами, украденный артефакт не появляется обратно на полке. Фишка: составь таблицу состояний персонажей, локаций и объектов ДО начала генерации — и передавай нужные строки в каждый запрос. Модель не должна ничего «помнить» — она читает план заново каждый раз. Это надёжнее любых инструкций типа «будь последовательным».

Принцип работы

Модель хорошо следует явным инструкциям в текущем запросе. Если написано «серое длинное пальто» — сделает именно так. Если написано «проверь соответствие плану» — проверит. Но между запросами у неё нет памяти. Даже внутри длинного контекста детали из начала вытесняются деталями из середины — как бумаги на переполненном столе падают на пол. CANVAS использует то, что у модели работает: три таблицы составляются один раз до начала работы — персонажи, локации, объекты. Для каждой сцены из плана извлекаются нужные строки и передаются напрямую в запрос. После генерации — три контрольных вопроса: внешность совпадает? статус объекта правильный? детали локации те же, что в прошлый раз? Если что-то расходится — видно до того, как ошибка ушла дальше.

Почему работает

Неявная «память о мире» становится явным документом. Модель не вспоминает — она читает инструкцию. Это принципиальная разница. Continuity Plan переносит ответственность за согласованность с модели на структуру: та часть работы, которую модель делает плохо (держать контекст через много запросов), передаётся тому, кто делает это хорошо (структурированный документ). QA-вопросы в конце каждой сцены добавляют контрольную точку. Без плана — надежда на удачу. С планом — механизм.

Когда применять

Авторы историй, сценаристы, создатели контента через Midjourney или DALL-E → конкретно для серий из 5 и более сцен, где одни и те же персонажи, локации или объекты появляются в разных запросах, особенно когда между сценами большой разрыв по времени или контексту. НЕ подходит для коротких историй в одном запросе и одноразовых сцен — там Continuity Plan только усложнит без пользы. Для историй из 20+ сцен таблицы становятся громоздкими: разбивай на блоки по 5-8 сцен с переносом итоговых состояний в следующий блок.

Мини-рецепт

1. Составь план до первой сцены: Опиши все сцены кратко — 1-2 предложения на каждую. Попроси LLM сделать три таблицы: персонажи (внешность и одежда в каждой сцене), локации (ключевые визуальные детали), объекты (присутствует / изменился / исчез). Это один запрос перед всей работой.

2. Генерируй с якорями: Для каждой сцены вставляй нужные строки из таблиц прямо в запрос. Не пересказывай план своими словами — передавай конкретные строки как есть. Это и есть якоря.

3. Проверяй каждую сцену тремя вопросами: Добавь в конец запроса: «Внешность персонажа совпадает с планом? Статус объекта правильный? Детали локации те же, что при прошлом появлении?» Модель ответит — и ошибка видна сразу.

4. Перечитай план перед стартом: Ошибка в плане тянется через все сцены. Проверь таблицы один раз до генерации — потом исправлять дороже.

Примеры

[ПЛОХО] : Напиши сцену 5, Гриша видит вора. Помни, что в сцене 3 он переоделся в охранника, но сейчас снова в пальто
[ХОРОШО] : Сцена 5. Из Continuity Plan: — Гриша: серое длинное пальто, светлая рубашка, усталый вид (переоделся обратно в конце сцены 4) — Локация: коридор Оружейной палаты — мраморный пол, витрины вдоль стен, приглушённый свет — Корона: отсутствует на витрине (украдена в сцене 4) Напиши сцену. Затем ответь: 1) одежда Гриши соответствует плану? 2) статус короны правильный? 3) детали коридора совпадают с описанием в плане?
Источник: CANVAS: Continuity-Aware Narratives via Visual Agentic Storyboarding
ArXiv ID: 2604.13452 | Сгенерировано: 2026-04-16 05:32

Проблемы LLM

ПроблемаСутьКак обойти
Детали дрейфуют в длинных последовательностяхПишешь серию из 8+ сцен. Персонаж в первой сцене в синем пальто — в пятой уже в зелёном. Артефакт украден в четвёртой — стоит на полке в шестой. Происходит потому, что детали из начала вытесняются деталями из середины. Модель не «помнит» — она читает то, что есть в текущем запросе. Чем длиннее история — тем хужеСоставь явный документ состояний ДО начала генерации. Вставляй нужные строки из него в каждый запрос явно. Модель не будет «помнить» — она будет читать

Методы

МетодСуть
Continuity Plan — таблица состояний перед генерациейШаг 1 (один раз). Попроси модель составить три таблицы сразу для всех сцен: [ПЕРСОНАЖИ] — внешность и одежда в каждой сцене. [ЛОКАЦИИ] — ключевые визуальные детали мест. [ОБЪЕКТЫ] — статус каждого важного предмета (есть / изменился / исчез). Это твой «план мира». Шаг 2 (для каждой сцены). Вставляй в запрос нужные строки из плана явно: «Из плана: Гриша в сцене 5 — серое длинное пальто, корона отсутствует». Шаг 3 (после каждой сцены). Добавь три контрольных вопроса: внешность совпадает с планом? статус объектов совпадает? детали локации совпадают с предыдущим появлением? Если что-то расходится — видно до следующей генерации. Когда применять: история 5+ сцен, серия промптов для Midjourney/DALL-E, сценарий с повторяющимися персонажами. Ограничение: для 20+ сцен таблицы становятся громоздкими — дели на блоки по 5–8 сцен. Для «атмосферы» и «настроения» работает хуже, чем для фактических деталей
📖 Простыми словами

CANVAS: Continuity-Aware Narratives via VisualAgenticStoryboarding

arXiv: 2604.13452

Генерация длинных визуальных историй через нейронки — это всегда лотерея, где ты гарантированно проигрываешь на длинной дистанции. Проблема в том, что у моделей нет «памяти объекта»: на первом кадре у твоего героя синий галстук, на пятом — красный, а на десятом он вообще превращается в другого человека. Метод CANVAS решает это через визуальное раскадрование, перенося логику кинопроизводства в промптинг. Вместо того чтобы генерировать картинки по одной, система сначала создает жесткий каркас всей истории, фиксируя детали персонажей и окружения в единую базу, а потом использует её как «закон» для каждой отдельной сцены.

Это как если бы ты пытался собрать шкаф из ИКЕА без инструкции, просто глядя на картинку на коробке. Сначала вроде получается, но к середине понимаешь, что лишних деталей подозрительно много, а дверцы не закрываются. CANVAS — это та самая инструкция и заранее размеченные детали. Ты не просто просишь нейронку «нарисуй красиво», ты даешь ей библию проекта, где прописано, что условный детектив Гриша всегда носит именно это пальто, а шрам у него строго над левым глазом. Формально нейронка всё еще рисует с нуля, но теперь у неё перед глазами есть чертеж, от которого нельзя отступать.

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

Хотя метод тестировали на генерации изображений, этот принцип структурной преемственности применим везде, где важна логика повествования. Это работает для видео, комиксов и даже сложных текстовых квестов. Главная фишка в том, что мы перестаем надеяться на «внимательность» модели и переходим к директивному управлению. Мы не просим нейронку «не забывать про детали», мы создаем механизм, который физически не дает ей их игнорировать. SEO для глаз уходит в прошлое, на смену приходит жесткая режиссура контента.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с