API ComfyUI: запуск workflow и последовательная генерация
У ComfyUI уже есть API на сервере, где выполняется граф. Для автоматизации достаточно отправить workflow, дождаться истории конкретного задания и скачать изображения. Эта инструкция относится к вашему инстансу ComfyUI, а не к inference API платформы или облачному endpoint Comfy Cloud.
Подключитесь к нужному серверу
Примеры используют http://127.0.0.1:8188. Выполняйте их на GPU-инстансе либо на своём компьютере с открытым SSH-туннелем. Python-клиент не проходит авторизацию браузерного gateway. Если публичный URL возвращает страницу входа, используйте туннель: копировать cookie или открывать незащищённый порт не требуется.
| Endpoint | Назначение |
|---|---|
GET /object_info |
Установленные типы узлов и доступные значения входов/моделей |
POST /upload/image |
Загрузка исходного изображения |
POST /prompt |
Проверка и постановка API-графа в очередь; ответ с prompt_id |
GET /history/{prompt_id} |
Статус выполнения и метаданные результата конкретного задания |
GET /view |
Скачивание по имени, подкаталогу и типу файла |
GET /queue |
Просмотр очереди и выполняемых заданий при диагностике таймаута |
Подготовьте API-формат
Скачайте Python-клиент и SDXL API JSON в один локальный каталог. Достаточно Python 3.10 или новее; используются только стандартные библиотеки. Для FLUX есть отдельный API JSON.
В API-графе ID узла соответствует объекту с class_type и inputs. Связь ["1", 0] выбирает выход с номером ноль у узла 1. Номер выхода — число, а не строка "MODEL". В JSON холста находятся nodes, links и координаты; такой файл не нужно отправлять в /prompt.
Если вы изменили граф в ComfyUI, используйте команду API-экспорта/сохранения. В некоторых версиях интерфейса сначала включаются developer options. Сохраните и UI-версию: API-экспорт не содержит расположения узлов на холсте.
Проверьте граф до постановки задания
python3 run-workflow.py sdxl-text-to-image.api.json --check
Команда только читает /object_info: проверяет наличие узлов, обязательные входы, типы связанных выходов и значения в списках моделей. Она не проверяет достаточность VRAM, содержимое весов, наличие входной картинки или качество результата. Если нужного чекпойнта нет в списке, клиент завершится до отправки задания.
Позитивный промпт находится в узле 2, имя установленного чекпойнта — в узле 1. Для графа с исходным изображением сначала загрузите файл:
curl --fail --show-error \
-F 'image=@input.png' -F 'type=input' \
http://127.0.0.1:8188/upload/image
Подставьте полученные name и subfolder в LoadImage.inputs.image; локальное имя не доказывает, что файл существует на сервере. Для inpainting проще создать маску в интерфейсе и экспортировать обновлённый API-граф.
Запустите небольшую последовательную серию
python3 run-workflow.py sdxl-text-to-image.api.json \
--count 3 --timeout 900 --output-dir ./results
Клиент отправляет одно задание, ждёт завершения, сохраняет результат и только затем переходит к следующему. Между запусками увеличивается seed сэмплера; batch size latent не меняется, несколько заданий параллельно не запускаются. Для каждого успешного задания создаётся отдельный каталог с PNG и request.json, где сохранены отправленный граф и prompt ID.
У апскейлера нет сэмплера для изменения seed, поэтому его нужно запускать один раз на входной файл. Для обработки датасета явно связывайте каждый исходник с ID задания и каталогом результата, а не отправляйте один неизменённый граф много раз.
Ошибки и ограничения
HTTP-ошибка, отклонённый граф, ошибка выполнения, отсутствие сохранённых изображений и таймаут ожидания возвращают ненулевой код выхода и останавливают серию. Клиент не повторяет отправку автоматически: если ответ потерялся после принятия задания сервером, повтор может создать дубликат и потратить GPU-время.
Таймаут не отменяет серверное задание. Сохраните напечатанный prompt_id, проверьте очередь/историю и решите, ждать дальше или отменить задачу в ComfyUI. Скрипт не останавливает и не удаляет арендованный инстанс. После завершения генерации он может продолжать тарифицироваться — см. стоимость сессии.
Это учебные инструменты для небольших последовательных серий, без надёжной распределённой очереди и отдельного сервиса в приложении. Не публикуйте ключи и приватные промпты в JSON; request.json содержит текст задания. См. хранение и диагностику. Источник: официальные маршруты API ComfyUI.
Готовы запустить?
Запустить GPU-сервер