ControlNet
controlnet — управление композицией через карту-подсказку
ControlNet — техника управления композицией в диффузионных моделях через зрительную подсказку: скелет позы (OpenPose), контур (Canny), карту глубины (Depth), набросок (Lineart). Промпт задаёт «что нарисовать», ControlNet — «где и в какой позе». Главный инструмент повторяемости в Stable Diffusion, SDXL и Flux: один скелет → персонажи в той же позе в любых стилях. Файл модели — 400 МБ – 2.5 ГБ, подключается отдельно от базы.
Коротко
Коротко. ControlNet — это способ дать модели не только текстовый промпт, но и зрительную подсказку: контур позы, карту глубины, набросок, маску краёв. Модель остаётся свободной в стиле и деталях, но композиция и пропорции теперь жёстко под контролем. Это главный инструмент повторяемости и точной геометрии в диффузионных моделях.
Что это такое
Февраль 2023-го. Лю Лвмин публикует статью с длинным названием «Adding Conditional Control to Text-to-Image Diffusion Models». В файле — техника, которая решает одну из главных проблем диффузионных моделей: текстом нельзя сказать «руки именно в этом положении», «горизонт ровно тут», «горизонт камеры на 35 градусов вниз».
Промпт работает на уровне понятий, ControlNet — на уровне геометрии.
Идея простая: исходная диффузионная модель остаётся нетронутой, а сбоку к ней «прикручивается» вторая нейросеть. Она читает карту-подсказку (например, скелет позы как картинку) и подмешивает её в каждый слой основной модели. У базы остаётся всё, что она знает; ControlNet добавляет уверенность в том, где что находится.
Типовые карты-кондишены — это разные способы упростить картинку до структуры:
- OpenPose — скелет человека с точками-суставами (плечи, локти, бёдра, голова, пальцы).
- Canny — контуры объекта, найденные по перепадам яркости.
- Depth — карта глубины: что ближе к камере, что дальше.
- Lineart — чистый контурный рисунок (как раскраска).
- Scribble — корявый набросок от руки, для быстрых эскизов.
- Tile — для масштабирования: модель достраивает детали в каждом фрагменте картинки.
- Inpaint — управляемое перерисовывание выделенной области.
Карта обычно автоматически извлекается из исходной картинки через препроцессор (он же annotator) — отдельный модуль, который превращает фотографию в скелет / контур / глубину. В Automatic1111 это делается одним кликом «Preprocessor → OpenPose / Canny / …», в ComfyUI — отдельной нодой ControlNet Preprocessor. Можно подать и ручную карту: нарисовать скелет в Pose Editor, сделать набросок в Photoshop.
Как это работает
ControlNet — это копия энкодера основной модели плюс набор адаптеров, которые подмешивают «карту» в каждый слой decoder'а во время диффузии. Технически:
- На вход ControlNet поступает карта-подсказка (например, скелет позы как RGB-картинка).
- ControlNet прогоняет её через свой энкодер и получает набор тензоров — представление позы на разных уровнях абстракции.
- На каждом шаге диффузии основная модель делает предсказание шума, и в это предсказание добавляются сигналы от ControlNet.
- Результат — картинка следует и промпту, и карте одновременно.
Сила ControlNet (Control Strength, 0.0–1.0) регулирует, насколько строго модель держится за карту:
- 1.0 — буквально, попиксельно. Поза идеально совпадает.
- 0.7 — рекомендация. Поза в целом совпадает, но модель свободна в мелочах.
- 0.4 — лёгкий намёк. Модель использует карту как идею, не как закон.
Дополнительно есть параметры Starting Step и Ending Step: можно включать ControlNet только в начале (первые 30% шагов) или только в конце. Включение «только в начале» даёт более естественный результат — поза задана, но детализация модели остаётся свободной.
Файл ControlNet-модели весит 400 МБ – 2.5 ГБ в зависимости от базы (SD 1.5, SDXL, Flux). Это отдельная модель, она подгружается рядом с checkpoint, как LoRA.
Пример на практике
Видеомонтажёру дали задание: серия из 10 портретов одного персонажа в разных стилях для рекламной кампании. Поза должна быть одна и та же на всех — это условие клиента. Без ControlNet это означало бы перебор сотен сидов с фильтрацией «непохожих» — два-три дня работы.
С ControlNet алгоритм короче:
- Берётся одно референсное фото с нужной позой и ракурсом.
- Препроцессором OpenPose извлекается скелет — 12 точек тела, 4 точки лица.
- Этот скелет подаётся на вход ControlNet в каждой из 10 генераций.
- Промпт меняется: «в стиле акварели», «киберпанк», «масло на холсте», «карандаш», «комикс».
- Сила ControlNet = 0.8: поза держится, стиль свободен.
Результат — 10 портретов в одной позе, разных стилях. Согласованность по композиции 95%+, время на серию — 15 минут вместо двух дней перебора.
Другой кейс — стилизация архитектурного рендера. Дизайнер сделал черновой 3D-набросок здания. Извлекается Lineart-карта (контурный рисунок). С промптом «photoreal, golden hour, glass and concrete» получается фотореалистичный рендер с тем же ВЗГЛЯДОМ, что в черновике. Геометрия не плывёт.
С чем часто путают
- ControlNet и img2img — img2img берёт исходную картинку целиком и переделывает её с заданной силой денойза. ControlNet берёт только структурную карту (скелет, контур, глубину) и оставляет модели свободу в деталях. img2img — «перерисуй с поправкой», ControlNet — «следуй этой композиции, остальное на твой выбор».
- ControlNet и LoRA — оба настраивают результат, но по-разному. LoRA меняет «что модель умеет» (стиль, объекты, лица). ControlNet меняет «как модель строит сцену» (композиция, поза, геометрия). Их часто используют вместе: LoRA на персонажа + ControlNet на позу.
- ControlNet и IP-Adapter — оба добавляют визуальную подсказку к промпту. ControlNet — структурную (карта). IP-Adapter — образную («рисуй в духе этого изображения»). Можно их сочетать: ControlNet задаёт позу, IP-Adapter — стиль.
- OpenPose-карта и реальная поза — карта это упрощение, 16–18 точек. Тонкие позиции пальцев, наклон шеи, мимика — не передаются. Если нужны точные кисти, добавляется отдельная карта рук (DWPose).
Частые ошибки и заблуждения
- ControlNet делает картинку точной копией карты. Нет. ControlNet говорит модели, где что находится, а не как это должно выглядеть. Стиль, цвет, детали — всё ещё на модели. Если хотите буквально копию — это img2img + низкая denoise strength, а не ControlNet.
- Один ControlNet работает на всех моделях. Не работает. ControlNet тренируется под конкретную базу. SDXL ControlNet не подходит для SD 1.5. Flux ControlNet — отдельная история. На CivitAI и в Hugging Face модели подписаны по базе.
- Сила 1.0 — лучший выбор. Часто наоборот. На 1.0 поза может «зажать» модель и она выдаст плоский результат. 0.7–0.85 обычно даёт более естественную картинку.
- Можно объединить любое количество ControlNet. Технически можно подключить 2–3, но каждая ControlNet — это полные дополнительные вычисления (генерация в 2–3 раза дольше) и риск конфликта между картами. Лучше выбрать одну главную, иногда добавить вторую (например, OpenPose + Depth).
- Карту нужно нарисовать руками. Чаще наоборот — её извлекают автоматически из исходного фото препроцессором. Ручная карта нужна только для специфичных случаев: дизайнер позы, превизуализация для анимации.
Связанные термины
- OpenPose, Canny, Depth, Lineart, Scribble — конкретные типы карт-подсказок.
- Preprocessor / Annotator — модуль, превращающий фото в карту.
- LoRA — параллельная техника настройки модели; ControlNet и LoRA часто используются вместе.
- img2img — другой способ работать с исходной картинкой, без структурного контроля.
- IP-Adapter — техника передачи стиля через образ, а не через карту.
Частые вопросы
Нужно ли качать ControlNet-модель отдельно?
Да. ControlNet — это отдельный файл (400 МБ – 2.5 ГБ), который кладётся в models/ControlNet/. У каждой базы (SD 1.5 / SDXL / Flux) свои ControlNet — они не взаимозаменяемы.
Что выбрать новичку — OpenPose или Canny? Зависит от задачи. Для людей в кадре — OpenPose: чисто, прицельно, не давит на детали. Для архитектуры, объектов, абстрактных композиций — Canny или Lineart: они держат контуры.
Почему лицо плывёт даже при ControlNet OpenPose? OpenPose держит только 4 точки лица (глаза, нос, рот). Это позиция, а не сходство. Для сохранения лица нужен LoRA или IP-Adapter поверх ControlNet.
Можно ли подать частичную карту? Да. Если на карте OpenPose видно только торс (без ног) — модель сама дорисует ноги, как ей захочется. Это нормальный приём для портретов: даёшь только верх, низ оставляешь на модель.
Что лучше для видео — менять карты или фиксировать одну? Зависит от задачи. Для анимации «персонаж двигается» — менять (на каждом кадре своя поза). Для «персонаж в одной позе, меняется стиль» — фиксировать карту. В первом случае часто помогает специальный пайплайн AnimateDiff + ControlNet.
Главное
ControlNet добавляет к промпту вторую подсказку — карту, которая держит композицию и геометрию. Модель остаётся свободной в стиле и деталях, но не плывёт в позе и пропорциях. Главный инструмент для серий «один персонаж в разных стилях», переноса композиции с фото, стилизации архитектурных набросков. Стандартная сила 0.7–0.85; выше — давит, ниже — слабо.