Обычный веб-интерфейс Stable Diffusion даёт одну форму: промпт, размер, число шагов. ComfyUI вместо формы даёт граф узлов — можно собрать конвейер из загрузки модели, апскейла, inpainting и ControlNet в любом порядке и повторно использовать его как шаблон. Разберём, как поставить ComfyUI на VDS с GPU и запускать конвейеры без интерфейса, через API.
Чем ComfyUI отличается от обычного интерфейса
Базовая установка Stable Diffusion, описанная в статье про генерацию изображений на сервере, подходит для простых задач «текст в картинку». ComfyUI устроен как визуальный редактор графов: каждый шаг — загрузка чекпоинта, кодирование промпта, сэмплер, VAE-декодер — отдельный узел со своими входами и выходами. Соединяя узлы, можно собрать сложный конвейер: например, генерацию, апскейл в два прохода и наложение ControlNet за один запуск.
Главное преимущество для сервера — готовый граф сохраняется в JSON и запускается программно через API, без открытого браузера и без ручного клика по кнопкам.
Установка на VDS с GPU
ComfyUI требует Python 3.10+, CUDA-совместимый GPU-драйвер и около 10 ГБ на диске под саму программу без учёта весов моделей.
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python3 main.py --listen 0.0.0.0 --port 8188
Чекпоинты модели кладутся в models/checkpoints/, LoRA-адаптеры — в models/loras/, а модели ControlNet — в models/controlnet/. После первого запуска интерфейс доступен по адресу сервера на порту 8188; для прод-окружения порт стоит закрыть файрволом и пускать только через reverse proxy с базовой авторизацией.
Основы: узлы, граф и чекпоинты
Минимальный граф для генерации картинки состоит из пяти узлов: CheckpointLoader загружает веса модели, CLIPTextEncode кодирует положительный и отрицательный промпт, KSampler выполняет диффузию, VAEDecode превращает латент в пиксели, SaveImage сохраняет результат. Каждый узел настраивается отдельно: у KSampler есть параметры steps, cfg и sampler_name, которые в обычном веб-интерфейсе скрыты за одной формой.
Готовые графы можно сохранять и переиспользовать: файл workflow в формате JSON включает все узлы, их параметры и связи между ними.
Запуск конвейера через API
ComfyUI принимает готовый граф через REST API — это ключевая возможность для автоматизации без открытого интерфейса. Запрос на генерацию отправляется методом POST с телом в виде JSON-графа:
curl -X POST http://127.0.0.1:8188/prompt \
-H "Content-Type: application/json" \
-d @workflow.json
Ответ содержит prompt_id, по которому можно опросить очередь через GET /history/{prompt_id} и получить путь к готовому файлу, как только рендер завершится. Такой подход удобен для интеграции с ботом или сайтом: пользователь присылает промпт, backend подставляет его в шаблон графа и вызывает API ComfyUI.
Расширения: ControlNet, LoRA и кастомные узлы
Сообщество ComfyUI выпускает сотни кастомных узлов — они ставятся через менеджер ComfyUI-Manager или вручную в папку custom_nodes/. Самые частые дополнения: ControlNet для управления композицией по эскизу или карте глубины, IPAdapter для переноса стиля с референсного изображения и узлы апскейла на базе Real-ESRGAN.
После установки нового узла ComfyUI нужно перезапустить — узлы регистрируются при старте сервера, а не подгружаются на лету.
Сколько ресурсов нужно серверу
| Модель | Разрешение | VRAM | Время на кадр (RTX-класс) |
|---|---|---|---|
| SD 1.5 | 512x512 | 4-6 ГБ | 2-4 сек |
| SDXL | 1024x1024 | 8-12 ГБ | 6-10 сек |
| SDXL + ControlNet | 1024x1024 | 12-16 ГБ | 10-15 сек |
| SDXL + апскейл x2 | 2048x2048 | 16-20 ГБ | 20-30 сек |
Формулу и таблицы для точного расчёта VRAM под конкретную модель можно посмотреть в статье сколько видеопамяти нужно модели — принцип с языковыми моделями и диффузионными пересекается: чем больше разрешение и чем длиннее конвейер, тем больше нужен запас памяти на промежуточные тензоры.
Чек-лист перед продакшеном
Перед тем как открывать ComfyUI внешним пользователям, закройте порт 8188 от прямого доступа, ограничьте очередь генераций на пользователя и настройте мониторинг очереди и VRAM, чтобы вовремя заметить рост нагрузки. Полезно подключить общий мониторинг AI-сервисов на VDS и следить за длиной очереди отдельной метрикой.
- Спрячьте порт ComfyUI за reverse proxy с авторизацией, не открывайте его напрямую в интернет.
- Сохраните рабочие графы как шаблоны JSON и подставляйте параметры программно.
- Ограничьте очередь генераций на пользователя, чтобы один клиент не занял всю GPU.
- Заложите VRAM с запасом на ControlNet и апскейл, а не только на базовую генерацию.