Содержание
  1. Что переносит IP-Adapter и почему копия не гарантирована
  2. Подбор совместимых адаптера, базовой модели и image encoder
  3. Последовательность Diffusers: pipeline, адаптер, изображение
  4. set_ip_adapter_scale и ограничения квадратного кропа
  5. Промпт для новой сцены и карточка сравнения
  6. Проверка результата и действия при неудаче
  7. Частые вопросы
Гайды

Stable Diffusion: как использовать референс персонажа

29 октября 2026 · 10 минут чтения

Stable Diffusion: как использовать референс персонажа — подключить IP-Adapter в Diffusers, передать картинку в ip_adapter_image и настроить силу через set_ip_adapter_scale. Адаптер замораживает базовую модель и добавляет слои image cross-attention, поэтому сходство с референсом достигается без дообучения. Точную копию персонажа референс не гарантирует.

Что переносит IP-Adapter и почему копия не гарантирована

В документации Diffusers IP-Adapter описан как лёгкий адаптер, который направляет предобученную диффузионную модель с помощью референсного изображения, сохраняя текстовый промпт. Базовая модель остаётся замороженной, добавляется небольшой набор слоёв image cross-attention. Это делает адаптер практичным для переноса субъекта или стиля с фотографии без fine-tuning.

Схема из документации: текстовый промпт идёт через text encoder, референс — через image encoder, затем text cross-attention (замороженный) и IP-Adapter cross-attention сходятся на денойзере, который тоже заморожен. Веса IP-Adapter обычно занимают около 100 МБ, потому что содержат только веса адаптера. Порядок работы: сначала загрузить базовый pipeline, потом адаптер через load_ip_adapter().

README проекта от Tencent AI Lab описывает IP-Adapter как эффективный и лёгкий адаптер на 22M параметров, который даёт результат, сопоставимый с дообученной моделью image prompt. Адаптер обобщается на кастомные модели, дообученные от той же базовой, и работает вместе с текстовым промптом для мультимодальной генерации.

Что это значит на практике. Адаптер переносит признаки референса — визуальные характеристики, которые улавливает image encoder. Точную геометрию лица, родинку, конкретную причёску он не воспроизводит как копию. Сходство зависит от качества референса, силы адаптера, промпта и базовой модели. Документация Diffusers называет варианты чекпоинтов: Plus выбирают, когда важны детали референса, FaceID — когда нужны identity-эмбеддинги InsightFace вместо CLIP image embeddings.

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

Что переносит адаптер Что остаётся на промпте и модели
Признаки субъекта или стиля с референса Композиция сцены, фон, поза
Влияние через image cross-attention Детализация, которую задаёт базовая модель
Совместимость с текстовым промптом Точная идентичность персонажа

Подбор совместимых адаптера, базовой модели и image encoder

Совместимость берётся из одного официального примера. Документация Diffusers показывает связку: базовая модель stabilityai/stable-diffusion-xl-base-1.0, адаптер из репозитория h94/IP-Adapter, подпапка sdxl_models, вес ip-adapter_sdxl.bin. Для варианта Plus в том же примере используется ip-adapter-plus_sdxl_vit-h.safetensors и image encoder CLIPVisionModelWithProjection из подпапки models/image_encoder.

Ключевое правило: семейство энкодера и вес адаптера должны соответствовать базовой модели. Веса SDXL лежат в sdxl_models, веса SD1.5 — в models. В примере с ControlNet для SD1.5 документация использует базовую stable-diffusion-v1-5/stable-diffusion-v1-5 и вес ip-adapter_sd15.bin из подпапки models. Смешивать эти наборы не стоит.

README Tencent AI Lab фиксирует историю версий: 8 сентября 2023 года вышло обновление IP-Adapter для SDXL 1.0, 23 августа 2023 года — версия с fine-grained features, 30 августа 2023 года — вариант с изображением лица как промптом. В новой версии от 8 сентября 2023 года авторы перешли на CLIP-ViT-H вместо OpenCLIP-ViT-bigG-14: по их экспериментам заметной разницы не нашлось, а меньшая модель снижает расход памяти на инференсе.

Для FaceID README перечисляет экспериментальные версии: FaceID, FaceID-Plus, FaceID-PlusV2, FaceID для SDXL, FaceID-PlusV2 для SDXL и IP-Adapter-FaceID-Portrait. Документация Diffusers указывает, что FaceID нужен, когда требуются identity-эмбеддинги InsightFace.

Задача Базовая модель Вес адаптера Image encoder
Общий референс SDXL stable-diffusion-xl-base-1.0 ip-adapter_sdxl.bin по умолчанию в pipeline
Детали референса stable-diffusion-xl-base-1.0 ip-adapter-plus_sdxl_vit-h.safetensors CLIPVisionModelWithProjection
Лицо, SDXL stable-diffusion-xl-base-1.0 ip-adapter-plus-face_sdxl_vit-h.safetensors CLIPVisionModelWithProjection
SD1.5 с ControlNet stable-diffusion-v1-5 ip-adapter_sd15.bin по умолчанию в pipeline

Последовательность Diffusers: pipeline, адаптер, изображение

Документированный порядок из страницы Diffusers. Сначала создаётся pipeline из базовой модели, затем загружается адаптер, затем задаётся сила, затем передаётся изображение вместе с промптом.

PYTHON21 строка
import torch
from diffusers import AutoPipelineForText2Image
from diffusers.utils import load_image

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
pipeline.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter_sdxl.bin"
)
pipeline.set_ip_adapter_scale(0.8)

image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ip_adapter_diner.png")
pipeline(
    prompt="a polar bear sitting in a chair drinking a milkshake",
    ip_adapter_image=image,
    negative_prompt="deformed, ugly, wrong proportion, low res, bad anatomy, worst quality, low quality",
).images[0]

Референс передаётся в параметр ip_adapter_image вместе с текстовым промптом. Документация показывает этот вызов на примере SDXL и веса ip-adapter_sdxl.bin.

Отдельный документированный шаг — предвычисление эмбеддингов. Метод prepare_ip_adapter_image_embeds() кодирует изображения IP-Adapter в эмбеддинги, которые можно сохранить и переиспользовать. Документация предлагает считать их один раз вместо повторной загрузки и кодирования тех же изображений при каждом запуске pipeline. При повторной загрузке эмбеддингов параметр image_encoder_folder выставляется в None, потому что image encoder для генерации эмбеддингов больше не нужен. Документация также упоминает загрузку эмбеддингов из других источников, например ComfyUI.

Для нескольких референсов документация описывает бинарные маски: IPAdapterMaskProcessor препроцессит маски, а результат передаётся в cross_attention_kwargs с ключом ip_adapter_masks. Каждому изображению IP-Adapter нужна своя бинарная маска.

set_ip_adapter_scale и ограничения квадратного кропа

set_ip_adapter_scale() управляет тем, насколько сильно IP-Adapter направляет генерацию. Документация Diffusers приводит значения: 1.0 применяет адаптер на полной силе, 0.5 обычно балансирует текстовый и image промпты. В примере с SDXL на странице стоит 0.8.

README Tencent AI Lab даёт свою рекомендацию: при использовании только image prompt можно поставить scale=1.0 и text_prompt="" либо общий текстовый промпт вроде «best quality». При понижении scale генерируется больше разнообразных изображений, но они могут быть менее согласованы с image prompt. Для мультимодальных промптов README советует подбирать scale, а в большинстве случаев scale=0.5 даёт хорошие результаты. Для SD 1.5 авторы рекомендуют community-модели.

Масштаб можно задавать по слоям. Документация показывает словарь с блоками down и up, например {"down": {"block_2": [0.0, 1.0]}, "up": {"block_0": [0.0, 1.0, 0.0]}}. Слои, не указанные в словаре, получают 0, то есть IP-Adapter в них отключён. В примере InstantStyle адаптер включается в down block_2 (layout) и up block_0 (style). Документация отмечает: включение адаптера во все слои обычно сильнее следует image prompt и может снижать разнообразие.

Ограничение кропа. README Tencent AI Lab объясняет: изображение по умолчанию центрально кадрируется в image processor CLIP, поэтому IP-Adapter лучше всего работает с квадратными изображениями. Для неквадратных теряется информация за пределами центра. Авторы предлагают просто изменить размер до 224×224 и приводят сравнение crop и resize. Этот вывод относится к описанному в README image processor CLIP.

Параметр Значение из источника Что меняет
set_ip_adapter_scale 1.0 Полная сила адаптера
set_ip_adapter_scale 0.5 Баланс текста и изображения
set_ip_adapter_scale 0.8 Пример на странице Diffusers для SDXL
scale по слоям down block_2, up block_0 Включение адаптера в выбранных слоях
Неквадратный референс resize до 224×224 Сохранение информации за пределами центра

Промпт для новой сцены и карточка сравнения

Задача промпта — перенести персонажа с референса в новую сцену, меняя ровно один документированный параметр за прогон. Ниже учебный пример: он не является измеренным результатом.

ТЕКСТ4 строки
Персонаж с референсного изображения в новой сцене: [ваша сцена].
Сохрани черты лица, причёску и цвет волос с референса.
Стиль: [ваш стиль]. Освещение: [ваше освещение]. Ракурс: [ваш ракурс].
Не меняй личность персонажа, меняй только окружение и позу.

Что менять под себя: сцену, стиль, освещение и ракурс. Один прогон — одно изменение документированного параметра, например set_ip_adapter_scale с 0.8 на 0.5. Остальные входные данные фиксируются: тот же референс, та же базовая модель, тот же вес адаптера, тот же seed.

Карточка сравнения для записи результатов:

Поле Прогон A Прогон B
Референс тот же файл тот же файл
Базовая модель stable-diffusion-xl-base-1.0 stable-diffusion-xl-base-1.0
Вес адаптера ip-adapter_sdxl.bin ip-adapter_sdxl.bin
set_ip_adapter_scale 0.8 0.5
Промпт тот же тот же
Seed тот же тот же
Сходство лица ваша оценка ваша оценка
Фон и композиция ваша оценка ваша оценка
Целостность деталей ваша оценка ваша оценка

Такой формат отделяет влияние промпта от влияния референса: меняется одна строка, остальное зафиксировано. Для нескольких референсов документация Diffusers описывает передачу списка изображений и списка масок, а также комбинацию нескольких IP-Adapter с разными весами, например set_ip_adapter_scale([0.7, 0.3]). Документация приводит рецепт: IP-Adapter Face для согласованных лиц и IP-Adapter Plus для генерации этих лиц в конкретных стилях.

Проверка результата и действия при неудаче

Проверка идёт по трём осям. Сходство лица: сравните черты с референсом при том же ракурсе. Независимость фона: убедитесь, что фон соответствует новой сцене из промпта. Целостность деталей: проверьте руки, пропорции, мелкие элементы. Документация Diffusers в примерах использует negative prompt с перечислением deformed, ugly, wrong proportion, low res, bad anatomy, worst quality, low quality.

Если результат неудовлетворителен, есть документированные рычаги. Изменить set_ip_adapter_scale в сторону 1.0 для более сильного следования референсу или в сторону 0.5 для баланса с текстом. Сменить вес адаптера: Plus, когда важны детали референса, FaceID, когда нужны identity-эмбеддинги InsightFace. Передать квадратный референс или изменить размер до 224×224, если исходное изображение неквадратное. Задать масштаб по слоям, чтобы включить адаптер только в нужных блоках. Добавить ControlNet для структурного контроля: документация показывает комбинацию с depth map и edge map.

Гарантированного лечения нет. README Tencent AI Lab прямо оговаривает: при понижении scale изображения разнообразнее, но менее согласованы с image prompt. Документация Diffusers отмечает, что включение адаптера во все слои может снижать разнообразие. Для сходства лица требуется подобрать референс, промпт и силу адаптера. Ведите карточку сравнения и меняйте по одному параметру за прогон.

Частые вопросы

Что такое stable diffusion референс и зачем он нужен?
Референс — изображение, которое передаётся в IP-Adapter через параметр ip_adapter_image вместе с текстовым промптом. Адаптер направляет предобученную модель с помощью этого изображения, сохраняя текстовый промпт. Базовая модель при этом остаётся замороженной.

Почему референс не даёт точной копии персонажа?
IP-Adapter переносит признаки, которые улавливает image encoder. Точная геометрия лица при этом не гарантируется. Сходство зависит от качества референса, силы адаптера, промпта и базовой модели. README Tencent AI Lab отмечает, что при понижении scale изображения разнообразнее, но менее согласованы с image prompt.

Какие веса и image encoder совместимы с SDXL?
Документация Diffusers показывает для SDXL базовую модель stabilityai/stable-diffusion-xl-base-1.0, подпапку sdxl_models и вес ip-adapter_sdxl.bin. Для варианта Plus используется ip-adapter-plus_sdxl_vit-h.safetensors и CLIPVisionModelWithProjection из подпапки models/image_encoder.

Что делает set_ip_adapter_scale?
Параметр управляет силой влияния адаптера на генерацию. Документация приводит значения: 1.0 — полная сила, 0.5 — баланс текста и изображения. Масштаб можно задавать по слоям словарём с блоками down и up, а неуказанные слои получают 0.

Почему неквадратный референс теряет детали?
README Tencent AI Lab объясняет: изображение по умолчанию центрально кадрируется в image processor CLIP, поэтому информация за пределами центра теряется. Авторы предлагают изменить размер до 224×224 и приводят сравнение crop и resize. Это свойство описанного CLIP processor.

Читайте также

3 материала