Stable Diffusion. От новичка до базовичка.
Этот самый-самый лучший гайд предназначен для личного пользования мной уже установленным Stable Diffusion с темой Kitchen и некоторыми кастомными настройками (но можно экстраполировать и на стандартную тему). Актуален на момент написания 02.05.2023. Его бы дописать для общего пользования, но мне лень.
Часть 1. Ознакомление с интерфейсом.
Шапка встречает нас режимами генерации, настройками и дополнительным функциями.
- Txt2img — основной режим генерации. Название говорит само за себя.
- Img2img — из одной картинки в другую. Пригодятся все знания из Txt2img.
- Extras позволяет увеличить картинку и исправить лицо с помощью нейросетевого алгоритма.
- PNG info — вы можете засунуть туда сгенерированною картинку и оно выдаст вам использованные параметры. Если картинка побывала в ВК, в ТГ или на ещё каких-либо серверах, то у вас не получится , ведь сервисы стирают внутреннюю
EXIFинформацию. - Checkpoint Merger позволяет делать миксы из моделей. Не нажимаем.
- Train позволяет создавать свои модели. Не нажимаем.
- 3D Openpose [plugin] позволяет выставить позу абстрактной модели для дальнейшего использования в ControlNet (типа img2img).
- Infinite Image Browser [plugin] даёт возможность смотреть сгенерированное прямо в браузере. Также, при просмотре файла применяет на него PNG Info.
- Prompt Generator [plugin] — генерация промпта из одной коротко фразы, которая задаёт общий смысл. Не ultimate tool.
- Wildcards manager является частью плагина Dynamic Prompts. Про него позже.
- Settings и Extensions нас почти не интересуют. Но поставьте Kitchen Theme и другие дополнения из гайда сами. В настройках, в quicksettings list пропишите без кавычек "
sd_vae, CLIP_stop_at_last_layers, img2img_color_correction" и удалите всё, что там было до этого. Разберётесь.
Часть 2. Txt2Img. Основные знания по работе с нейросетью.
1. Блок технических параметров генерации
- Sampling method и Sampling steps непосредственно связанны друг с другом. В зависимости от метода, нужно ставить своё кол-во шагов. Также, эти параметры определяют скорость генерации.
К сожалению, тема очень сложная, если пытаться разбираться, что использовать и в каком случае. Но вам вряд ли понадобится что-то кромеDPM++ 2M Karras с 30 steps. Но можете потыкать и посмотреть. - Далее идёт 3 параметра: 1) Restore face; 2) Tiling; 3) Hires. fix.
Первый вредительский при генерации в txt2img, второй для генерации текстур, а вот Hires. fix очень нужная и крутая штука. Позволяет увеличить разрешение.
Включаем галку и у нас появляются дополнительные опции.
С Upscaler ситуация примерно такая же, как и с Sampling method. Поэтому, выбираемR-ESRGAN 4X+для изображений без чётких контуров и его аниме версию для всяких рисунков. Upscale by ставим столько, сколько нам нужно, но в переделах мощности компа. Denoising strength ставим от0.3до0.77(я нахожу оптимальным0.55). - Width и Height отвечают за размер и пропорции картинки. Но с ними не так всё легко. Стартовые изображения, размером сильно большим чем
512x512, имеют тенденцию к генерации многоруких мутантов и множества персонажей. Думаю, не стоит заходить дальше768x768. - Batch count отвечает за очередь генерации (при значении 12, у вас будет генерироваться 12 картинок). Batch size отвечает за кол-во очередей (при батч каунт
12и батч сайз2, у вас будет генерировать 24 картинки в 2 потока). Практика показала, что при Batch size 2 кпд генерации выше. - CFG scale отвечает за соответствие результата промпту. При низких значениях выходит чудная стилизация, а при высоких получается мрак и ужас. Рабочий диапазон от
4до17— поиграйтесь. Я предпочитаю по умолчанию выбирать9. - Seed позволяет контролировать рандомность генераций. По умолчанию, он случайный. Но если вы сгенерировали изображение, оно вам понравилось и вы хотите модифицировать его, добавив что-то в промпт, изменив параметры (кроме разрешения, сид к нему привязан), то скопируйте его (он ниже картинки живёт) и вставьте в поле. Если вы не хотите менять параметры, а хотите поиграть с рандомом, то жмите галочку на Extra и осторожно задайте параметры рандомизации (может пригодиться только variation seed). Есть ещё ресайз сида для сохранения композиции при другом размере, но работает он на силе копиума.
2. Левый скрываемый блок параметров.
- Поля Positive и Negative позволяют удобнее вписывать теги в промпты. Пробуйте и поймёте.
- SD VAE влияет на цветокоррекцию и детализацию — экспериментируйте. Качается отдельно.
- Clip Skip сложный, не буду объяснять. Просто знайте, что в аниме моделька хочет себе клип скип 2. Но если генерит херню или не читает промпт, то ставьте 1. На территорию выше 2 заходить не советую.
3. Правый скрываемый блок параметров характерен тем, что контент для него скачивается отдельно. Например, на https://civitai.com/.
- Textual Inversion позволяет вставлять так называемые эмбединги, которые мы предварительно скачали и засунули в соотв. папочку. А шо такое embedding? Ответ: это некая сумма тегов, которую засунули в одно кодовое слово. Условно,
easynegativeможет содержать много тегов для negative промпта. Сделано ради удобства. - Hypernetworks — работают как более маленькие и топорные версии Lora. В отличие от них, всегда воздействуют на картинку полностью, а не на определённые объекты-токены.
- Checkpoints — наши дорогие и драгоценные модели. Оказывают огромное влияние на выходной результат. У определённых моделей могут быть свои оптимальные параметры использования, которые можно прочитать на официальных ресурсах разработчика.
- Lora — как чекпоинт, но меньше. Вписывается в конец промпта для придания определённого стиля или для генерации определённого персонажа, на которого натренирована лора. Вес лоры лучше сначала выставлять примерно на
0.7.
- "Стрелочка" позволяет загрузить параметры последней использованной генерации.
- "Корзина" — удалить текущие промпты.
- "Планшет с листами" применяет выбранный стиль.
- "Дискета” — сохранить текущий промпт (без настроек) в раздел "стили".
- "Волшебная палочка" — форматирует промпт должным образом. Если с ним всё хорошо, то нажимать не нужно.
5. Наконец, мы подобрались к самой главной части. Промпты. Позитивный и негативный.
Итак, обращаю ваше внимание, что порядок выставления тегов (токенов) играет большую роль. Subject со скрина выше будет приоритетнее для нейросети при генерации изображения, чем Lighting. Но обратите внимание на циферку вверху справа, ведь каждые 75 токенов очередь приоритета сбрасывается! То есть, когда число превысит 75, следующий тег Aboba будет в равном приоритете с Subject. Но самый эффективный результат именно до 75 токенов.
Теперь поговорим про анатомию промпта. Вы можете наблюдать правильную структуру на скрине выше. Но в зависимости от задач, можете менять местами некоторые части. Главное, не пишите что-то в духе: 1girl, night, blue eyes, desert, white hair — этот хаотичный подход вам не поможет. А теперь, давайте разберём каждый элемент по-отдельности:
1) Subject — то, что будет в центре внимания на картинке;
2) Verb — сюжет картинки;
3) Environment — локация, окружение;
4) Emotions of art — задаёт общее настроение картинки;
5) by Artist — стиль какого художника применится;
6) Medium — оказывает огромное влияние на результат. Что-то типа Oil on canvas, watercolor, sketch, photography;
7) Photo Style — влияет на стиль, постановку кадра, освещение и т.д. Что-то типа Polaroid, long exposure, monochrome, GoPro, fisheye, bokeh;
8) Art style — похоже на Medium, но не влияет напрямую на физический метод изображения на холсте. Что-то типа: Manga, fantasy, minimalism, abstract, graffiti;
9) Website with certain pull of images — пытается ориентироваться в генерации на работы с определённых сайтов. Типа Artstation, DeviantArt и т.д;
10) Additional details — то, что вы хотели бы видеть не в фокусе на картинке;
11) Color scheme — цвета, используемые на картинке;
12) Lighting — свет на картинке;
13) Quality — пытается ориентироваться в генерации на иллюстрации с таким разрешением. High definition, 4K, 8K и т.д.
14) Lora — микромоделька, которую загружаем отдельно и добавляем через правую панель доп. сетей.
Это полный список того, что вам может понадобиться, но начинайте потихоньку с двух-трёх позиций, а потом наполняйте уже токенами по мере необходимости. Можно даже попробовать загрузить массив тегов в ChatGPT, а потом сгенерировать промпт по заданным правилам.
А что по Negative prompt? В общем, сюда вписываем всё, что нам не нужно на картинке. В том числе, используем механически — мы не подразумеваем, что хотим плохую картинку при генерации, но у стейбла логика другая и поэтому, пишем что-то в духе worst quality туда. Разумно использовать негативные эмбединги или типовой негатив промпт в качестве основы.
Дополнительный синтаксис промптинга:
- Вы можете собственноручно задавать вес токена, если вам зелёный не такой зелёный или грудь не такая грудастая. Выглядит это следующим образом мы берём тег huge breasts, заключаем его в скобки
(huge breasts)или даже((huge breasts)). Что мы сделали? Мы усилили токены с1до1.1и1.21соответственно. И каждая такая скобочка даёт мультипликативный множитель.
Есть и более контролируемый способ управления:(huge breasts:2). Тут мы сами выставили желаемый вес.
А если хотите уменьшить влияние тега, то вместо(круглых скобок)используйте[квадратные].\(тег\)- экранирование скобок при помощи обратного слеша необходимо если скобки должны являться частью тега, например, при указании имени персонажа с указанием тайтла, в соответствии с его тегом на booru. Делай так:rem \(re:zero\) - Существует возможность смешивать токены или исключать составные части. Особенно пригодится, если нейросеть не знает об определённой вещи или её вообще не существует в природе.
ТегANDпозволит нам смешивать. Ну, хотим мы что-то среднее между котиком и собачкой — пишем (не забывая, что в основе будет первый токен, модифицируемый вторым)cat AND dogи на выходе получим интересный гибрид. Можно использовать для смешивания[Cat : Dog : 0.5], что будет первую половину шагов семплирования генерить кота, а все последующие потратит для воссоздания собаки. Есть ещё способ[Cat | Dog], который пытается генерить кота и собаку поочерёдно, для получения гибрида.
Вообще, потенциал этой функции завораживающий.
Есть и другие специальные токены, но мне кажется, они не достойны упоминания. - Учитывайте то, что у стейбла есть что-то типа ассоциативного аппарата. Поэтому, при генерации
girl with blue eyesвам будет выдавать женщин европеоидной наружности, а приgirl with brown eyesбудут совершенно разные расы. Думаю, причины ясны. - Вы можете использовать эмодзи для промптов и они будут работать правильно.
А сейчас, предлагаю вам список полезных ссылок для качественного промптинга:
- Галереи генераций с промптами от юзеров: Prompthero, Krea, MajinAI, Ptsearch, Lexica, AIbooru(full NSFW)
- Художники: анимешные, демонстрация художников с превьюшками (раз, два и три)
- Теги: группы тегов для аниме, демонстрация разных тегов.
- Ещё демки c 500 художниками: 001 - 100, 101 - 200, 201 - 300, 301 - 400, 401 - 500
6. Мама, я хочу больше крутых базовых фишек!
- Local Latent UpscaLer (LLuL)
Это дополнение позволяет повышать детализацию отдельно взятого участка изображения. Найти его можно под блоком технических параметров. Настраивается элементарно — метод тыка вам всё объяснит.
- Dynamic prompts
Очень мощная весчь! Позволяет обуздать рандом путём добавления своих пуллов токенов и задавания сценариев их использования. Основной функционал замечательно описан в оригинальном гайде, но он довольно громоздкий и я не буду добавлять его сюда. Но ниже я опишу пару крутых и простых функций. Скриншот для понимания.
Magic prompt может разнообразить ваш промпт с учётом контекста используя текстовую нейросеть. Объяснять здесь нечего, кроме "Magic prompt blocklist regex" — это чёрный список тегов при генерации.
I'm feeling lucky! Похоже на прошлую фичу, но вместо нейросети использует семантический поиск вашего промпта на Lexica.art и дополняет его найденными результатами. Если ваш ввод слишком экзотичен, то вы рискуете ничего не найти.
Attention grabber добавляет определённый вес рандомным токенам из вашего промпта. Полезно, если вы имеете годный результат, который хотели бы сделать ещё лучше, но не знаете как.
- Стандартные скрипты Txt2Img. Они могут быть очень полезны в связке с Dynamic prompts. Я прикреплю отличное видео, рассказывающее про их принципы работы.
- Upscale
Здесь долго разбираться и мнения по этому поводу разные, так что я оставлю ссылки. Применять по ситуации и написать в дальнейшем лучший вариант.
Вроде, лучший вариант юзать скрипт SD ultimate upscale в img2img. Апскейлить можно до усрачки и качественно. Вот гайд.
Этот говорит, что он ещё лучше
https://rentry.org/sdupscale
https://dtf.ru/howto/1688004-luchshie-metody-apskeyla-s-pomoshchyu-stable-diffusion
https://rentry.org/sd__upscale
Ещё гайды (туду лист для добавления сюда, хз):
https://rentry.org/dummycontrolnet