Продолжаю пилить своего чат-бота для Stable Diffusion + немного обнажённых египтянок (18+)
Автор: SangoЭти работы начал ещё на прошлой неделе. Желание немного упростить себе жизнь и развлечься кодингом привело к тому что по вечерам трачу часик-другой на кодинг.
К слову — программировать (для себя) я люблю. Это доставляет особое удовольствие, особенно когда написанный тобой код работает и работает так как тебе надо. Это меня радует и развлекает. Поэтому уже несколько лет иногда я сажусь за какие-то личные мини-проектики и посвящаю им несколько дней своей жизни. Например когда я начинал «творить» на АТ, я даже написал крошечный текстовый редактор. Можно было и в блокноте писать, но хотелось вот своего собственного.
В общем проект на пару вечеров тянется уже вторую неделю. Хотя и не сказать что он стал каким-то крутым (костыль на костыле), но моим требованиям и желаниям он отвечает всё больше и больше.
А что это за требования?
Первоначально задуманная цель — работа с промптами из интернета. Есть много сайтов где выкладывают картинки и параметры генерации в виде монолитной строки, например:
magine a bioluminescent purple glowing ethereal enchanted wonderland, soft lighting art by Phil Koch, Meghan Howland, lightings, magic, perfect composition. an ultra hd detailed painting, digital art, Jean-Baptiste Monge style, bright, beautiful, wlop, artgerm und james jean, ultra hd, realistic, vivid colors, highly detailed, UHD drawing, pen and ink, perfect composition, beautiful detailed intricate insanely detailed octane render trending on artstation, 8k artistic photography, photorealistic concept art, soft natural volumetric cinematic perfect light<lora:xl_more_art-full_v1:0.5>
Negative prompt: <lora:badhands:1>ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, body out of frame, blurry, bad anatomy, blurred, watermark, grainy, signature, cut off, draft, closed eyes, text, logo
Steps: 30, Size: 512×904, Seed: 1871405085, Model: sdxlUnstableDiffusers_v7ElectricMind, Version: v1.6.0-127-g102b6617d, Sampler: DPM++ 2M Karras, CFG scale: 7, Clip skip: 2, Model hash: 2a4411ef93, Hires steps: 15, Hires upscale: 2, Hires upscaler: 4x-UltraSharp, Denoising strength: 0.45, «xl_more_art-full_v1: fe3b4816be83», SGM noise multiplier: True
В общем мой бот при вводе такой строки в чатик определяет что это именно параметры генерации (по наличию нескольких ключевых слов), и разбирает её на запчасти. К слову — из всей строки я беру только позитивный и негативный промпты, количество шагов, scale и семплер. Размеры выставляю дефолтные (512 на 1024), seed у меня рандомный, модели свои, часть параметров вообще ещё не изучал для сего)
Соответственно после установки параметров можно запустить прогон по всем моделям (по одной картинке на каждой модели) чтобы посмотреть какая модель даст лучший результат; можно выбрать конкретную модель из списка и запустить прогон на ней в нужном количестве; недавно добавил генерацию по 10 изображений на нескольких выбранных моделях. Плюс можно докинуть в промпт дополнительные слова короткими командами-флагами. Например команда «add portrait» докидывает в промпт «((((portrait, upper body)))),» чтобы отображать только верхнюю часть тела. А команда «add nsfw»... ну тут и так всё понятно, да...
В течении нескольких вечеров с пивом дополнительно прикрутил:
— механизм сессий, который позволяет одной командой удалить не понравившиеся результаты с жесткого диска или наоборот сложить их в отдельную папку (чтобы не искать потом в куче говна неудачных генераций)
— докинул немного валидаций (чтобы бот не падал при некорректных параметрах, хотя он продолжает местами пидарас этакий падать)
— избавился от ненужных функций, которыми не пользуюсь
— сделал работу бота одним процессом вместо двух в первоначальной версии — теряю в устойчивости (ебанётся упадёт одно — ебанётся упадёт всё), зато упрощаю логику
— запихнул весь код в один единственный файл, так что переносить проект (если возникнет такая надобность) будет проще
— переписал механизм работы с флагами, теперь при необходимости добавить боту новый флаг — дело 10 секунд (и одного ребута, но знаю как сделать вообще без ребутов, просто пока что лень)
— добавил возможность изменять количество шагов, значение scale, а также размер генерируемой картинки
— сделал чутка более удобный вывод в телегу, чтобы меньше захламлять чат (хотя хлама еще полно), плюс в случае генерации пачек изображений показывать текущий результат
...избавляться от сторонних библиотек (чтобы всё работало на голом python на стандартной библиотеке) пока не стал. Есть понимание как это сделать без потери большей части функционала, но решил подождать с этим, благо зависимости в python ставятся очень и очень легко (pip — и готово).
В общем проект тихонечко растет и развивается, позволяя в любое время дня и ночи генерировать сиськи всякое разное!
А вчера вечером решил добавит новый режим, по которому работают почти все платные и бесплатные боты — генерацию по запросу. Поэтому прикрутил команду /gen <ваш запрос>...
Да, синтаксис честно
спиздилпозаимствовал у одного ВКшного чат-бота, на который вчера же купил подписку. Решил посмотреть что же он умеет за свои 200 рублей в месяц. Заодно и идейподпиздитьпозаимствовать...
Теперь могу удобно вводить свои собственные хотения, да еще и запрос писать на русском языке (прикрутить перевод через Гугл оказалось делом всего лишь ещё одной библиотеки и двух строчек кода), плюс работают все предыдущие плюшки типа флагов, сессий, настроек параметров. Плюс прогнать это через все модели и опять же выбрать наиболее подходящую. И тэ дэ и тэ пе...
А что дальше в планах?
Само собой прогать пока не надоест или не наскучит. Работаю на телеграмме, но вариант переехать на VK API всё ещё держу в голове. Изучаю одну библиотеку (по сути просто обёртку над webui API) на тему новых запросов и параметров. Надо бы вернуть help, который проебланил потерял при переписывании кода. Докину стили (типа watercolor, scetch, horror, retro, и т.п.). Повысить устойчивость кода. Сделать более простые и понятные команды. Ну и ещё чего-нить придумаю...
Слепил простейший запрос:
портрет красивой голой египетской девушки, верхняя часть тела, топлесс, ожерелье на шее, немес
Почему вообще взял египетскую девушку? Да просто захотел) Немес если что — это шапка египетская такая. А портрет и верхнюю часть тела взял чтобы не смотреть на ручки с десятью пальцами на каждой ладони.
Для начала и для сравнения — что сгенерировал по этому запросу ВКшный бот:
По анимешному смазливо и почти не по-египетски, но всё равно красиво)
А теперь тот же самый запрос в моём боте, прогнанный по восьми разным моделям:
Здесь уже чутка больше египетского... хотя Египет и вышел какой-то... диснеевский (более подходящего слова подобрать не смог). И с шапками беда, хотя и спасибо что не...
А вообще сравнивать ботов (своего и кем-то сделанного) не оч корректно. У покупного бота очевидно:
— большая мощность (протим моего ноутбука и видеокарты на 4 Gb)
— неизвестны параметры генерации (шаги, scale, семплеры, другие параметры)
— вроде бы есть какая-то дополнительная пост-обработка результата.
С другой стороны свой бот:
— бесплатен (лишь бы комп стаблу тянул и интернет был)
— позволяет генерить на многих разных моделях (у покупного бота она одна, заточенная под аниме)
— можно напильником и молотком добавить своих уникальных нужных фишек (что собственно и делаю)
Да и сравнение я задумал просто чтобы был повод сиськи показать