2

SD Studio: свой Midjourney на своей видеокарте с LLM-помощником⁠⁠

Серия Thread Of The World
Скриншот программы

Скриншот программы

Краткое резюме: это не туториал, как работать с Automatic1111. Тут про open source desktop приложение, которое позволяет работать с A1111 просто.

И это не аналог ComfyUI. Другое приложение с другим функционалом.

Сперва — откуда взялась идея?

Мы с женой делаем текстовую игру по её фэнтези-вселенной. Что-то вроде совместного хобби: ей интересно писать, мне нравится программировать. Но суть не в этом. Рисовать никто из нас не умеет, а картинки в тексте нужны.

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

Первые шаги с Stable Diffusion

Для работы с локальным SD есть несколько инструментов. Взял первый и, наверное, самый популярный — Automatic1111. Сгенерировал — получил полную фигню. Начал читать, что пишут. Оказывается, уже создано огромное количество предобученных моделей и LoRA для добавления тех функций, что модель не умеет. Результат стал сильно лучше.

Дальше — промпты, то есть текстовое описание того, что мы должны получить на итоговом изображении. Там тоже есть свои рекомендации. Модель не читает мысли пользователя, ей нужно более точно и в понятном ей виде предоставить описание. Дополнительно разбираемся с настройками генерации — samplers, steps и т.д. Всё осуществимо, но получаем другую проблему: для генерации одной картинки мы очень долго подбираем все эти значения и тексты.

Первая автоматизация

Чтобы упростить процесс, я сделал следующее. Для наполнения контента в игре есть админка. Дополнительно в отдельной папке лежат файлы со всем лором книги/игры.

В итоге я написал код для связи с запущенными на игровом ПК в локально сети ИИшками.

— для общения с локальной LLM (Large Language Models, проще говоря, программа которая использует предварительно обученные модели ИИ и доступные для запуска локально), которая по нужному запросу берёт необходимый контент из папки с лором и составляет корректный промпт для SD.

— для SD, где заданы предварительные настройки: используемая модель, LoRA и вместе с промптом всё это отправляется в SD, и мы получаем итоговую картинку. Несколько попыток, потому что с первого раза вряд ли получим нужное. Получаем более-менее адекватный результат и идём в Photoshop — убрать лишнее, сжать и т.п.

Уже лучше, но не идеально.

В определённый момент я захотел подобное, но для другого контекста, с другой моделью и прочим. Можно переписать под нужды. А если опять захочу что-то другое? Снова переписывать?

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

Почему десктоп

Что мне было важно: работаю я на Linux, жена на Windows, на диване я лежу с макбуком. LLM и SD запущены на игровом ПК с Windows.

Можно было сделать веб-проект, но мне захотелось десктоп-приложение.

В итоге получилась SD Studio.

Как это выглядит и работает

Генерация по тексту

На странице Generate выбрали пресет (ниже напишу подробнее), пишем текст, жмём Generate, ждём и получаем результат.

Наш кот

Наш кот

Что такое пресеты? По сути, это сгруппированные настройки с предустановками: какие модели, LoRA-файлы и параметры использовать для генерации картинки. Плюс там есть свой промпт, на основе которого LLM дорабатывает ваше текстовое описание, чтобы получить итоговое изображение в стиле пресета — аниме, кино, реалистичное и прочее.

Если не знаете, какой пресет выбрать — на вкладке Generate есть кнопка для рекомендации. LLM знает все ваши пресеты и советует лучший.

И ещё: на странице с пресетами отдельной вкладкой можно объединять несколько пресетов для генерации итогового изображения — Pipeline. Проще говоря, формируем картинку первым пресетом и дорабатываем другим.

Какой в этом смысл? Модели обучены по-разному, и фантазия у них сильно отличается. Очень много моделей, которые обучались на корейских девушках — умеют идеально рисовать кожу, людей, объекты, но с фантазией у них беда. А есть более простые в плане картинки, но с богатой фантазией. Pony, к примеру, очень хорошо придумывает, но результат сильно анимешный. Поэтому такую модель можно объединить в пайплайн и получить богатую на детали и красивую по реализации картинку.

Интеграция с локальной LLM

Есть провайдеры для работы с:

  • LM Studio — я начинал работу именно с этим инструментом

  • Ollama — сейчас использую, так как работает демоном, меняет модели по запросу и имеет удобный CLI

  • llama.cpp — самый шустрый инструмент, но с критичным для меня минусом: не меняет модели запросом через API

Зачем менять модели? В настройках SD Studio надо указать две: для генерации промптов из описания и для анализа изображений.

Generate From Image

Получили картинку, всё хорошо, но хочу другого кота. Открываем From Image.

Наши коты

Наши коты

Главные возможности:

  • Перерисовать картинку нужным пресетом

  • Inpaint — изменить часть изображения

  • Smart Remove — по сути тот же inpaint, но отправляет выделенную часть в LLM. LLM пытается понять, что там и какой фон вокруг, составляет промпт для inpaint и отправляет его в SD. В целом работает, но иногда лучше сделать inpaint руками.

Сессии

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

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

Multi-Scene

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

Я перебирал различные варианты из интернета для составления правильных промптов. Но реально работающим вариантом оказалось создание сцен генерацией нескольких элементов. Пишем текстовое описание сцены, LLM находит описание фона и всех персонажей и на форме предлагает разместить найденных персонажей — дополнительно можно поправить промпты для каждого.

Мульти-сцена

Мульти-сцена

Потом генерируется несколько изображений: для фона, для каждого персонажа отдельно в заданном пресете. Дальше появляется ещё один инструмент — Rembg (если мультисцены не нужны, можно его не использовать, да и SD сама может вырезать, но будет коряво). Rembg аккуратно вырезает персонажа и вставляет на фон. И ещё один шаг — обрабатываем итоговое изображение нужным пресетом ещё раз, иначе видно, что персонажи «вклеены» в картинку.

Детский режим

Отдельная фича - в настройках есть возможность включить KIDS-mode. Задаем пин-код и у ребенка станут не досутпны некоторые функции программы и, дополнительно, LLM пытается ограничивать опасные запросы.

Остальные инструменты

Batch — генерация картинок кучей. Иначе приходится долго тыкать Regenerate, пока не получим нужное. А так будет 10 картинок, из которых выбираем лучшую. И главное: работа с локальным GPU — это не очень быстро. Можно настроить Batch и пойти заниматься своими делами.

Compare — генерация промпта выбранными моделями, пресетами или пайплайнами. Видим превьюшки и можем подобрать нужный стиль.

Стильные коты

Стильные коты

File Browser — чаще всего требуется работать с одной папкой, например, в пет-проекте, где мы храним изображения. Из File Browser можно сразу загрузить картинку, к примеру, в Generate From Image.

Для чего еще использую SD Studio?

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


SD Studio — open-source проект под лицензией AGPL v3. Все данные остаются на вашей машине, облако не используется.

GitHub: https://github.com/Zazza/sd-ai

Стоит добавить, у меня локально RTX 4070 Ti Super 16GB Vram, на видеокарте с меньшим объемом видеопамяти не тестировал, и вряд ли стоит это делать.

1
Автор поста оценил этот комментарий
Усложнил ты

Я на макбуке про поднял олламу + open web ui + comfyui

Оллама общается с комфи по апи через tool, в комфи конструктор нод и 5 моделей для генерации картинок - от аниме до реалистичной

Промпт прям в чате прошу у нейронки, потом активирую нужный тулз в чате и переотправляю промпт - получаю картинку в чат

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

Можно и в самом комфи все делать, но я захотел соединить

К сожалению я так и не разобрался как принимать картинки или файлы в openwebui- чтобы передавать по апи в комфи и дальше с ними работать, но для генерации по промпту этого и не надо
раскрыть ветку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества