Установка и настройки

IP-Adapter — это модель ControlNet, которая позволяет использовать референс - изображение в качестве подсказки для стиля, элементов и даже лица. Это не объединение вашего описания с картинкой, это рисование в стиле изображённом на картине и используя элементы с него же.  Несмотря на схожесть с описанием назначения препроцессоров Reference, IP-adapter делает всё в разы лучше, о чём вы сами убедитесь далее.

Для использования этого инструмента, нам понадобятся скачать модели по адресу https://huggingface.co/h94/IP-Adapter/tree/main/models

 

Основные настройки которыми мы будем пользоваться:

Control Weight - сила с которой будет копироваться стиль

Starting Control Step и Ending Control Step - Начальный шаг и конечный шаг включения в работу модели ControlNet.

И в inpaint нам понадобится Denoising strength - допустимый предел изменений исходника в соответствии с референсом

А ещё реальное применение есть?

Экспроприируем стиль

Примеры

Это промежуточные экспериментальные варианты.

Верхняя строчка - референс. Вторая строчка - пример с людьми включает в себя негатив и позу на отдельной вкладке Controlnet. Третья вкладка - только 1 токен в подсказке "tractor", без негатива.

Prompt - внутри картинок.

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

Краткие выводы
  • IP-Adapter может копировать не только стиль, но и позу, мимику, цвета референса, разные элементы и их части - в том числе и части тела или одежды.
  • Для лучшего копирования стиля очень важна подсказка, негатив и настройки генерации, далее совокупность этих вещей будем называть Prompt. Стиль копируется и без всего этого, но лучшего результата можно добиться только при использовании настроенного prompt.
  • Для повторения композиции со стиля, можно получить описание, например воспользоваться расширением Interrogator, полученную из него подсказку нужно "приспособить" под свою подсказку.
  • Не забывайте выбрать подходящую модель для генерации, от этого тоже многое зависит.
  • Если на референсе предмет, а вам нужен человек, обязательно укажите это в подсказке, увеличьте вес при необходимости, а лучше всего воспользуйтесь позой и Openpose в ControlNet. Если на референсе мужчина, а нужна на генерации женщина, мы должны обязательно указать это в описании, возможно в негатив добавить мужчину, а так же повысить веса токенов и поместить ближе к началу описания - тем самым "перебить" влияние токена с референса.
  • Если композиция референса не совпадает с генерируемой композицией, то нужно  во-первых уменьшить силу стиля параметром Control Weight и во-вторых запустить его применение после определённого количества шагов используя параметр Starting Control Step.

Основные тесты

Для примера нам понадобится модель для XL или 1.5, модели скачиваются автоматом или вручную по ссылке.

Сценарии использования будут немного отличаться в зависимости от того что требуется:

  • нарисовать новую картинку в стиле референса
  • заменить стиль готовой композиции
  • заменить стиль только у одного из объектов или его части

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

Воспользуемся простейшим Prompt для тестов по которой будет сгенерирован Эталон трактора:

tractor

Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 22, Size: 512x512, Model hash: 338b85bc4f, Model: juggernaut_reborn, Version: v1.8.0

Рекомендуемые, но применяемые с умом настройки.
Общая последовательность действий на вкладке controlnet

Для SD1.5 необходимо выставить настройки:

  • Выбираете основную модель которая может воспроизвести стиль с референса, чем точнее подберёте, тем чётче будет результат.
  • Вставляем в ControlNet референс, естественно включаем расширение, выбираем из групп IP-Adapter препроцессор ip-adapter-auto. В зависимости от основной модели генерации выбираем ip-adapter_sd15_plus для SD1.5. Референс желательно иметь как можно более абстрактный, не связанный с лицом, узнаваемым брендом или неким ярким объектом. Идеальным вариантом для референса - простая фигура на монотонном фоне без лишних деталей.
  • Если Вам нужна определённая поза, действуйте согласно материалу о позах. В нашем же примере мы будем использовать трактор, для него больше важен Seed в котором он похож на то что нужно, без обрезок и дополнительных частей типа пятого колеса, В идеале - использовать настройки с генерации, если они имеются.
  • Обязательно правите подсказку и если это само собой разумеющееся для режима txt2img, то для inpaint во вкладке ima2imq нужно описать объект под маской.
    Таким образом, для нашего примера достаточно написать: tractor.

Теперь самое важное, настройки Controlnet:
Control Weight = 0.5-0.6 (txt2img) - 0.8 (img2img). Чем больше - тем сильнее проявляется стиль, но и больше искажается сама композиция, В режиме img2img этот параметр дополнительно коррелируется с параметром Denoising strength в настройках главного окна, если повышаем Control Weight то нужно понижать Denoising strength но иногда это нужно сделать для как раз увеличения стиля с сохранением объекта.
Starting Control Step=0.1-0.2 - Это процент общего количества шагов, который нужно пропустить, перед применением стиля. Это нужно сделать что бы сохранить нашу композицию, изменив только стиль. Первые шаги самые важные, первые 0.3 важнее оставшихся 0.7.
Control Mode=My prompt is more important - описание важнее стиля, т.к. в самом стиле могут присутствовать элементы несоответствующие нашей композиции.

Для SDXL необходимо подкорректировать настройки:

  • Модель ip-adapter нужно выбрать соответствующую - ip-adapter-plus_sdxl_vit-h

Для img2img, помимо вышеперечисленных моментов, должны дополнительно провести некоторые действия и выставить настройки:

  • Закинуть эталонную картинку в главное окно,
  • Denoising strength=0.75 - значение по умолчанию, отвечает за степень допустимого изменения всей картины в соответствии со стилем. Обычно этого достаточно, если есть искажения композиции, то понижаем. Если стиль не проявляется достаточно сильно, то повышаем. Данный параметр коррелируется с Control Weight и Starting Control Step в настройках Controlnet.
  • Проверяем разрешение картины, оно должно соответствовать эталонному изображению, для этого нажимаем на линеечку в виде треугольника.Для inpaint, помимо всех вышеперечисленных моментов, должны дополнительно провести некоторые действия и выставить настройки:
  • Выделить маской объект или его часть подлежащую стилизации.
  • Mask mode=Inpaint masked - рисовать в маске
  • Inpaint area= whole picture - если нужно перегенерировать всю картину, или only masked - если нужно перегенерировать конкретный участок под маской, В последнем случае разрешение указанное в соответствующей области будет использоваться для участка под маской, а не всей картины, что актуально если нужно перегенерировать небольшую маску и увеличить при этом качество генерации.

txt2img

img2img - inpaint

особенности работы с человеком

В предыдущем разделе мы научились применять стиль к объектам. Однако при детальном рассмотрении выяснится что стилю чего-то не хватает - может яркости, может цветности, может ещё что-то. Для начала попробуем "приспособить" наш предыдущий опыт с объектами к человеку, что бы было с чем сравнить до улучшенного копирования.

Для этого возьмём довольно сложный референс, наиболее яркий пример я нашёл в интернете. Отдельное спасибо автору за Prompt. Напомню, что на нашем сайте все prompt можно посмотреть либо непосредственно в самом материале, либо прочитав exif метаданные внутри изображения.
Дополнительные действия для применения стиля к человеку
  • Если Вам нужна определённая поза, действуйте согласно материалу о позах во второй вкладке. Я для примера использовал готовую позу. В случае применения Openpose можно усилить стиль,
  • Обязательно правьте описание что бы хоть немножко описать свою будущую картину, позу и другие элементы. Например, если на референсе портрет, а Вам нужна другая поза, нужно перебить токен "портрет" своим описанием - например (full body:1.4). Если на референсе "мужчина", а вам нужна женщина, то Вам понадобится перебить этот токен в своём описании добавив в него женщину и вполне вероятно что придётся повысить вес. Так же не забывайте про негатив.
  • Сила стиля референса будет уменьшаться прямо пропорционально длине подсказки и негатива.
  • Усилить стиль можно повысив параметр Control Weight=0.6 и уменьшив Starting Control Step=0.2.

Результат

1people, (full body:1.4), side view, full-length image,
smiling at camera, skin_details, perfect teeth, (detailed face), blushing, detailed glossy eyes, sharp, details, 8k, absurdes, pov, hi res, highly intricate details, analog, raw, cinestill, volumetric lighting, deep rich colors, ((zoomout))

 

Negative prompt: (worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck

 

Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4, Size: 512x768, Model hash: 9aba26abdf, Model: deliberate_v2, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ControlNet 0: "Module: ip-adapter_clip_sd15, Model: ip-adapter_sd15_plus [32cd8f7f], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0.3, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced", ControlNet 1: "Module: dw_openpose_full, Model: controlnet11Models_openpose [73c2b67d], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced", Version: v1.6.0

tmps5ter4ua 00083-4
Как сделать лучше?

КОПИРОВАНИЕ СТИЛЯ с улучшенной ПОДСКАЗКой

  • Для начала закиньте Референс в PNG info - возможно автор молодец и не стал жадничать. Отправляйте полученные данные в txt2img, правьте подсказку, меняйте модель в соответствии с полученной информацией и наслаждайтесь результатом и без ControlNet 😉
  • А вот если у вас нет нужной модели или автор жлоб и специально изменил описание изображения или стёр его. То можно воспользоваться расширением Interrogator предварительно установив его в Автоматик. Это расширение позволяет предложить описание для картинки и проанализировать на предмет применения стиля определённого художника. Однако, внимание: применение данного расширения целесообразно для применения схожих композиций, т.е. ваша генерация должна иметь аналогичные объекты как и на референсе. Если объекты имеют расхождения - нужно учитывать эти моменты как в позитивной подсказке, так и негативной. Включайте голову при редактировании!!!

Т.к. на предыдущем шаге мы получили удовлетворительный результат, нам будет с чем сравнить. Автор картинки с которой мы будем копировать стиль оставил описание - спасибо ему, но мы его использовать не будем, оно здесь для сравнения с описанием из interrogator, вот оригинальный Prompt:

The colorful jelly flew through the air and landed on the young girl, enhancing her mesmerizing appearance., cinematic shot + dynamic composition, incredibly detailed, sharpen, details + intricate detail + professional lighting, film lighting + 35mm + anamorphic + lightroom + cinematography + bokeh + lens flare + film grain + HDR10 + 8K + Roger Deakins, ((cinematic))

Negative prompt: ((3d, cartoon, anime, sketches)), (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), bad anatomy, out of view, cut off, ugly, deformed, mutated, ((young)), EasyNegative, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, glans,extra fingers,fewer fingers, (ugly eyes, deformed iris, deformed pupils, fused lips and teeth:1.2), (un-detailed skin, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime:1.2), text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck,, Watermark, Text, censored, deformed, bad anatomy, disfigured, poorly drawn face, mutated, extra limb, ugly, poorly drawn hands, missing limb, floating limbs, disconnected limbs, disconnected head, malformed hands, long neck, mutated hands and fingers, bad hands, missing fingers, cropped, worst quality, low quality, mutation, poorly, close up, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, blurry, bad anatomy, blurred, watermark, grainy, signature, cut off, draft, blur, drawn, huge calf, bad hands, fused hand, missing hand, disappearing arms, disappearing thigh, disappearing calf, disappearing legs, missing fingers, fused fingers, abnormal eye proportion, Abnormal hands, abnormal legs, abnormal feet, abnormal fingers

Steps: 20, Sampler: DPM2 a Karras, CFG scale: 7, Seed: 1376610259, Size: 1331x1664, Model hash: 565b4cbd77, Model: zavychromaxl_b2, Denoising strength: 0.1, Clip skip: 7, Version: v1.5.1

А вот описание предложенное Interrogator, которое применили при генерации вместо нашего предыдущего описания:

a woman with colorful hair blowing in the wind, stuning fantasy 3 d render, bubbling liquids, colour portrait photograph, feminine beautiful face, floating bubbles, the element woman, mana flowing around it, effervescent, splashes of color

Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4, Size: 512x768, Model hash: 9aba26abdf, Model: deliberate_v2, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, Version: v1.6.0

Теперь сравним результаты с нашим произвольным описанием и результатом через interrogator: 

исходники

результаты

00083-4 00093-4

Начальный Prompt + IP-Adapter + Openpose VS Prompt из Interrogator + IP-Adapter + Openpose 

референс предмет, а генерируется человек

Это вариант посложнее, ибо Interrogator делает описание авто, а нам нужно описание человека. В добавок сам референс перебивает образ человека. 

Самый простой способ выйти из этой ситуации - понизить вес Референса (в нашем примере до 0.5) и ОБЯЗАТЕЛЬНО использовать на второй вкладке OpenPose.

Однако более правильным вариантом будет вдумчивое изменение подсказки и негатива. interrogator - нужен только тогда, когда вы сами не можете описать стиль, применение данного расширения требует экспериментального подтверждения и ручной правки, особенно в случае разных композиций на Вашей генерации и референсе. Например, если на референсе машина а нам нужен человек на генерации, то нужно исключить все моменты связанные с машиной, желательно добавить токен "car" в негатив, а в позитив добавить токен связывающий машину с человеком - "cyborg".

ВАРИАНТ 1

Описание предложенное Interrogator добавляем к "Человеческому", на отдельной вкладке включаем openpose - это обязательно, т.к. благодаря этому рисуется человек, а не авто:

1people, (full body:1.4), side view, full-length image,
smiling at camera, skin_details, perfect teeth, (detailed face), blushing, detailed glossy eyes, sharp, details, 8k, absurdes, pov, hi res, highly intricate details, analog, raw, cinestill, volumetric lighting, deep rich colors, ((zoomout)),
bugatti bugatti bugatti bugatti bugatti bugatti bugatti bugatti bugatti bugatti bugatt, in an arena in movie dune-2021, made of liquid metal, by Ben Enwonwu, hiper detailed, metabaron, qirex, black gold light blue, parking in the street, photo render, wet climate, mercedez benz, future!!


Negative prompt: (worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck


Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4, Size: 512x768, Model hash: 9aba26abdf, Model: deliberate_v2, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ControlNet 0: "Module: ip-adapter_clip_sd15, Model: ip-adapter_sd15_plus [32cd8f7f], Weight: 0.5, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced", ControlNet 1: "Module: dw_openpose_full, Model: controlnet11Models_openpose [73c2b67d], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced", Version: v1.6.0

00108-4 00115-4

Prompt + IP-Adapter + Openpose VS Prompt + Interrogator + IP-Adapter + Openpose 

ВАРИАНТ 2

Описание простое, согласованное с референсом (правильные токены выделил зелёным цветом), openpose - в данном случае дополнительная опция для позы, а не обязаловка:

portrait, woman, cyborg
Negative prompt: car
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4, Size: 512x768, Model hash: 338b85bc4f, Model: juggernaut_reborn, ControlNet 0: "Module: ip-adapter_clip_h, Model: ip-adapter-plus_sd15 [c817b455], Weight: 0.5, Resize Mode: Crop and Resize, Low Vram: True, Processor Res: 512, Guidance Start: 0.1, Guidance End: 1, Pixel Perfect: False, Control Mode: My prompt is more important, Hr Option: HiResFixOption.BOTH, Save Detected Map: True", ControlNet 1: "Module: none, Model: control_v11p_sd15_openpose [73c2b67d], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced, Hr Option: HiResFixOption.BOTH, Save Detected Map: True", Version: v1.8.0

juggernaut_reborn-portrait woman-4-Time_20240407191156 juggernaut_reborn-portrait woman cyborg-4-Time_20240407190550

Prompt (без правильных токенов) + IP-Adapter + Openpose VS Prompt (с правильными токенами) + IP-Adapter + Openpose

несколько вкладок с IP-Adaper

Сравним что будет если использовать одну вкладку с одним референсом или две вкладки с референсом в том же стиле. Смысла в применении нет - т.к. решающее значение будет иметь подсказка и Референс в последней вкладке

00169-4 00176-4

Prompt из Interrogator + IP-Adapter + Openpose VS Prompt из Interrogator + 2 вкладки IP-Adapter с Control Weight = 0.8) + Openpose 

Внимание: для ознакомления с тестами по замене лица, частей лица и прочих элементов с помощью IP-Adapter - перейдите по ссылке на материал по замене лиц с подробным тестированием и сравнением.

Что ещё можно интересного?

Текст на фоне Референса

Ещё можно писать текст встроенный в референс

примеры
Краткие выводы
  • текст делаем крупным
  • шрифт легко различимым с крупными отступами между элементами букв.
  • в качестве референса никогда не берём изображение с лицом. в идеале должен быть арт с чётким стилем.
  • т.к. у нас используется ControlNet то разрешение можно ставить выше обычного
  • текст лучше писать от руки, толстыми линиями с хорошо различимыми чертами. Тест должен быть крупным.
  • буквы и нарисованные элементы на Референсе должны быть физически выполнимы с помощью элементов описанных в описании.
  • Хорошо отрабатывает Preprocessor - scribble_xdog (XDoG Threshold=2) и Model = controlnet11Models_scribble

исходники

полезные материалы

Материалы для Референсов текста и прочее можно накачать с civitai. В частности эти замечательные квадратики были скачаны у пользователя navimixu 

Основные тесты

txt2img

txt2img - воспользуемся Референсом 1 и проверим так ли хорошо отрабатывает IP-Adapter. или проще воспользоваться другими инструментами?

Interrogator БЕЗ IP-Adapter

a plate of spaghetti and hot dog sausages, 2019 trending photo, but with thin, plating, 8l, mm, with full descriptions, featured on pinterest, caidychen, seamless, sparkels

Препроцессор scribble_xdog с параметром XDoG Threshold =1 тестируем на описании полученного из Interrogator.

XDoG Threshold 1 scribble_xdog

Interrogator и Без него + IP-Adapter

Препроцессор scribble_xdog с параметром XDoG Threshold =1 тестируем на описании полученного из Interrogator + IP-Adapter  и тоже самое только с пустым описанием

intergater nointergator

Тест семплеров

Тест препроцессоров без IP-adapter

Подкорректированное описание - удалил лишнее:

spaghetti and hot dog sausages, 2019 trending photo, with full descriptions, featured on pinterest, caidychen, seamless, sparkels

Небольшой вывод:

  • Буковки следует делать покрупнее, не сливающиеся.
  • Прежде чем изобретать велосипед с текстом и IP-Adapter, может следует попробовать обычным описанием, в ControlNet вставляем изображение текста, выставляем Model = ip-adapter_sd15_plus, а препроцессор один из тестируемых: canny,  pidnet_sketch, pidnet_scribble, scribble_xdog, lineart,lineart_standart и т.д. - тот что чётче отделяет буквы и их элементы.

Практика и действительно полезные примеры

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

Квадратики и прочее можно накачать с civitai. В частности эти замечательные квадратики были скачаны у пользователя navimixu 

scribble_xdog

  • Control Weight=0.5
  • Starting Control Step=0.3
  • Основная модель Deliberate2
  • XDoG Threshold=40
tmp8xjq5ov0 deliberate_v2-empty-4-time_20231026211734

scribble_xdog

  • Control Weight=0.5
  • Starting Control Step=0.3
  • Основная модель Deliberate2
  • XDoG Threshold=3
tmp8xjq5ov0 deliberate_v2-empty-4-Time_20231027105342

scribble_xdog

  • Control Weight=0.5
  • Starting Control Step=0.3
  • Основная модель Deliberate2
  • XDoG Threshold=3
tmp8xjq5ov0 deliberate_v2-empty-4-Time_20231027091444

scribble_xdog

  • Control Weight=0.5
  • Starting Control Step=0.3
  • Основная модель Deliberate2
  • XDoG Threshold=3
tmp8xjq5ov0 deliberate_v2-empty-4-Time_20231027091404

Добавить комментарий