ControlNet и IP‑Adapter: точный контроль генерации

Задача страницы. Показать, как добиваться управляемой генерации изображений (и видео‑кадров) с помощью ControlNet и IP‑Adapter: какие есть типы кондиционирования, как настраивать веса/расписания влияния, какой VRAM/время нужны, как построить пайплайны в ComfyUI и Automatic1111, как бенчмаркать качество и стабильность, и как это внедрить в проде.

TL;DR

  • ControlNet задаёт структуру/геометрию (эскиз, канни, поза, глубина, линии, сегментация).
  • IP‑Adapter переносит стиль/референс и/или идентичность с изображения, держит композицию базовой модели.
  • На SDXL добавление 1 ветки ControlNet обычно даёт +2–4 ГБ VRAM и +15–35% времени; на SD3 — +3–6 ГБ и большее замедление.
  • Для стабильности используйте расписание влияния (ранний «захват» структуры, затем «уход» влияния) и лимиты разрешений/шагов.

Связанные страницы: /solutions/image-video-gen//solutions/image-video-gen/comfyui//solutions/image-video-gen/automatic1111//solutions/image-video-gen/sdxl//solutions/image-video-gen/sd3//solutions/image-video-gen/upscaling//solutions/image-video-gen/face-restoration//solutions/image-video-gen/video//solutions/image-video-gen/batch-render/ • инфраструктура: /solutions/performance-tuning//solutions/cost-planner//solutions/monitoring-logging//solutions/llm-inference/observability//solutions/llm-inference/streaming//solutions/storage-data/

Когда выбирать ControlNet, IP‑Adapter или ничего

  • ControlNet (структура): нужен фиксированный контур/поза/планировка — каталоги, продуктовые фото, архитектурные планы, тех. иллюстрации, комикс‑стили, анимационные breakdown’ы.
  • IP‑Adapter (стиль/идентичность): нужны стилизация по референсу, совпадение цветовой палитры/освещения, мягкая передача айдентики лица/объекта без жёсткой привязки к позе.
  • Без кондиционирования: быстрые эскизы, свободное творчество, когда контроль мешает разнообразию.

Типы кондиционирования и сценарии

**Тип** **Что задаёт** **Частые сценарии** **Препроцессор/источник**
**Canny/Edge** Контур, границы Рекреация эскиза, предмет на белом фоне, шейпы Края из исходной картинки или эскиза
**Pose/Skeleton** Положение/жесты человека Каталоги одежды, сцены с людьми Детектор позы, ключевые точки
**Depth/Normal** Глубина/рельеф Архвиз, продукты, интерьеры Карта глубины/нормалей
**Lineart/Anime** Чистые линии Комиксы/манга‑стили Лайн‑арт из сканов/фильтров
**MLSD/Lines** Прямые/чертёж Архитектура, UI‑черновики Детектор линий
**Tile/Detail** Детализация по тайлам Увеличение резкости/узоров Плиточная карта/тайловая сеть
**Segmentation** Семантические области Замена фона/цвета, маскирование Маска сегментации
**IP‑Adapter (Style)** Цвет/палитра/стиль Брендинг, унификация каталога Референс‑изображение
**IP‑Adapter (Identity)** Идентичность/фейс Портреты, герои/маскоты Референс лица/объекта

Параметры влияния: как не «пережать» Обозначим: w — вес ControlNet/IP‑Adapter (0..1), t∈[0,1] — нормированная линия времени шагов.

Распределение влияния по шагам

w_eff(t) = w * schedule(t; start, end, shape)

# start/end ∈ [0,1], shape ∈ {"linear","cosine","exp"}

Рекомендации:

  • Структура (Canny/Depth/Line): w=0.6–1.0, start=0.0, end=0.5–0.7, shape=linear — сильный «захват» в начале, мягкий «отпуск» к концу.
  • Поза (Pose): w=0.5–0.8, end=0.6–0.8 — сохранение позы до середины/конца.
  • Стиль (IP‑Adapter): w=0.3–0.7, start=0.0–0.2, end=1.0 — стиль «лежит» поверх всей траектории; для строгого стиля повышайте w.
  • Идентичность (IP‑Adapter Face): w=0.5–0.9, можно заморозить ранние слои CLIP‑условий.

Препроцессоры (для ControlNet)

  • Canny: low/high thresholds → не делайте контуры слишком «жирными»; чаще 100/200 (старт), варьируйте под контент.
  • Pose: чистите «лишние» точки/сегменты, чтобы не вносить шум.
  • Depth/Normal: избегайте «ступеней» — сглаживание перед подачей помогает.

Влияние на VRAM и время

**База** **+1 ветка ControlNet** **+IP‑Adapter** **Комментарий**
**SD 1.5 (fp16)** +1–3 ГБ, +10–25% времени +0.5–1.5 ГБ, +5–15% зависит от разрешения/шагов
**SDXL (fp16)** **+2–4 ГБ**, +15–35% **+1–2 ГБ**, +10–20% refiner добавит ещё
**SD3 (fp16)** **+3–6 ГБ**, +20–40% **+1.5–3 ГБ**, +15–25% закладывайте запас

Планируйте диски: локальный NVMe‑кэш весов/модулей даёт меньше «холодных стартов» (см. /solutions/storage-data/).

ComfyUI: пример графа с ControlNet и IP‑Adapter

Мини‑скелет JSON для SDXL с Canny‑контролем и стилизацией IP‑Adapter (условные имена классов нод):

{
 "1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"sdxl_base.safetensors"}},
 "2":{"class_type":"CLIPTextEncode","inputs":{"text":"studio product photo, soft light","clip":["1","CLIP"]}},
 "3":{"class_type":"CLIPTextEncode","inputs":{"text":"blurry, watermark, artifacts","clip":["1","CLIP"]}},
 "10":{"class_type":"LoadImage","inputs":{"image":"control_ref.png"}},
 "11":{"class_type":"CannyEdgePreprocess","inputs":{"image":["10","IMAGE"],"low":100,"high":200}},
 "12":{"class_type":"ControlNetLoader","inputs":{"control_net":"control-canny.safetensors"}},
 "13":{"class_type":"ControlNetApplyAdvanced","inputs":{
 "positive":["2","CONDITIONING"],"negative":["3","CONDITIONING"],
 "control_net":["12","CONTROL_NET"],"image":["11","IMAGE"],
 "strength":0.8,"start":0.0,"end":0.6}},
 "14":{"class_type":"IPAdapterLoader","inputs":{"ip_model":"ip-adapter.safetensors"}},
 "15":{"class_type":"LoadImage","inputs":{"image":"style_ref.jpg"}},
 "16":{"class_type":"IPAdapterApply","inputs":{
 "conditioning":["13","CONDITIONING"],"ip_model":["14","IP_MODEL"],
 "image":["15","IMAGE"],"weight":0.5,"start":0.2,"end":1.0}},
 "4":{"class_type":"EmptyLatentImage","inputs":{"width":1024,"height":1024,"batch_size":1}},
 "5":{"class_type":"KSampler","inputs":{
 "model":["1","MODEL"],"seed":123,"steps":28,"cfg":6.5,
 "sampler_name":"dpmpp_2m","scheduler":"karras",
 "positive":["16","CONDITIONING"],"negative":["3","CONDITIONING"],
 "latent_image":["4","LATENT"]}},
 "6":{"class_type":"VAEDecode","inputs":{"samples":["5","LATENT"],"vae":["1","VAE"]}},
 "7":{"class_type":"SaveImage","inputs":{"images":["6","IMAGE"]}}
}

Графы, кэш и профили VRAM — см. /solutions/image-video-gen/comfyui/. Automatic1111: API‑запросы с ControlNet и IP‑Adapter

ControlNet (txt2img)

curl -X POST "http://<host>:7860/sdapi/v1/txt2img" 
 -H "Content-Type: application/json" 
 -d '{
 "prompt": "studio product, soft light",
 "negative_prompt": "blurry, watermark",
 "width": 1024, "height": 1024,
 "steps": 28, "cfg_scale": 6.5, "seed": 42,
 "alwayson_scripts": {
 "controlnet": {
 "args": [{
 "input_image": "data:image/png;base64,<BASE64>",
 "model": "control_canny_sdxl",
 "weight": 0.8,
 "guidance_start": 0.0,
 "guidance_end": 0.6,
 "processor_res": 1024,
 "threshold_a": 100,
 "threshold_b": 200
 }]
 }
 }
 }'

IP‑Adapter (стиль)

curl -X POST "http://<host>:7860/sdapi/v1/txt2img" 
 -H "Content-Type: application/json" 
 -d '{
 "prompt": "clean product photo, catalog look",
 "width": 1024, "height": 1024, "steps": 26, "cfg_scale": 6,
 "alwayson_scripts": {
 "ipadapter": {
 "args": [{
 "image": "data:image/jpeg;base64,<BASE64>",
 "weight": 0.5,
 "start_at_step": 0.2,
 "end_at_step": 1.0
 }]
 }
 }
 }'

Флаги запуска, hi‑res и тайлинг — /solutions/image-video-gen/automatic1111/. Стриминг прогресса — /solutions/llm-inference/streaming/.

Качество vs скорость: рабочие паттерны

  • «Захват‑и‑отпуск»: сильный ControlNet в начале (w=0.7–1.0, end≈0.5–0.7), затем его влияние уходит — итог выглядит естественнее.
  • Двойной проход: preview с низкими шагами → апскейл/денойз → (опц.) короткий refiner или мягкий IP‑Adapter (см. /solutions/image-video-gen/upscaling/, /solutions/image-video-gen/sdxl/).
  • Тайлинг: для 2–4k используйте тайловую диффузию и ControlNet‑Tile; следите за швами.
  • Batch и кэш: сохраняйте карты (canny/pose/depth) — не прогоняйте препроцессор повторно.

Бенчмаркинг: как измерять «точность» и стабильность

Набор данных. Соберите пары (входная карта/референс → желаемый результат), 50–200 сцен на каждую задачу. Храните версии (модель/адаптер/препроцессор).

Метрики (оффлайн):

  • Edge‑SSIM (структурное сходство по канни/границам) — насколько соблюдена геометрия.
  • Pose‑L2 (средняя ошибка ключевых точек) — для позы.
  • Color/Style distance (простой emd/ΔE, эмбеддинговый косинус) — насколько совпал стиль IP‑Adapter.
  • Images/min, p95 t_step — производительность.
  • VRAM пик — эксплуатация.

Онлайн‑метрики: CSAT/оценки, доля «доправок», p95 латентности, ошибки/тайм‑ауты (см. /solutions/llm-inference/observability/). Организация экспериментов и отчётов — /solutions/monitoring-logging/, экономика — /solutions/cost-planner/.

Видео и последовательности

  • Консистентность по кадрам: фиксируйте ControlNet‑карты на ключевых кадрах, для промежуточных — интерполируйте/смягчайте вес.
  • Масштабирование: раздавайте кадры по воркерам (см. /solutions/image-video-gen/video/); финально — денойз/апскейл → транскод.
  • Метрики: fps, доля «миганий», «шовных» дефектов, транскод‑латентность.

Наблюдаемость, алерты, логи

Собирайте (см. /solutions/monitoring-logging/):

  • images_per_min, t_step_ms, steps, resolution, batch, queue_wait.
  • Доли успешных препроцессоров, среднее время препроцессоров.
  • GPU util/HBM, OOM/ретраи; I/O (загрузка весов, кэш‑хиты).
  • Алерты: рост p95 t_step_ms, падение стиля/геометрии (на оффлайн‑валидации), OOM>0.

Стоимость и профили инстансов

Прикидка времени и цены

T ≈ O + S × t_step × (1 + overhead_control)
Imgs_per_hour ≈ 3600 / T
Cost_per_1000 ≈ (GPU_hour_price × Num_GPU) / (Imgs_per_hour / 1000)

Где overhead_control — 0.1–0.4 для 1 ветки ControlNet; IP‑Adapter даёт чуть меньше. Пулы: интерактив — on‑demand, пакет — interruptible (см. /solutions/interruptible-patterns/). Детали — /solutions/llm-inference/costs/, /solutions/cost-planner/.

Безопасность и политика

  • Белые списки моделей/модулей, лимиты R/S/CFG/batch, лимиты весов ControlNet/IP‑Adapter.
  • Санация промптов, маскирование PII и токенов, политика контента (см. /solutions/security/, /solutions/llm-inference/guardrails/).

Траблшутинг

  • «Резиновая» геометрия → увеличьте w в начале, сократите end, очистите карты (меньше шума).
  • Пластик/переперерисовка → снизьте CFG, уменьшите w IP‑Adapter, ослабьте hi‑res denoise.
  • Шумы/лесенка контуров → отрегулируйте Canny (thresholds), примените сглаживание.
  • OOM → снизьте разрешение/шаги/батч, отключите часть веток, включите тайлинг.
  • Медленный старт → локальный кэш весов, прогрев моделей, объединение очередей short/long.
  • Стиль «переедает» контент → уменьшите w IP‑Adapter, сместите start к 0.2–0.3.

Как запускать в cloudcompute.ru

Шаблоны в /solutions/templates/:

  • “ComfyUI‑Control” — SD/SDXL/SD3 графы с Canny/Pose/Depth, IP‑Adapter, кэш весов, SSE‑прогресс.
  • “A1111‑Control” — WebUI с включённым ControlNet/IP‑Adapter, ограничители параметров, API‑профили.
  • “Batch‑Render” — очереди/ретраи/отчёты; связка с апскейлом/реставрацией для финала.

Чек‑лист перед продом

  • Выбраны режимы: структура (ControlNet), стиль/идентичность (IP‑Adapter) или их комбинация.
  • Настроены веса/расписания (start/end/shape) и пороги препроцессоров.
  • Подтверждены VRAM‑профили и латентность на целевых R/S.
  • Кэш весов/карт на NVMe; очереди short/long; on‑demand/interruptible пулы.
  • Метрики/алерты/логи подключены; оффлайн‑бенч с эталонами.
  • Политики/лимиты параметров и список разрешённых модулей активированы.

Готовы запустить?

Запустить GPU-сервер