> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-ru/lico-i-identichnost/ip-adapter.md).

# IP-Adapter

Используйте изображения как подсказки для генерации Stable Diffusion.

{% hint style="success" %}
Все примеры можно запускать на GPU-серверах, арендованных через [маркетплейс CLORE.AI](https://clore.ai/marketplace).
{% endhint %}

## Аренда на CLORE.AI

1. Перейдите на [маркетплейс CLORE.AI](https://clore.ai/marketplace)
2. Отфильтруйте по типу GPU, объёму VRAM и цене
3. Выберите **On-Demand** (фиксированная ставка) или **Spot** (цена ставки)
4. Настройте свой заказ:
   * Выберите Docker-образ
   * Установите порты (TCP для SSH, HTTP для веб-интерфейсов)
   * При необходимости добавьте переменные окружения
   * Введите команду запуска
5. Выберите способ оплаты: **CLORE**, **BTC**, или **USDT/USDC**
6. Создайте заказ и дождитесь развертывания

### Получите доступ к своему серверу

* Найдите данные для подключения в **Мои заказы**
* Веб-интерфейсы: используйте URL HTTP-порта
* SSH: `ssh -p <port> root@<proxy-address>`

## Что такое IP-Adapter?

IP-Adapter позволяет использовать изображения в качестве подсказок:

* Используйте референсные изображения для управления генерацией
* Сочетайте с текстовыми подсказками
* Перенос стиля и перенос содержания
* Работает с SD 1.5 и SDXL

## Типы адаптеров

| Адаптер              | Сценарий использования         | VRAM  |
| -------------------- | ------------------------------ | ----- |
| IP-Adapter           | Общая генерация по изображению | 8 ГБ  |
| IP-Adapter-Plus      | Более высокое качество         | 10 ГБ |
| IP-Adapter-Face      | С акцентом на лицо             | 10 ГБ |
| IP-Adapter-Full-Face | Полные детали лица             | 12GB  |

## Быстрое развёртывание

**Docker-образ:**

```
pytorch/pytorch:2.11.0-cuda12.8-cudnn9-devel
```

**Порты:**

```
22/tcp
7860/http
```

**Команда:**

```bash
pip install diffusers transformers accelerate && \\
python ip_adapter_app.py
```

## Доступ к вашему сервису

После развертывания найдите свой `http_pub` URL в **Мои заказы**:

1. Перейдите на **Мои заказы** страницу
2. Нажмите на свой заказ
3. Найдите `http_pub` URL (например, `abc123.clorecloud.net`)

Используйте `https://YOUR_HTTP_PUB_URL` вместо `localhost` в примерах ниже.

## Установка

```bash
pip install diffusers transformers accelerate
```

## Базовая генерация по изображению

```python
from diffusers import AutoPipelineForText2Image
from diffusers.utils import load_image
import torch

pipe = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

# Загрузить IP-Adapter
pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter_sdxl.bin"
)

# Загрузить референсное изображение
ip_image = load_image("reference.jpg")

# Сгенерировать по подсказке изображения
image = pipe(
    prompt="кошка в том же стиле",
    ip_adapter_image=ip_image,
    num_inference_steps=30
).images[0]

image.save("output.png")
```

## Перенос стиля

```python
from diffusers import AutoPipelineForText2Image
from diffusers.utils import load_image
import torch

pipe = AutoPipelineForText2Image.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
).to("cuda")

pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="models",
    weight_name="ip-adapter_sd15.bin"
)

# Референс стиля (например, картина Ван Гога)
style_image = load_image("van_gogh_starry_night.jpg")

# Сгенерировать новый контент в этом стиле
image = pipe(
    prompt="современный городской силуэт",
    ip_adapter_image=style_image,
    num_inference_steps=30,
    guidance_scale=7.5
).images[0]

image.save("city_van_gogh.png")
```

## Адаптер лица

Для генерации с акцентом на лицо:

```python
from diffusers import AutoPipelineForText2Image
from diffusers.utils import load_image
import torch

pipe = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

# Загрузить адаптер для лиц
pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter-plus-face_sdxl_vit-h.bin"
)

# Референсное лицо
face_image = load_image("face_reference.jpg")

# Сгенерировать портрет
image = pipe(
    prompt="портретная живопись, масло на холсте, музейное качество",
    ip_adapter_image=face_image,
    num_inference_steps=30
).images[0]

image.save("portrait.png")
```

## Комбинирование нескольких изображений

```python
from diffusers import AutoPipelineForText2Image
from diffusers.utils import load_image
import torch

pipe = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter_sdxl.bin"
)

# Несколько референсных изображений
images = [
    load_image("style1.jpg"),
    load_image("style2.jpg")
]

# Сгенерировать, смешивая оба
image = pipe(
    prompt="пейзажная живопись",
    ip_adapter_image=images,
    num_inference_steps=30
).images[0]
```

## Управление масштабом

```python

# Установить силу адаптера
pipe.set_ip_adapter_scale(0.6)  # 0.0 до 1.0

# Низкий масштаб = больше влияния текстовой подсказки

# Высокий масштаб = больше влияния подсказки изображения

# Масштабирование по каждому изображению при нескольких изображениях
pipe.set_ip_adapter_scale([0.7, 0.3])
```

## С ControlNet

```python
from diffusers import (
    AutoPipelineForText2Image,
    ControlNetModel
)
from diffusers.utils import load_image
import torch

# Загрузить ControlNet
controlnet = ControlNetModel.from_pretrained(
    "lllyasviel/control_v11p_sd15_canny",
    torch_dtype=torch.float16
)

pipe = AutoPipelineForText2Image.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    controlnet=controlnet,
    torch_dtype=torch.float16
).to("cuda")

# Загрузить IP-Adapter
pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="models",
    weight_name="ip-adapter_sd15.bin"
)

# Изображение стиля
style_image = load_image("style.jpg")

# Изображение управления (карта границ)
control_image = load_image("edges.png")

image = pipe(
    prompt="детализированная иллюстрация",
    image=control_image,
    ip_adapter_image=style_image,
    num_inference_steps=30
).images[0]
```

## Интерфейс Gradio

```python
import gradio as gr
import torch
from diffusers import AutoPipelineForText2Image
from diffusers.utils import load_image

pipe = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter_sdxl.bin"
)

def generate(reference_image, prompt, negative_prompt, scale, steps):
    pipe.set_ip_adapter_scale(scale)

    image = pipe(
        prompt=prompt,
        negative_prompt=negative_prompt,
        ip_adapter_image=reference_image,
        num_inference_steps=steps
    ).images[0]

    return image

demo = gr.Interface(
    fn=generate,
    inputs=[
        gr.Image(type="pil", label="Референсное изображение"),
        gr.Textbox(label="Подсказка", value="высокое качество"),
        gr.Textbox(label="Негативная подсказка", value="уродливый, размытый"),
        gr.Slider(0.0, 1.0, value=0.6, label="Масштаб IP-Adapter"),
        gr.Slider(10, 50, value=30, step=1, label="Шаги")
    ],
    outputs=gr.Image(label="Сгенерированное изображение"),
    title="Генерация по изображению с IP-Adapter"
)

demo.launch(server_name="0.0.0.0", server_port=7860)
```

## Пакетный перенос стиля

```python
from diffusers import AutoPipelineForText2Image
from diffusers.utils import load_image
import torch
import os

pipe = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter_sdxl.bin"
)

# Референс стиля
style_image = load_image("art_style.jpg")

# Объекты для генерации
subjects = [
    "горный пейзаж",
    "город ночью",
    "лес осенью",
    "океанский закат",
    "заснеженная деревня"
]

output_dir = "./styled_outputs"
os.makedirs(output_dir, exist_ok=True)

for i, subject in enumerate(subjects):
    print(f"Генерация {i+1}/{len(subjects)}: {subject}")

    image = pipe(
        prompt=subject,
        ip_adapter_image=style_image,
        num_inference_steps=30
    ).images[0]

    image.save(f"{output_dir}/styled_{i:03d}.png")
```

## Сценарии использования

### Стиль предметной фотографии

```python

# Референс: профессиональное фото товара
style = load_image("product_photo_reference.jpg")

image = pipe(
    prompt="красные кроссовки на белом фоне",
    ip_adapter_image=style,
    num_inference_steps=30
).images[0]
```

### Художественный перенос стиля

```python

# Референс: известная картина
style = load_image("monet_painting.jpg")

image = pipe(
    prompt="портрет женщины в саду",
    ip_adapter_image=style,
    num_inference_steps=30
).images[0]
```

### Согласованность бренда

```python

# Референс: изображение из гайдлайна бренда
style = load_image("brand_style.jpg")

prompts = [
    "баннер для главной страницы сайта",
    "пост для соцсетей",
    "заголовок email-рассылки"
]

for prompt in prompts:
    image = pipe(prompt=prompt, ip_adapter_image=style).images[0]
```

## Оптимизация памяти

```python
pipe.enable_model_cpu_offload()
pipe.enable_vae_slicing()

# Для очень ограниченного объёма VRAM
pipe.enable_sequential_cpu_offload()
```

## Производительность

| Модель                 | GPU      | Время  |
| ---------------------- | -------- | ------ |
| SD 1.5 + IP-Adapter    | RTX 3090 | \~5 с  |
| SDXL + IP-Adapter      | RTX 3090 | \~12 с |
| SDXL + IP-Adapter      | RTX 4090 | \~8 с  |
| SDXL + IP-Adapter-Plus | RTX 4090 | \~10 с |

## Устранение неполадок

### Стиль не применён

* Увеличьте ip\_adapter\_scale
* Используйте более чёткое референсное изображение
* Убедитесь, что адаптер загружен правильно

### Слишком сильное влияние референса

* Уменьшите ip\_adapter\_scale
* Более конкретная текстовая подсказка
* Увеличьте guidance\_scale

### Проблемы с памятью

* Включите выгрузку на CPU
* Используйте SD 1.5 вместо SDXL
* Более низкое разрешение

## Оценка стоимости

Типичные цены на маркетплейсе CLORE.AI (по состоянию на 2024 год):

| GPU        | Почасовая ставка | Дневная ставка | 4-часовая сессия |
| ---------- | ---------------- | -------------- | ---------------- |
| RTX 3060   | \~$0.03          | \~$0.70        | \~$0.12          |
| RTX 3090   | \~$0.06          | \~$1.50        | \~$0.25          |
| RTX 4090   | \~$0.10          | \~$2.30        | \~$0.40          |
| A100 40 ГБ | \~$0.17          | \~$4.00        | \~$0.70          |
| A100 80 ГБ | \~$0.25          | \~$6.00        | \~$1.00          |

*Цены зависят от провайдера и спроса. Проверьте* [*маркетплейс CLORE.AI*](https://clore.ai/marketplace) *актуальные тарифы.*

**Сэкономьте деньги:**

* Используйте **Spot** рынок для прерываемых задач — примерно треть серверов оценивает spot-цены ниже on-demand (медиана \~13% скидки), остальные совпадают с ними
* Платите **CLORE** токенами
* Сравните цены у разных провайдеров

## Дальнейшие шаги

* [InstantID](/guides/guides_v2-ru/lico-i-identichnost/instantid.md) - Идентичность лица
* [ControlNet](/guides/guides_v2-ru/obrabotka-izobrazhenii/controlnet-advanced.md) - Управление структурой
* Stable Diffusion WebUI - расширение IP-Adapter


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/lico-i-identichnost/ip-adapter.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
