← Все гайды AI Release
EN Подписаться на @ai_release1

Как запустить локальный сервер генерации изображений: ComfyUI, Stable Diffusion и API для своих приложений

Обновлено: 27.10.2026 · AI Release · @ai_release1
Как запустить локальный сервер генерации изображений: ComfyUI, Stable Diffusion и API для своих приложений

TL;DR

Требования и подготовка

Иллюстрация к разделу «Требования и подготовка»
Иллюстрация к разделу «Требования и подготовка»

Чек-лист перед стартом:

Если вы ещё не запускали локальные модели и хотите сначала понять общую логику «модель на своём компьютере», начните с материала Как запустить ИИ-модель локально на своём компьютере: гайд для начинающих.

Шаг 1. Установка ComfyUI и изолированного окружения

Что сделать: склонировать репозиторий, создать виртуальное окружение и поставить зависимости.

Зачем: виртуальное окружение (venv) — отдельная папка с библиотеками Python, чтобы версии torch и прочих пакетов для ComfyUI не конфликтовали с другими вашими проектами.

git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate
pip install -r requirements.txt

Пример: после source venv/bin/activate приглашение терминала начинается с (venv), например (venv) user@host:~/ComfyUI$. Это признак, что вы внутри окружения.

Как проверить: убедиться, что PyTorch встал и видит GPU.

python -c "import torch; print(torch.__version__, torch.cuda.is_available())"

Ожидаемый вывод: строка с версией и True на машине с NVIDIA (False, если GPU нет или драйвер не установлен). Почему это работает: requirements.txt тянет PyTorch, а torch.cuda.is_available() реально опрашивает драйвер, а не просто читает конфиг.

Шаг 2. Запуск сервера и подключение модели

Иллюстрация к разделу «Шаг 2. Запуск сервера и подключение модели»
Иллюстрация к разделу «Шаг 2. Запуск сервера и подключение модели»

Что сделать: положить чекпойнт в папку моделей и запустить сервер.

Зачем: ComfyUI — это графовый редактор: ноды (узлы) соединяются в схему «текст → латентное представление → изображение». Файл модели должен лежать в конкретном каталоге, иначе нода Load Checkpoint его не увидит. Латентное представление — сжатая версия картинки, в которой диффузионная модель работает быстрее, чем с пикселями.

cp ~/Downloads/<ваш-чекпойнт>.safetensors models/checkpoints/
python main.py --listen 127.0.0.1 --port 8188

<ваш-чекпойнт> замените на имя скачанного файла. Флаг --listen 127.0.0.1 означает «слушать только локально» — снаружи машины сервер недоступен, это безопасный вариант по умолчанию.

Пример: в логе появляется строка вида Starting server и адрес с портом 8188; в браузере по http://127.0.0.1:8188 открывается тёмный холст с нодами по умолчанию.

Как проверить: в интерфейсе найти ноду Load Checkpoint и раскрыть выпадающий список — в нём должен быть ваш файл. Если списка нет — модель не попала в models/checkpoints/; перезапустите сервер, он сканирует папку при старте.

Шаг 3. Проверка API и вызов генерации из своего приложения

Иллюстрация к разделу «Шаг 3. Проверка API и вызов генерации из своего приложения»
Иллюстрация к разделу «Шаг 3. Проверка API и вызов генерации из своего приложения»

Что сделать: собрать простую схему в интерфейсе, выгрузить её в API-формате и отправить на сервер HTTP-запросом.

Зачем: веб-интерфейс и API используют один и тот же движок. Схема, сохранённая через пункт меню сохранения в API-формате (кнопка сохранения в меню интерфейса, точное название пункта сверьте с документацией ComfyUI), — это JSON, который принимает эндпоинт POST /prompt.

import json, time, urllib.request, urllib.parse

SERVER = "http://127.0.0.1:8188"

with open("workflow_api.json", encoding="utf-8") as f:
    workflow = json.load(f)

req = urllib.request.Request(
    f"{SERVER}/prompt",
    data=json.dumps({"prompt": workflow}).encode(),
    headers={"Content-Type": "application/json"},
)
resp = json.load(urllib.request.urlopen(req))
prompt_id = resp["prompt_id"]
print("prompt_id:", prompt_id)

while True:
    hist = json.load(urllib.request.urlopen(f"{SERVER}/history/{prompt_id}"))
    if prompt_id in hist:
        break
    time.sleep(1)

for node_id, out in hist[prompt_id]["outputs"].items():
    for img in out.get("images", []):
        q = urllib.parse.urlencode({"filename": img["filename"],
                                    "subfolder": img["subfolder"],
                                    "type": img["type"]})
        print("file:", f"{SERVER}/view?{q}")

Пример: первый ответ сервера выглядит как {"prompt_id": "...", "number": 0, "node_errors": {}}. Пустой node_errors — схема валидна. Скрипт печатает prompt_id: и затем ссылку вида http://127.0.0.1:8188/view?filename=ComfyUI_00001_.png&subfolder=&type=output.

Как проверить: открыть напечатанный URL в браузере — должна отобразиться сгенерированная картинка. Файл также лежит в ComfyUI/output/. Почему это работает: /prompt ставит задачу в очередь и возвращает идентификатор, /history/{id} отдаёт результат по завершении, /view раздаёт файл из выходного каталога.

Возможные проблемы и решения

Проблема. Сервер падает сразу после старта с ошибкой про torch

source venv/bin/activate
which python          # Windows: where python
pip install -r requirements.txt
python main.py

Путь в выводе which python должен заканчиваться на ComfyUI/venv/bin/python.

Проблема. Генерация прерывается на середине

python main.py --listen 127.0.0.1 --port 8188 --lowvram

Проблема. Сервер не стартует, порт занят

ss -ltnp | grep 8188
kill <PID>
python main.py --listen 127.0.0.1 --port 8189   # и обновить SERVER в скрипте

Резюме и следующие шаги

Вы получили локальный сервер ComfyUI с веб-интерфейсом и HTTP API, который принимает JSON-схему через /prompt и возвращает готовые файлы через /history и /view. Дальше имеет смысл обернуть вызовы из Шага 3 в свою функцию или сервис, добавить очередь запросов и логирование времени генерации.

FAQ

Нужна ли обязательно видеокарта NVIDIA?

Нет, ComfyUI запускается и на CPU, но генерация будет заметно медленнее. Способы запуска на CPU и поддерживаемые флаги сверьте с документацией ComfyUI.

Где брать чекпойнты Stable Diffusion?

В каталогах открытых весов; подходят файлы формата .safetensors, которые кладутся в ComfyUI/models/checkpoints/. Обзор открытых моделей — в подборке гайдов по открытым весам.

Можно ли обращаться к серверу с другой машины в сети?

Технически да — запуск с --listen 0.0.0.0. Но тогда сервер доступен всем в сети без пароля, поэтому ставьте его за reverse proxy с аутентификацией; конкретные настройки сверьте с документацией.

Чем API отличается от веб-интерфейса?

Ничем по результату: это один процесс и один движок. Интерфейс просто рисует граф, а API принимает тот же граф как JSON и возвращает пути к файлам.

🤖 Кратко для ИИ