Найти в Дзене

Как написать промт для нейросети, чтобы она вас правильно поняла. Часть первая: основы

Оглавление

Составление запросов для чайников

Недавно один мой друг, взрослый уже дядька, впервые решил попробовать создать картинку с помощью нейросетей. Насмотрелся на мои упражнения с искусственным интеллектом (и не только на мои) и решился наконец. Для начала обратился ко мне за советом, какой платформой воспользоваться. Поскольку мой друг живёт далеко за пределами России и не имеет яндекс-аккаунта, вариант с "Шедеврумом" не рассматривался, так что рекомендации были такими: на первый раз подойдёт что-нибудь попроще безо всяких настроек, вроде DALL-E, а если заинтересует и втянешься — переходи на Stable Diffusion, там больше возможностей управления и контроля. Лично я предпочитаю Leonardo AI, но есть множество других вариантов.

Друг ушёл творить, а на следующий день появился в мессенджере обиженным и расстроенным. Обиженным на Leonardo AI, расстроенным из-за того, что решил, будто не умеет писать запросы. "Я вроде ничего особенного и не просил, а всё равно не получилось!.. Я думал, что надо подробно всё описывать, вот я подробно и описал, а получил такую фигню!"

Пришлось успокаивать и разбираться.

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

Результаты он мне не показал, но у меня по его оригинальному тексту получилось примерно вот что (и это лучшее, на что оказался способен Leonardo):

Leonardo AI, модель Leonardo Diffusion XL
Leonardo AI, модель Leonardo Diffusion XL

Другие опробованные мной нейросети справились намного хуже, в основном просто проигнорировав большую часть текста. Что же пошло не так?

Ошибки при составлении запросов

Основная ошибка проста: здесь слишком много всего происходит. В композиции нужно учесть взаимное расположение двух кругов, гексаграммы, дракона и феникса, итого — пяти объектов, у каждого из которых есть ещё и свои характеристики. Сегодняшние модели не могут сосредотачиваться более чем на одном-двух объектах. Пока официально не вышла третья версия Stable Diffusion, которая, как заявлено, будет намного точнее справляться со сложными многообъектными сценами, а также лучше понимать и изображать текст (это мы ещё посмотрим), предпочтительнее строить свои сюжеты вокруг одного, ну максимум — двух объектов.

Кроме того, с моделями на базе Stable Diffusion лучше использовать более или менее стандартную структуру запроса, о которой я расскажу чуть ниже. В общих чертах действует простое правило: чем ближе слово к началу запроса, тем оно важнее для нейросети. На то, что стоит в конце, обращается меньше внимания. Слова, относящиеся к одинаковым смысловым группам, должны располагаться рядом, иначе нейросеть может просто проигнорировать какие-то из них.

Кстати, помимо простоты управления, есть ещё одна причина, по которой я советую DALL-E для первого знакомства с нейросетями: она намного лучше остальных понимает запросы. Соблюдение правил, действующих для Stable Diffusion, тут желательно, но не обязательно: DALL-E — принципиально другая модель.

Вот её результат с драконом и фениксом:

DALL-E 3
DALL-E 3

Сильно сомневаюсь в правильности гексаграммы, но остальное выглядит почти как задумано. Во всяком случае, ни один элемент не был упущен.

Как построить запрос для Stable Diffusion

Итак, для построения эффективного запроса для любой из моделей на базе Stable Diffusion держим в голове следующее:

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

Что это за смысловые группы?

1. Объект

Ядро запроса — описание основного объекта в сцене. Человек, животное, постройка, дерево, чёрная дыра — всё, что угодно, при условии, что это и есть главный герой вашего изображения. Сюда же добавляем все детали, относящиеся к объекту: "в тёплом пальто / с длинным хвостом / в неоготическом стиле / с оранжевой листвой / гигантского размера" (для каждого из упомянутых выше объектов соответственно). Деталей может быть несколько, но не переусердствуйте и помните про близость к началу: это правило здесь тоже работает.

Синий водяной дракон с жидкими крыльями, Leonardo AI, модель Leonardo Diffusion XL
Синий водяной дракон с жидкими крыльями, Leonardo AI, модель Leonardo Diffusion XL

2. Материалы (техника)

Этой группы у вас может вообще не быть, если имитация определённой изобразительной техники для вас не принципиальна. Сюда пишутся уточнения вроде "акварельный набросок", "рисунок карандашом/углем/пастелью", "картина маслом", "мраморная статуя", "граффити", "оригами" и так далее.

3. Художественный стиль

Ещё одна необязательная группа. Здесь можно указать одно из направлений изобразительного искусства (импрессионизм, кубизм, пуантилизм, дадаизм и так далее). Сюда же можно добавить ссылки на известных художников ("в стиле Дали / Ван Гога / Моне" и т. д.): нейросеть, возможно, попытается сымитировать их манеру (этот приём работает не со всеми моделями).

Синий водяной дракон с жидкими крыльями, рисунок пастелью в жанре примитивизма, Leonardo AI, базовая модель SDXL 1.0
Синий водяной дракон с жидкими крыльями, рисунок пастелью в жанре примитивизма, Leonardo AI, базовая модель SDXL 1.0

4. Композиция

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

5. Цвет и освещение

Вы можете перечислить конкретные цвета и оттенки либо указать общие тона (тёплые, холодные) и освещение (мягкое, жёсткое, резкие тени, полумрак).

Синий водяной дракон с жидкими крыльями, рисунок пастелью, закат, тёплое освещение, Leonardo AI, модель AlbedoBase XL
Синий водяной дракон с жидкими крыльями, рисунок пастелью, закат, тёплое освещение, Leonardo AI, модель AlbedoBase XL

6. Настроение

Здесь можно указать эмоции, которые должна передавать ваша картинка. "Радостно", "тревожно", "спокойно", "романтично", "страшно", "одиноко" и тому подобное.

В каком порядке располагать эти группы?

Обычно советуют на первом месте помещать объект, затем стили, цвета и освещение, и завершать всё это описанием композиции и дополнительным модификаторами, касающимися настроения и атмосферы в целом: сказочно, кинематографично, мрачно, футуристично и т. п.

Однако, по моим личным наблюдениям, описание техник и стиля иногда срабатывает намного лучше, если помещать его в начало, перед объектом. Вы как бы задаёте тон и настраиваете модель на определённый жанр, и дальше она ориентируется уже на него.

Помните о том, что разные модели на таких платформах, как Leonardo AI, Civitai, Seaart и аналогичных могут быть изначально натренированы на имитацию конкретных изобразительных стилей (аниме, фотореализм, 3D-анимация, цифровая живопись и так далее). И хотя текст запроса для нейросети — это как приказ для военного: не обсуждается, — всё же такие узкоспециальные модели будут неизбежно стремиться к воссозданию знакомого стиля. Поэтому при составлении текста и выборе модели для генерации учитывайте и её "заводские установки".

Тщательно подбирайте слова

Если какое-то описание понятно вам самому, это ещё не значит, что оно будет понятно нейросети. Вот наглядный пример: по моей задумке все предыдущие синие драконы должны были иметь жидкие крылья. Что такое "жидкие крылья", Leonardo понял не очень хорошо. Подозреваю, что и не каждый человек понял бы, какая именно картинка была у меня в голове: крылья, сформированные из плещущейся воды. Поэтому я попробую описать это немного по-другому и посмотрю на результаты.

Для чистоты эксперимента все три варианта в галерее были созданы с одним и тем же числом зерна (Seed) и в одной и той же модели. Отличались они только описанием крыльев:

1 — "...с крыльями, сделанными из воды";

2 — "...с крыльями, сделанными из водяных всплесков";

3 — "...с крыльями, созданными водяными всплесками".

Нужный результат получился на третий раз. Правильно подобранные слова имеют большое значение.

Ещё раз о порядке слов

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

1: оранжевый гриб в крапинку под большим дубом с жёлтыми листьями (an orange mushroom with specks under a big oak tree with yellow leaves)

Leonardo AI, модель Leonardo Kino XL
Leonardo AI, модель Leonardo Kino XL

2: большой дуб с жёлтыми листьями, оранжевый гриб в крапинку под ним (a big oak tree with yellow leaves, an orange specked mushroom underneath)

Leonardo AI, модель Leonardo Kino XL
Leonardo AI, модель Leonardo Kino XL

Гриб видите? А он есть. Наверное. Но, скорее всего, нет.

Есть ли ещё какие-нибудь хитрости?

Это не всё, что стоит знать о создании запросов. Существуют приёмы, которые можно отнести к чуть более продвинутому уровню. Например, если какая-то второстепенная деталь или объект на вашей будущей картинке имеют особое значение и вы хотите, чтобы они не только не были пропущены, но и заметно выделялись, можно отдельно привлечь к ним внимание нейросети, причём довольно точно объяснить, насколько именно эта деталь должна быть заметна.

Об этом и расскажу в следующий раз.