Как победить метаморфа или Вася Пупкин перестаёт меняться (страсти по нейроарту)
Автор: Кира ВерещагинаЭта история больше всего зацепит рисовальщиков комиксов и анимэшек. Общая беда многих художников — сложности с «клонированием» персонажа. Если разница между артами укладывается в 5%, зритель/читатель не обращает внимания на такие мелочи. А если больше? Тогда человек замечает, что персонаж что-то слишком уж изменчив. Прямо Протей какой-то. Над художником могут добродушно посмеяться, а комиксы, к сожалению, выбросят. Даже если книгу из-за «некачественных» иллюстраций не вернут на полку, осадочек остаётся и у автора, и у иллюстратора, который знает о своих «косяках», и у читателя. А уж беда бедовая, когда такое сварганил сам, и спрашивать не с кого.
У нейрохудожника ещё больше проблем: нейросеть не знает персонажа. Она обучена на десятках тысяч лиц, которые усреднила и отрихтовала, а образ придумал нейрохудожник «с нуля». Даже если человек работает с моделью, обученной технологии дипфейка, крайне сложно сгенерить одно и то же, опираясь на словесное описание. Искомых 5% не получится. Алгоритм будет менять портрет персонажа в пределах статистики, но отклонения неизбежны.
Задача настолько тривиальная и вызывавшая неудовольствие пользователей, что уже достаточно давно разработано несколько рабочих способов вылечить это безумие итераций.
Начнём с Midjourney. Для этой модели единственный надёжный способ копировать лицо — задать параметр —cref
/imagine prompt:A beautiful woman sitting in a cozy Parisian cafe, wearing a white silk blouse, soft cinematic lighting, 8k resolution --cref https://link-to-your-image.jpg --cw 0
Параметра два на самом деле: --cref указывает непосредственно на путь к изображению и сам файл с искомой дамой. --cw0 обозначает, что модель должна забрать с образца только лицо. --cw 100 — изображение заимствуется целиком, модель его впишет в картинку согласно заданному условию.
Но подставить персонажа из одной картинки в другую для Midjourney не лучшая задача. Гораздо лучше, если Вы сделаете сначала reference image. Это Ваш персонаж, которого Вы "сфотографируете" в разных ракурсах, по возможности так, чтобы его рост был понятен. В разных позах. И фон будет нейтрально серым, чтобы свести к минимуму шум и возможности генерировать грязь. Все эти моментальные фото будут в одном графическом файле. Именно к нему обратится модель, когда придёт время сделать картинку по Вашей команде. Как Вы уже поняли, лучше, если Вы сориентируете модель напрямую к файлу, уже находящемуся в облачном хранилище.
Пример промпта для референсного или, если угодно, якорного образа, ниже.
/imagine prompt:Character sheet of a [описание Вашего персонажа], front view, side view, back view, multiple poses and expressions, simple solid grey background, cinematic lighting, high detail, 8k --ar 3:2 --v 6.1
Должен работать. Надеюсь, Вы поняли, что Midjourney не запоминает референсные картинки. Он при каждой генерации загружает их заново. Я не люблю Midjourney в том числе и за это, но игнорировать его неправильно, потому что многие к нему привыкли и считают лучшее врагом хорошего.
Теперь о лучшем.
В Grok, GPT и тем более нано банане эта задача решается проще. Там прямо в чат перетаскивают картинку референса. Если их несколько — например, сцена, внешность и одежда, значит несколько. Далее пишется промпт на то, что откуда брать. Не каждая оболочка API позволяет работать с несколькими файлами в чате, как и многие оболочки позволяют работать и с Midjourney в таком же режиме. Но в последнем случае имейте ввиду, что Вы — заложник разработчика оболочки, который просто переводит Ваши команды в промпт, который я привела выше. Результат будет зависеть от того, насколько разработчик хорошо выполнил свою работу. При задании параметров «вручную» - от того, насколько хорошо Вы понимаете логику модели. А работая с нано бананой, Grok или GPT интерфейс модели ограничивает возможности куражиться над ней. Там даже текст промпта «человекоориентированный».
Специфика есть у каждой из моделей. Grok, например, хотя и может встраивать персонажа в картинку во время генерации, всё-таки предпочитает обрабатывать текст. Я в нём делаю только картинки со сложной физикой движения — человек открывает дверь, например. С несколькими фигурами он тоже справляется неплохо. В плане историзма … Обнять и плакать. Вообще, модель достаточно «горячая» (temperature, то есть допуск отходить от наиболее частотных ответов, у неё относительно высок по сравнению даже с тем же GPT). Это не проявление креативного мышления — модели не обладают творческим началом. Это способность порождать неожиданные химеры и создавать возможность пользователю превращать их в мемы. Чтобы модель помнила Вашего персонажа, в настройках данных нужно непременно включить Personalize.
Вернёмся теперь к банане с её конкретными примерами.
Модель холодная, потому управляемая и понятная. Лишнего она не делает, если промпт "пустой", начинает выдавать артефакты, так что логика и подробности - наше всё. Здесь обязательно нужно начинать с Character Sheet . Для бананы достаточно вида персонажа в фас, профиль, три четверти и затылка. Я добавляю ещё крупный план глаз — радужная оболочка почему-то нами легко запоминается, а модели её норовят перегенерить заново.

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

Но нано банана была бы слишком проста, если бы в ней не появился ещё один фокус. Когда Вы делаете промежуточный референс персонажа, Вы можете прямо в промпте написать: мужчину зовут Вася Пупкин. Для модели это не собственное имя, просто токен, но он важен для неё. Один раз генерируете этого Васю Пупкина. Модель его запомнит. Дальше в промпте так и пишете: «Вася Пупкин рассматривает витрину. Камера сфокусирована на его отражении в стекле.»
Что важно: банана помнит весь диалог с пользователем, примерно на 40 шагов. Поэтому она вовсе не нуждается в присвоению Васе Пупкину каких-то кодов и переменных. Она запоминает контекст беседы.
Как Вы уже поняли, фокус работает стабильно примерно 30 генераций. После 40 лицо может начать меняться. Так что, периодически не забывайте обновлять референс. Разумеется, помнит переговоры с Вами модель исключительно до конца сеанса. Как только Вы выйдете из чата, Вася Пупкин будет забыт.
Аналогичный механизм запоминания персонажей по имени заложен и в GPT (Dalee-3 это умеет). Там это так называемый gen_id, но предупреждаю сразу: модель не такая горячая, как Grok, но и не холодная, много чего необычного выдаёт и работает не всегда стабильно. То есть, если вожжа под мантию попала, она чат просто проигнорирует и будет генерить, как ей более понятно, то есть, как с её точки зрения правильно.
Но вершин достиг Stable Diffusion, точнее, его настольные релизы. Они умеют строить подмодели, в которых «зашиты» параметры персонажей. И у этих подмоделей параметры не изменятся даже после выключения компьютера. И имена их модель помнит без проблем. Киностудии работают именно в таком режиме. Для дома и разовых задач покупать дорогущее железо смысла не вижу — проще перенести генерацию в сеть.
А тем, кто рисует аниме и книжные иллюстрации, тех фичей, которые я тут описала, хватит с головой. Да, люди, делайте бэкапы! Почаще сохраняйте работу. При внезапном сбое Ваша карета имеет подлую привычку превращаться в тыкву, а краски, кредиты и прочее, как называют токены, просто сгорают - не дороже денег они стоят, но покупать новые будете за свои кровные.
Короткий чек-лист «Набор выживания для автора комикса и иллюстратора»:
- MJ:
--crefи--cw 0для смены одежды. - Banana: Имя-токен + Character Sheet.
- безопасность: Сохраняй удачные генерации на свой компьютер (бэкапы!).