Как быстро расширить границы изображения в Stable Diffusion, Automatic1111. Быстрый outpainting

Как быстро расширить границы изображения в Stable Diffusion, Automatic1111. Быстрый outpainting

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

В связи с этим я вспомнил про такое расширение, как depthmap2mask, которое само будет создавать маску, а нам останется лишь поправить мелкие косяки и выделить лицо.

Что нам понадобится?

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

Также нужно поставить расширение depthmap2mask — устанавливается оно через раздел Extensions.

Устанавливаем расширение
Устанавливаем расширение

Собственно, это все, нам нужно лишь расширение и автоматик.

Перейдем к практике

Первым делом либо генерируем персонажа на каком-либо фоне, либо загружаем уже существующее изображение в раздел img2img. Я создам свою девчулю с нуля, поэтому перемещусь во вкладку txt2img.

Моя тестовая генерация
Моя тестовая генерация

Далее переношу ее в раздел img2img, где нам и понадобится применить скачанное расширение. Предупрежу, что модели из этого расширения будут скачиваться долго, поэтому запаситесь терпением.

Выбираем из представленных алгоритмов самый первый — dpt_beit_large_512, а уровень Denoising Strength выставляем на 0.

Еще нужно поставить галочку в пункте Invert DepthMap, чтобы предметы ближе были черными, а дальние белыми — так правильно, даже писал гайд на эту тему.

Настройки для генерации маски
Настройки для генерации маски

Как только все сделали, жмем Generate. У нас появится исходное изображение и его маска.

Генерируем маску
Генерируем маску

Переходим во вкладку Inpaint upload и наверх загружаем исходник, а вниз маску.

Загружаем маску
Загружаем маску

Далее кликаем по разделу Sketch, и перетаскиваем в него нашу карту глубины. Не забывайте отключить расширение, оно нам больше не понадобится. Кистью закрашиваем поля по бокам белым цветом, а лицо черным.

Закрашиваем нужные участки
Закрашиваем нужные участки

Теперь меняем нашу предыдущую маску на новую.

Заменяем маску
Заменяем маску

И финальный штрих — ставим Resize mode на Resize and fill, чтобы края по бокам изображения заливались новым содержимым. Далее выставляем ширину нашего изображения, к примеру, на 1216 пикселей, а параметр Denoising Strength заменяем на 0,65 или выше. Если ставить деноиз ниже этого значения, то пиксели по краям будут растягиваться, что нам не подходит.

Настройки для outpainting
Настройки для outpainting

Вот, что получилось у меня во второй раз. Работает данный метод хоть на реалистичных фото, хоть на артах — совершенно без разницы.

Необработанное изображение
Необработанное изображение

Это изображение уже можно дорабатывать в разделе Inpaint, выставив параметр Inpaint area на Inpaint masked. Вот что у меня получилось после обработки.

Принцип такой: вы закрашиваете сначала лицо — работаете с ним, затем перекидываете полученный результат обратно в Inpaint, после чего дорабатываете уже украшение на груди, и т.д.

Обработанное изображение
Обработанное изображение

Для тех, кому интересно, стиль я использовал художницы Kelly Vivanco.

Congratulations, вы справились!

Теперь кто-то умеет расширять границы фото и генераций с помощью лучшего фреймворка для Stable Diffusion на сегодняшний день. Буду рад обратной связи и вашим комментариям, а также приглашаю в свой телеграм чат, где отвечу на все вопросы касаемо SD.

Буду рад видеть вас в телеграм-канале, где я собираю лучшие гайды по Stable Diffusion. А если не найду, то пишу сам.

2929
14 комментариев

Добрый день.
При использовании скрипта для получения маски постоянно вылетает ошибка
AttributeError: 'Blocks' object has no attribute 'drop_path'

С чем это может быть связанно?

3
Ответить

А так можно руки и ноги дорисовать?

2
Ответить

Да, это возможно, но придется сделать побольше генераций, чтобы выбрать наилучший результат

Ответить

Что на голове? Наушники, уходящие в небо?

2
Ответить

Как маску из Sketch, после того как мы там белые края сделаем, вставить обратно в Inpaint Upload, чтобы продолжить следовать гайду? Шаг не описан, непонятно. Кнопки такой нет - можно посылать только в inpaint и inpaint sketch.

1
Ответить

нужно маску отрендерить на деноизе 0, а потом закинуть в inpaint upload перетаскиванием

Ответить

Есть прикольный скрипт poors man outpainting, он расширяет изображение, попробуйте. Если я правильно понял что вы этого хотите добиться, конечно.
https://stable-diffusion-art.com/outpainting/

1
Ответить