COMRAD404 / HOWTO

Как использовать ControlNet для контроля генерации

Пошагово разбираем, как использовать ControlNet для контроля генерации: подготовить контрольное изображение, выбрать модель, запустить через Diffusers или AUTOMATIC1111 и проверить, что структура сцены сохраняется.

Понадобится

Зависит от установки моделей и выбранного пути; официальные источники не дают точной оценки
  • контрольное изображение для выбранного типа управления
  • подходящая модель ControlNet
  • совместимая среда Hugging Face Diffusers/PyTorch или установленный AUTOMATIC1111 WebUI
  • доступ к локальному хранилищу для размещения моделей
  • при работе через AUTOMATIC1111 — возможность установить расширение sd-webui-controlnet

После выполнения инструкции вы сможете использовать ControlNet для пространственного контроля генерации изображений двумя официально подтверждёнными способами: через Hugging Face Diffusers в коде и через расширение для AUTOMATIC1111 WebUI. Вы получите воспроизводимый порядок действий, способ проверки результата и список типовых ошибок.

  • Время: зависит от того, установлены ли у вас модели и среда запуска; официальные источники не дают единой оценки.
  • Сложность: средний.
  • Стоимость: официальной единой цены нет; она зависит от хостинга, GPU, облака и условий конкретной модели или сервиса.
  • Что потребуется: контрольное изображение, подходящая модель ControlNet, совместимая среда Diffusers/PyTorch или установленный AUTOMATIC1111 WebUI, доступ к локальному хранилищу для размещения моделей.
  • Актуальность: инструкция сверена по документации Hugging Face ControlNet, официальным репозиториям ControlNet и sd-webui-controlnet по состоянию на 2026-08-15. Ограничение редакции: точные версии пакетов, точные model ID и цены не зафиксированы в source pack, поэтому их нужно дополнительно сверять на странице модели или провайдера перед запуском.

Практический вывод: если вам нужен контроль генерации из кода, ориентируйтесь на официальный workflow Diffusers: подготовьте control image, загрузите ControlNet и pipeline, затем передайте контрольное изображение и controlnet_conditioning_scale. Если вам нужен UI без кода, используйте расширение Mikubill для AUTOMATIC1111 и отдельно разместите модели в models/ControlNet.

Когда ControlNet действительно нужен

ControlNet добавляет к text-to-image diffusion-модели пространственное условие: контуры, глубину, позу или другой структурный сигнал. В оригинальной работе это описано как добавление управления к уже обученной модели через отдельные trainable-слои при замороженной базовой модели.

На практике это нужно, когда вы хотите сохранить структуру сцены лучше, чем это делает один только prompt: повторить позу, удержать геометрию, следовать эскизу или опираться на карту границ.

Путь Когда выбирать Что подтверждено источниками
Hugging Face Diffusers Если вы работаете в Python и хотите управлять параметрами из кода Официальный workflow: подготовить контрольное изображение, загрузить ControlNet и pipeline, передать контрольное изображение и controlnet_conditioning_scale, при необходимости использовать Multi-ControlNet и guess_mode
AUTOMATIC1111 + sd-webui-controlnet Если вы работаете через WebUI Официально подтверждены установка через Extensions → Install from URL, действие Apply and restart UI, полный перезапуск интерфейса, отдельная загрузка моделей и обновление выпадающего списка моделей

Пошаговая настройка

  1. Определите, какую структуру вы хотите сохранить.

    Сначала выберите тип контроля по задаче. В официальных материалах и списке моделей 1.1 прямо упоминаются варианты canny, depth, openpose, scribble, softedge, shuffle и ip2p. Для воспроизводимого первого запуска проще всего начать с canny: этот путь прямо показан в документации Diffusers.

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

  2. Подготовьте контрольное изображение.

    Для сценария с Canny сначала получите карту границ из исходной картинки. Именно такой процесс описан в официальной документации Diffusers: сначала создаётся control image, затем оно передаётся в pipeline.

    from PIL import Image
    import numpy as np
    import cv2
    
    image = Image.open('control-input.png').convert('RGB')
    control_image = Image.fromarray(cv2.Canny(np.array(image), 100, 200))
    control_image.save('control-canny.png')

    Если вы работаете не с Canny, а с глубиной или позой, источник подтверждает сам принцип, но не фиксирует один универсальный препроцессор для всех типов условий. В таком случае ориентируйтесь на конкретную карточку модели или текущую страницу документации.

    Ожидаемый результат: у вас есть отдельный файл control image, который выражает структуру сцены, а не финальный внешний вид.

  3. Скачайте и разместите подходящую модель ControlNet.

    Если вы используете AUTOMATIC1111, модели после скачивания нужно класть в models/ControlNet. Wiki расширения отдельно указывает, что обычно используются файлы .pth, .safetensors или .bin.

    Если вы используете Diffusers, выберите совместимый артефакт модели по официальной документации или карточке модели. Редакционное ограничение: source pack не фиксирует конкретные актуальные model ID, поэтому не подменяйте этот шаг догадкой и сверяйте идентификатор перед запуском.

    Ожидаемый результат: модель доступна вашей среде: либо физически лежит в models/ControlNet, либо её идентификатор готов для загрузки в Diffusers.

  4. Запустите вариант через Diffusers, если вам нужен контроль из кода.

    Официальный workflow Diffusers сводится к трём действиям: загрузить ControlNet и pipeline, передать контрольное изображение, а затем задать параметры генерации. В документации прямо указаны контрольное изображение, num_inference_steps, guidance_scale и controlnet_conditioning_scale.

    Вызов pipeline должен включать:
    - prompt
    - контрольное изображение
    - num_inference_steps
    - guidance_scale
    - controlnet_conditioning_scale

    Если вам нужен более сильный или более мягкий контроль, меняйте именно controlnet_conditioning_scale. Если вы хотите объединить несколько сигналов, документация Diffusers подтверждает Multi-ControlNet: можно передавать список моделей ControlNet и список control images, причём для каждого канала задаётся свой scale.

    Ожидаемый результат: вы получаете изображение, где общая структура заметно следует control image лучше, чем при генерации только по prompt.

  5. Установите расширение sd-webui-controlnet, если вы работаете в AUTOMATIC1111.

    Откройте Extensions → Install from URL, установите расширение Mikubill/sd-webui-controlnet, затем выполните Apply and restart UI и после этого полностью перезапустите WebUI. Это именно тот порядок действий, который подтверждён в официальном репозитории расширения.

    После перезапуска скачайте модели, положите их в models/ControlNet и обновите выпадающий список моделей в интерфейсе.

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

  6. Запустите генерацию в AUTOMATIC1111 с контрольным изображением.

    Загрузите ваше control image в соответствующий блок расширения, выберите модель ControlNet, связанную с типом условия, и выполните генерацию. Если вы хотите управлять этим извне по API, репозиторий расширения требует запускать WebUI с флагом --api и включить опцию Allow other scripts to control this extension.

    Для служебной настройки источники также упоминают аргументы --controlnet-dir и --no-half-controlnet. Используйте их только если у вас есть конкретная причина менять стандартное поведение.

    Ожидаемый результат: генерация проходит с учётом контрольного изображения, а не только текстового описания.

  7. Отрегулируйте силу контроля и при необходимости добавьте второй канал управления.

    Если результат слишком свободный, увеличьте силу ControlNet; если изображение выглядит излишне «привязанным» к control image, уменьшите её. В Diffusers за это отвечает controlnet_conditioning_scale. Для Multi-ControlNet официально подтверждён сценарий со списком моделей и списком изображений; при этом контрольные изображения нужно привести к ожидаемому размеру.

    Если вы тестируете guess_mode, документация Diffusers отдельно отмечает, что генерация может опираться на control input даже без prompt. В тех же материалах указаны рекомендованные коэффициенты усиления для этого режима: 0.1 для DownBlock и 1.0 для MidBlock. Ограничение: точные интерфейсные названия этих коэффициентов зависят от конкретной реализации pipeline и в source pack не зафиксированы.

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

Как проверить, что всё работает

  1. Сравните контрольное изображение и результат. Официальные примеры предлагают оценивать именно эту пару: control image и generated image.
  2. Сделайте второй прогон без ControlNet. Используйте тот же prompt, но без контрольного сигнала. Если ControlNet работает, контуры, поза, глубина или структура сцены будут сохраняться заметно лучше в варианте с контролем.
  3. Проверьте не стиль, а геометрию. Контроль прежде всего относится к пространственной структуре, а не к полной идентичности текстуры или цвета.
  4. Для Multi-ControlNet проверьте оба ограничения сразу. Например, один канал должен удерживать контур, а второй — дополнительную структуру. Если один из сигналов исчез, проблема обычно в масштабе или размере control images.

Частые ошибки и исправления

  • Ошибка: модель не появляется в AUTOMATIC1111.
    Решение: проверьте, что файл лежит именно в models/ControlNet и имеет поддерживаемое расширение .pth, .safetensors или .bin. Затем обновите выпадающий список моделей.
  • Ошибка: вы установили ControlNet 1.1 и ожидаете, что это уже расширение A1111.
    Решение: не путайте артефакты модели и UI-расширение. Репозиторий ControlNet-v1-1-nightly прямо предупреждает, что это не расширение для A1111. Для WebUI нужен именно Mikubill/sd-webui-controlnet.
  • Ошибка: контроль почти не заметен.
    Решение: проверьте, что тип модели соответствует типу control image, и увеличьте controlnet_conditioning_scale в Diffusers или аналогичную силу контроля в WebUI.
  • Ошибка: результат слишком жёстко повторяет control image и теряет вариативность.
    Решение: уменьшите силу контроля. ControlNet должен удерживать структуру, а не полностью заменять творческую часть генерации.
  • Ошибка: внешний API не может управлять ControlNet в A1111.
    Решение: запускайте WebUI с --api и включите Allow other scripts to control this extension, как требует официальный репозиторий расширения.
  • Ошибка: Multi-ControlNet даёт странные или конфликтующие результаты.
    Решение: выровняйте размеры контрольных изображений и задайте отдельные scale для каждого канала, как рекомендует документация Diffusers.

Безопасность и ограничения

  • Нет единой официальной цены. Стоимость зависит от того, где вы запускаете модель: локально, в облаке или у внешнего провайдера.
  • Не все сведения одинаково свежие. В source pack есть предупреждение, что часть wiki-материалов и репозиториев датирована 2024 годом и может отставать от текущих релизов. Перед публикацией или внедрением сверяйтесь с последними release/changelog-страницами.
  • Не путайте разные сущности. ControlNet 1.1 — это официальный релиз моделей и заметок по ним, а не A1111-расширение.
  • Совместимость моделей нужно проверять отдельно. В source pack есть отдельная неопределённость по SDXL-картам: разные документы могут отражать разное состояние экосистемы. Для практической работы смотрите карточку конкретной модели.
  • API-доступ расширяет поверхность управления. Если вы включаете --api и разрешаете внешним скриптам управлять расширением, учитывайте это как организационное и инфраструктурное ограничение вашей среды.

Что делать дальше

  • Если вам нужен терминологический минимум по архитектуре и ограничениям, откройте глоссарий: ControlNet.
  • Если вы параллельно настраиваете контроль в текстовых моделях, сравните другой класс рычагов управления: как настроить Temperature и Top-p для контроля генерации.
  • Если вы хотите системнее управлять сложными запросами и пайплайнами, посмотрите как использовать meta-prompting для сложных задач.
  • Для рабочего процесса команды зафиксируйте один эталонный prompt, один control image и один диапазон scale — так вам будет проще замечать регрессии после обновлений моделей.

Источники

Вопросы и ответы

Можно ли использовать ControlNet без prompt?

Да, в документации Diffusers описан guess_mode: генерация может опираться на control input даже без prompt. Но для воспроизводимого результата всё равно лучше начинать с явного prompt и только потом тестировать этот режим.

Можно ли подключить несколько ControlNet одновременно?

Да. Документация Diffusers подтверждает Multi-ControlNet: можно передавать список моделей ControlNet и список контрольных изображений, а для каждого канала задавать собственный scale.

Куда класть модели в AUTOMATIC1111?

В официальной wiki расширения указана папка models/ControlNet. Поддерживаемые файлы обычно имеют расширения .pth, .safetensors или .bin.

ControlNet 1.1 — это уже расширение для WebUI?

Нет. Официальная страница ControlNet-v1-1-nightly отдельно подчёркивает, что это не A1111-расширение. Для WebUI нужен репозиторий Mikubill/sd-webui-controlnet.

Сколько стоит использование ControlNet?

Единой официальной цены нет. Источники прямо указывают, что стоимость зависит от используемого хостинга, GPU, облачной инфраструктуры и условий конкретной модели или сервиса.

Шаги

HOW-TO
  1. Определите тип структурного контроля

    | Выберите, что именно нужно сохранить: границы, глубину, позу, эскиз или другой тип условия. Для первого запуска проще всего начать с canny, потому что этот workflow прямо показан в документации Diffusers.

  2. Подготовьте контрольное изображение

    | Создайте control image из исходной картинки. Для сценария Canny документация Diffusers показывает подготовку карты границ через cv2.Canny.

  3. Разместите модель ControlNet

    | Для AUTOMATIC1111 положите модель в папку models/ControlNet; wiki расширения подтверждает поддержку файлов .pth, .safetensors и .bin. Для Diffusers заранее проверьте актуальный model ID по документации или карточке модели.

  4. Запустите генерацию через Diffusers

    | Загрузите ControlNet и pipeline, затем передайте контрольное изображение, num_inference_steps, guidance_scale и controlnet_conditioning_scale. При необходимости используйте Multi-ControlNet и отдельные scale для каждого канала.

  5. Установите расширение для AUTOMATIC1111

    | Откройте Extensions → Install from URL, установите sd-webui-controlnet, выполните Apply and restart UI и полностью перезапустите WebUI. После этого обновите список моделей.

  6. Сгенерируйте изображение в WebUI

    | Загрузите control image в блок расширения, выберите соответствующую модель ControlNet и выполните генерацию. Для внешнего управления по API запускайте WebUI с --api и включайте Allow other scripts to control this extension.

  7. Проверьте и откалибруйте результат

    | Сравните control image и generated image, затем сделайте второй прогон без ControlNet. Если структура сцены удерживается лучше с контролем, настройка выполнена правильно; дальше регулируйте силу контроля и размеры control images.

Источники

SOURCES

Вопросы и ответы

FAQ
Можно ли использовать ControlNet без prompt?

Да. В документации Diffusers описан guess_mode, при котором генерация может опираться на control input даже без prompt. Для первого воспроизводимого запуска лучше всё же использовать явный prompt и затем сравнить результат с режимом guess_mode.

Можно ли подключить несколько ControlNet одновременно?

Да. Документация Diffusers подтверждает Multi-ControlNet: можно передавать список ControlNetModel и список контрольных изображений, а для каждого канала задавать отдельный scale. Контрольные изображения нужно привести к ожидаемому размеру.

Куда класть модели в AUTOMATIC1111?

По wiki Mikubill/sd-webui-controlnet модели нужно размещать в папке models/ControlNet. Обычно используются файлы .pth, .safetensors или .bin.

ControlNet 1.1 — это расширение для A1111?

Нет. Репозиторий ControlNet-v1-1-nightly прямо отмечает, что это не A1111-расширение. Для WebUI требуется отдельное расширение Mikubill/sd-webui-controlnet.

Сколько стоит использование ControlNet?

Официальной единой цены нет. Стоимость зависит от используемого хостинга, GPU, облака и условий конкретной модели или сервиса, поэтому её нужно проверять у выбранного провайдера.

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

LINKS