Фрагменты и вес в Midjourney
Когда вы видите в чьём-то запросе два двоеточия "::" — это фрагментированный запрос, или как он иногда называется в англоязычных мануалах, “multiprompt”. Эти двоеточия как бы «разрезают» запрос на несколько частей — фрагментов, каждый из которых обладает своей силой влияния на финальное изображение.
После каждого такого кусочка стоит число — вес фрагмента (weight). Чем выше это число, тем больше фрагмент будет влиять на результат генерации и наоборот.
Вес может быть целым или дробным, положительным или отрицательным. Кажется, что в примере выше у второго фрагмента не хватает числа, но это не так: если после двоеточий ничего не поставить, то Midjourney будет считать вес равным единице.
Midjourney пока не дала ёжику ни ножа, ни кармана (почему такое происходит я объясню в статье про архетипы), поэтому можно увеличить влияние последнего фрагмента и посмотреть что из этого выйдет.
Вкратце, значимость фрагментов запроса можно описать вот таким примером:
Этот фрагмент будет значим в финальном изображении :: 1.5 Этот фрагмент будет в финальном изображении :: Этот фрагмент будет едва заметен в финальном изображении :: 0.5 Этого фрагмента скорее всего не будет в финальном изображении :: -0.5
Вес всех фрагментов в запросе
Важно отметить, что «сила» фрагмента зависит не от конкретного числа, а от отношения этого числа к общему весу всех фрагментов.
То есть, не важно, полтора это или три, важно, насколько полтора или три значимы в сравнении с общим весом фрагментов.
Строго говоря, финальная картинка — это арифметическое средневзвешенное всех фрагментов запроса. Но проще всего воспринимать значимость фрагмента как процент от суммы весов всех фрагментов в запросе.
💡 Помните, что чем больше фрагментов в запросе, тем менее значимым становится каждый из них
Приведу пример
Если вес первого фрагмента равен 3, а вес всех фрагментов (всего запроса) равен 6, то первый фрагмент будет на 50% влиять на общий результат:
foggy day :: 3 a hedgehog :: 1.5 knives :: 1.5
Если же вес всех фрагментов равен 18, то объекты и детали первого фрагмента будут значимы всего на 17%, и «потеряются» на финальном изображении:
foggy day :: 3 a hedgehog :: 7 knives :: 8
Да, если сделать два этих запроса (с одинаковым сидом или эталонным изображением), вы получите очень похожие результаты: Midjourney сама пересчитает вес в обоих запросах и он станет одинаковым.
Очень тонкий лёд
Как я написал выше, вес, а значит и сумма весов, могут быть как положительными, так и отрицательными. С отрицательной суммой весов в запросе всё очень просто — бот не разрешит отправить такой запрос.
Можно объяснить это так: разделив положительное число на отрицательное мы получим отрицательное. Разделив отрицательное — получим положительное.
Выходит, что все фрагменты с положительным собственным весом в «общем» весе получат отрицательные значения и наоборот. И после финального пересчёта Midjourney придётся рисовать только те фрагменты, у которых собственный вес был изначально отрицательным и избегать тех, у которых он был положительным, хотя должно быть наоборот.
Чтобы избежать путаницы, бот не пропустит такие запросы.
С нулем всё куда интереснее. В математике результат деления на ноль не определён, однако Midjourney такой запрос обработает. И чем ближе сумма весов будет приближаться к нулю, тем менее «стабильными» будут результаты. Математика подсказывает, что чем ближе к нулю вы окажетесь, тем сильнее будут проявляться фрагменты с положительным весом. Скорее всего вы будете получать что-то прекрасное, но уже слабо относящееся к первоначальному запросу:
Автор с ником Cirkut исследовал этот «Зиро спейс» в Midjourney, я напишу об этом в другой статье.
Как использовать вес?
Кроме простого контроля значимости, фрагменты и вес — ключевые ингредиенты нескольких продвинутых методов генерации изображений.
Метод создания сцены
Простая и действенная техника: создать сцену с помощью первого фрагмента, а «заселить» её с помощью последующих:
coffee house, twilight atmosphere :: two friends argue about money ::
Метод слайдера
Копируя элемент главного фрагмента во второстепенный, мы создаём виртуальный «слайдер», позволяя увеличивать или уменьшать значимость этого элемента в первом, главном фрагменте: