Звичайний веб-інтерфейс 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 і апскейл, а не лише на базову генерацію.