TL;DR
CRAFT — метод улучшения генерации изображений через декомпозицию промпта на проверяемые вопросы и целевую коррекцию. Исходный промпт разбивается на набор визуальных вопросов ("Есть ли кот?", "Кот красный?", "Виден ли текст 'HELLO'?"), затем модель генерирует изображение, vision-модель проверяет его по каждому вопросу (ДА/НЕТ), и если есть НЕТ — промпт правится только в проблемных местах. Процесс повторяется пока все вопросы не получат ДА или пока не исчерпан лимит итераций (обычно 2).
T2I-модели плохо держат в голове все ограничения сразу — особенно в длинных промптах с несколькими объектами, атрибутами, отношениями и текстом. Модель может нарисовать кота, но забыть что он красный, или добавить текст но исказить буквы. Происходит это потому что промпт — единственный канал контроля, и чем больше в нём требований, тем выше шанс что что-то потеряется. Холистические проверки ("хорошее ли изображение?") не помогают — неясно что именно не так и как именно исправить.
CRAFT переводит неявные требования в явные вопросы и правит промпт точечно. Система работает в 4 шага за итерацию: (1) Переписывает промпт по правилам T2I (структура, стиль, сохранение текста в кавычках), (2) Генерирует изображение, (3) Проверяет через VLM по списку вопросов с объяснениями почему НЕТ, (4) LLM целенаправленно правит промпт только там где провал. Если все вопросы ДА — останавливается досрочно. Если нет — идёт следующая итерация.
Схема метода
ПОДГОТОВКА (один раз):
→ Из промпта генерируются визуальные вопросы Q
→ Добавляются проверки текста и артефактов
→ Промпт переписывается по правилам T2I → P₀
ИТЕРАЦИЯ t:
ШАГ 1: Генерация → изображение Iₜ из промпта Pₜ
ШАГ 2: Проверка → VLM отвечает ДА/НЕТ на каждый вопрос + объяснения для НЕТ
ШАГ 3: Оценка → подсчёт score = (число ДА) / (всего вопросов)
ШАГ 4: Выбор → если score выше предыдущего → обновить лучшее изображение
ШАГ 5: Коррекция → LLM правит промпт только по провальным вопросам → Pₜ₊₁
ОСТАНОВКА:
→ Если score = 1.0 (все ДА)
→ Или достигнут лимит итераций (обычно 2)
Все шаги выполняются последовательными запросами к разным моделям (T2I, VLM, LLM).
Пример применения
Задача: Создать афишу для бара "Синий слон" — синий неоновый слон на фоне ночного города, с текстом "СИНИЙ СЛОН" светящимися буквами сверху.
Промпт (итерация 1):
Создай изображение для афиши бара. В центре — силуэт синего неонового
слона с подсветкой. Фон — ночной городской пейзаж с размытыми огнями.
Сверху крупным планом светящийся текст "СИНИЙ СЛОН". Стиль —
неоновый киберпанк, тёмная цветовая гамма с яркими акцентами.
Проверочные вопросы (генерируются автоматически): - Есть ли на изображении слон? - Слон синего цвета? - Слон выглядит как неоновая вывеска / с подсветкой? - На фоне ночной город? - Огни города размыты? - Виден ли текст "СИНИЙ СЛОН"? - Текст расположен сверху? - Текст выглядит светящимся? - Текст читается полностью и без ошибок? - Изображение выглядит естественно, без артефактов?
Результат итерации 1: VLM проверяет изображение и находит: слон есть (ДА), синий (ДА), неоновый (ДА), но текст искажён — видно "СИНЙ СЛОМ" (НЕТ на вопрос о читаемости). Score = 9/10.
Коррекция промпта: LLM видит провал только по тексту и усиливает инструкцию: добавляет "текст должен быть чётким, читаемым, без искажений букв", уточняет "точная надпись: СИНИЙ СЛОН".
Итерация 2: Генерация с исправленным промптом → проверка → текст теперь читается правильно → score = 10/10 → останов.
Почему это работает
T2I-модели теряют детали в длинных промптах потому что им нужно одновременно держать в голове объекты, атрибуты, отношения, композицию, стиль и текст. Каждое дополнительное требование размывает внимание. Особенно страдают текст (буквы искажаются), композиция (забывается количество объектов или их расположение) и атрибуты (цвета, размеры). Модель не получает обратной связи — она выдаёт результат и не знает что пошло не так.
VLM хорошо отвечают на бинарные вопросы — "Есть ли X?" гораздо проще чем "Насколько хорошее изображение?". Декомпозиция на вопросы делает проверку однозначной — нет субъективности, нет абстрактных критериев. Плюс VLM может объяснить почему НЕТ ("текст искажён", "не хватает объекта"), что даёт LLM точку опоры для правки.
Целевая коррекция эффективнее полной перезаписи — если 9 из 10 требований выполнены, нет смысла переписывать весь промпт и рисковать потерять работающее. LLM видит только провальные вопросы и их объяснения, и усиливает именно эти части промпта — добавляет уточнения, дубли ключевых слов, явные инструкции ("точная надпись", "без искажений"). Остальное остаётся стабильным.
Рычаги управления: - Число итераций — уменьши до 1 для простых промптов (экономия запросов), увеличь до 3-4 для сложных сцен с текстом - Список вопросов — добавь специфичные проверки ("персонаж смотрит влево", "объект на переднем плане") для точного контроля - Правила переписывания — убери добавление стиля по умолчанию, если хочешь абстрактные результаты - Критерий остановки — можно заменить на "score > 0.9" вместо "score = 1.0" если идеал не критичен
Шаблон промпта
Применимость: Полный автоматический пайплайн требует API-доступа к T2I, VLM и LLM. Но принципы работают вручную в любом T2I-сервисе.
Вариант 1: Ручное применение принципов (работает в любом T2I-сервисе)
Шаг 1 — Переписывание промпта (используй LLM в чате):
Перепиши мой промпт для текст-в-изображение генерации по этим правилам:
1. СТРУКТУРА: субъект (кто/что) → контекст (окружение, действие) → стиль
2. Если текст в кавычках ("...") — сохрани ДОСЛОВНО, это должно появиться на изображении
3. Если стиля нет — добавь "реалистичный стиль" или другой подходящий
4. Сделай описание чётким, без двусмысленности
5. Сохрани исходную идею, не добавляй лишнего
Исходный промпт: {твой_промпт}
Шаг 2 — Составь проверочные вопросы (используй LLM):
Составь список проверочных вопросов для изображения, чтобы проверить
выполнены ли все требования. Вопросы должны быть:
- Бинарные (можно ответить только ДА или НЕТ)
- Конкретные (не "хорошее ли", а "есть ли кот", "кот красный")
- С зависимостями (сначала "есть ли объект", потом "его атрибуты")
Промпт: {переписанный_промпт}
Шаг 3 — Генерируй изображение с переписанным промптом в T2I-сервисе
Шаг 4 — Проверка (используй VLM в чате, загрузи изображение):
Ответь на вопросы об этом изображении. Только ДА или НЕТ.
Если НЕТ — объясни почему.
{список_вопросов}
Шаг 5 — Целевая коррекция (если есть НЕТ):
Исходный промпт: {переписанный_промпт}
Проверочные вопросы с НЕТ: {вопросы_и_объяснения}
Исправь промпт ТОЛЬКО в тех местах, где проверка провалилась.
Не меняй то, что работает. Усиль формулировки по проблемным частям.
Шаг 6 — Повтори генерацию с исправленным промптом
Вариант 2: Метапромпт для автоматизации (если есть доступ к API или мультимодальному чату)
Ты — система CRAFT для улучшения генерации изображений.
ВХОДНЫЕ ДАННЫЕ:
- Промпт пользователя: {промпт}
- [Опционально] Изображение для проверки
ТВОЯ ЗАДАЧА зависит от этапа:
ЭТАП 1 — ПОДГОТОВКА (если изображения нет):
1. Перепиши промпт по правилам:
- Структура: субъект → контекст → стиль
- Текст в кавычках сохраняй ДОСЛОВНО
- Добавь стиль если нет
- Убери двусмысленность
2. Составь проверочные вопросы (бинарные ДА/НЕТ):
- Объекты: "Есть ли X?"
- Атрибуты: "X цвета Y?"
- Отношения: "X слева от Y?"
- Текст: "Виден текст 'Z'?", "Текст читается без ошибок?"
- Качество: "Нет артефактов?"
3. Выведи:
- Переписанный промпт
- Список вопросов
- Инструкцию: "Сгенерируй изображение, затем загрузи для проверки"
ЭТАП 2 — ПРОВЕРКА (если изображение есть):
1. Ответь на каждый вопрос: ДА или НЕТ
2. Для каждого НЕТ — объясни причину (1 предложение)
3. Посчитай score = (число ДА) / (всего вопросов)
ЭТАП 3 — КОРРЕКЦИЯ (если score < 1.0):
1. Возьми исходный переписанный промпт
2. Усиль ТОЛЬКО те части, где были НЕТ:
- Добавь уточнения
- Продубли ключевые слова
- Сделай инструкцию явной ("точная надпись", "без искажений")
3. Выведи исправленный промпт
4. Инструкция: "Сгенерируй ещё раз с этим промптом"
ЭТАП 4 — ЗАВЕРШЕНИЕ (если score = 1.0):
Выведи: "✅ Все требования выполнены. Изображение готово."
🚀 Быстрый старт — для тех, у кого есть доступ к мультимодальному чату (Claude, GPT-4 с vision):
Вот метод CRAFT для улучшения генерации изображений. Помоги применить его к моей задаче.
Моя задача: [опиши что хочешь сгенерировать]
Используй метод из шаблона выше — начни с ЭТАПА 1.
[вставить "Вариант 2: Метапромпт" выше]
Модель спросит детали промпта, затем выдаст переписанный вариант и список вопросов для проверки. Ты генерируешь изображение в T2I-сервисе, загружаешь его обратно в чат для ЭТАПА 2, получаешь коррекции и повторяешь.
Почему принципы CRAFT работают в ручном режиме
Декомпозиция на вопросы работает потому что заставляет думать конкретно — не "хорошая ли картинка", а "есть ли все объекты", "правильные ли цвета", "читается ли текст". Ты сам видишь чеклист и можешь проверить каждый пункт. Это как code review по чек-листу вместо общего "норм/не норм".
Переписывание по правилам работает потому что убирает двусмысленность — модели лучше понимают структурированные промпты (субъект→контекст→стиль) чем свободный текст. Плюс явное сохранение текста в кавычках сигналит "это нужно отрендерить дословно".
Целевая коррекция работает потому что сохраняет то, что работает — если модель правильно нарисовала композицию но исказила текст, нет смысла переписывать всё. Просто усиль часть про текст ("точная надпись 'X'", "все буквы чёткие") и перегенерируй.
Итеративность с остановкой работает потому что первая итерация даёт 80% результата — исследование показало что уже после 1 коррекции quality score прыгает сильнее всего. Вторая итерация добавляет ещё немного. Третья почти не нужна. Это значит метод эффективен даже если ты сделаешь только 1 круг проверки-коррекции.
Оригинал из исследования (для справки)
Исследователи автоматизировали пайплайн с API: - VLM: GPT-4V для проверки вопросов - LLM: GPT-4 для переписывания и коррекции - T2I: FLUX-Schnell, FLUX-Dev, Qwen-Image, Z-Image-Turbo, FLUX-2 Pro - Параметры: temperature=0.0, фиксированные seeds, 2 итерации по умолчанию
Стоимость: 2 итерации CRAFT добавляют ~$0.0024 ($0.0012 за VLM + $0.00001 за LLM на итерацию) — это 0.6% от стоимости генерации премиум-изображения ($0.42 за 2048×2048 в Hunyuan).
Результаты: - FLUX-Schnell: VQA score +8% (0.78→0.86), DSG score +7% (0.786→0.857), preference win-rate +53% (0.21→0.744) - Qwen-Image: VQA score +8.2% (0.864→0.946), DSG score +7.4% (0.858→0.932), preference win-rate +23% (0.36→0.59) - FLUX-2 Pro: VQA score +4.5% (0.88→0.925), DSG score +4% (0.87→0.91), preference win-rate +12% (0.4→0.52) - Рендеринг текста: FLUX-Schnell улучшился на 7.16% accuracy и +12.91% exact match rate
Особенно сильный эффект на слабых моделях — CRAFT позволяет лёгким генераторам приблизиться к качеству дорогих систем почти без дополнительных затрат.
Ограничения
⚠️ Требует API или громоздкой ручной работы: Автоматический пайплайн невозможен без доступа к T2I API, VLM API и LLM API. Ручное применение принципов работает, но требует копирования между сервисами: генерация в одном месте (Midjourney/Stable Diffusion), проверка в другом (ChatGPT/Claude с загрузкой изображения), коррекция промпта, повторная генерация.
⚠️ Зависит от качества VLM: Если vision-модель плохо распознаёт текст или объекты на изображении, она даст ложные НЕТ → коррекция пойдёт не туда. Исследование использовало GPT-4V — более слабые VLM могут быть менее надёжными.
⚠️ Затраты на итерации: Каждая итерация = новая генерация изображения. Если T2I-сервис дорогой (Midjourney, премиум DALL-E), 2-3 итерации умножают стоимость. Выгодно для API-доступа к дешёвым моделям, невыгодно для подписок с лимитами.
⚠️ Не для быстрых задач: Если нужно просто "красивая картинка" без строгих требований, овчинка выделки не стоит. CRAFT полезен когда есть конкретные ограничения — текст, композиция, множественные объекты с атрибутами.
⚠️ Эффект насыщается: После 2 итераций улучшения минимальны — третья и четвёртая дают крошечный прирост. Для 95% задач достаточно 1-2 кругов.
Ресурсы
CRAFT: Continuous Reasoning and Agentic Feedback Tuning for Multimodal Text-to-Image Generation
V. Kovalev, A. Kuvshinov, A. Buzovkin, D. Pokidov, D. Timonin
Отсылки: DSG (Davidsonian Scene Graph), GenEval, Parti-Prompt benchmark
Контакт: {valentin, alexander, denis, alexb, dima}@flymy.ai
