- У каждого референса одна роль: identity, pose, background, clothing или product
- Роль называется прямо в тексте промпта для генератора, не только в системном
- До 5 референсов в одном вызове без смешения доменов
Задача
Пайплайн прикрепляет к генератору четыре референса: человек, поза, фон, одежда. Промпт: «субъект в этой позе, в этой одежде, на этом фоне». Модель тянет одежду и с референса человека, и с референса одежды. С референса позы цепляется причёска, с фона — посторонняя фигура. Промпт не сказал «референс 4 — только для одежды, остальное в нём игнорируй», и модель не игнорировала.
flowchart LR
H[Человек] --> G[Генератор]
Q[Поза] --> G
B[Фон] --> G
C[Одежда] --> G
G --> X[Смешение:<br/>лишнее из всех]
classDef key stroke:#FF3600,stroke-width:2px
class X keyХуже того, такое загрязнение не диагностируется: все четыре референса были молчаливыми соавторами, и непонятно, какой из них принёс лишнее. Проблема не в количестве референсов. Генератор по определению использует всё, что ему дали. Проблема в отсутствии инструкции, какой референс отвечает на какой вопрос.
Приём
Каждый референс получает явную типизированную роль, и эта роль называется внутри текста промпта, который читает генератор. Три несущие части:
- refType на каждый референс. Тип называет, какие измерения референс даёт, и косвенно — какие нет:
identity(лицо, тело, кожа),pose(положение тела),background(окружение),clothing(форма, ткань, цвет одежды),product(форма объекта, ориентация, текст),technical(аспект, формат, композиция). - IMAGE ORDER. Позиционная декларация, общая для системного и выдаваемого промпта: «Image 1: identity, Image 2: pose only». Даёт референсу стабильную идентичность на каждый вызов.
- Инлайн-декларация. LLM-композер обязан в каждом выходном промпте назвать, что делает каждый референс. Никакого молчаливого использования.
flowchart LR
U[refType<br/>при загрузке] --> O[IMAGE ORDER<br/>на каждый вызов]
O --> D[Инлайн-декларация<br/>в выходном промпте]
D --> G[Генератор]Выходной промпт выглядит так:
A [subject from Image 1, physical identity preserved],
[pose from Image 2, wardrobe and identity of that person ignored],
wearing [garments from Image 4, color and fabric only, not the model],
standing in [environment from Image 3, any subjects ignored],
holding [product from Image 5, rigid form preserved]
Уберите любую из трёх частей — и смешение возвращается. Референс без роли модель читает как «используй, где покажется уместным». Роль только в системном промпте до генератора не доходит. Позиционная договорённость без явного IMAGE ORDER ломается, когда пользователь не прикрепил Image 1.
Обновление, сентябрь 2026. Роль product лучше всего работает на фото настоящей вещи. На предметном бренде референсом шло фото покупной детали с identity lock, например основания барного стула с газлифтом, и генератор воспроизвёл его один в один, поставив сверху печатное сиденье. Из 34 генераций с такими референсами все 34 прошли, огрехи были мелкие, вроде четырёх ножек у столика, задуманного на трёх.
Single-shot вариант. Тот же приём работает без многоступенчатого пайплайна. Один LLM-вызов получает до пяти картинок плюс массив parts с объявленным refType каждой и собирает один композитный промпт, где каждая картинка отдаёт только свой домен. Это лёгкий путь для одной картинки с многими ограничениями: этот человек, в этой позе, в том окружении, в этой одежде, с этим продуктом. Тот же режим закрывает fashion try-on, итерацию персонажа (лицо с одного листа, костюм — с другого) и editorial-компоузинг. Когда нужна серия консистентных кадров, single-shot уже не хватает: там карта референсов повторяется в начале каждого финального промпта, а не один раз на сессию.
flowchart LR
I[До пяти картинок] --> L[Один LLM-вызов]
P[parts с refType] --> L
L --> O[Один композитный<br/>промпт]Роль включает запрет. Для сетки из 12 иконок сервисов ЗДЕСЬ к одной генерации шли четыре референса, и у каждого своя граница. Знак отвечает за геометрию глифов, причём в PNG: генератор не принимает SVG. Промо-баннер отвечает за палитру и характер. Текущая иконка отдаёт только форму плашки, стекло с неё не переносится. Скрин чужой системы иконок нужен только для раскладки, и его убирают, как только модель начинает копировать чужие глифы. Стикерпак собирался по тому же правилу одной фразой: «Image 1 is a style reference only: match its sticker style, gradients, grain and grid layout. Do not copy its icons or its colours».
Где ломается
- Референс без типа. Любая картинка, прикреплённая «просто так», тихо тянет не то измерение. Типизация должна происходить на этапе загрузки, а не в промпте постфактум.
- Типизация по позиции. «Image 1 всегда identity» рушится при первом пользователе, который identity не прикрепил. IMAGE ORDER должен отражать текущее состояние на каждый вызов.
- Роль есть в системном промпте, но не в выходном. Композер знает, что Image 2 — это поза, а генератор — нет. До модели доходит только то, что написано в финальном промпте.
- Слишком много референсов. Пять типизированных картинок уже нагружают внимание генератора. Дальше помогает не шестая роль, а слияние нескольких референсов в один композитный.
Итог
- Не «меньше референсов», а «у каждого объявленная роль».
- Три части несущие: refType, IMAGE ORDER, инлайн-декларация в выходном промпте.
- До пяти референсов в одном вызове собираются single-shot, без тяжёлого пайплайна.
- Дисциплина обобщается на любой мультивходовой LLM-флоу: spec / test / module в кодогенерации, primary / supporting / rebuttal в синтезе документов.
- Роль называет и то, что с референса брать нельзя: стилевой референс отдаёт стиль, но не иконки и не цвета.
© Александр Никулин. Цитирование — с указанием автора и ссылкой · Версия для LLM