Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как превратить ComfyUI в API и собрать веб-приложение без кода

Как превратить ComfyUI в API и собрать веб-приложение без кода

Интеграция генеративных нейросетей в практические рабочие процессы часто требует создания удобного интерфейса для конечных пользователей или удаленной команды. Практическое подключение ComfyUI в роли API через no-code сервис api2app позволяет быстро развернуть полноценный графический веб-интерфейс без написания программного кода и организовать безопасный удаленный доступ к локальной модели генерации изображений.

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

Выбор шаблона рабочего процесса в среде ComfyUI
Выбор базового шаблона рабочего процесса Flux в графической среде ComfyUI
Экспорт рабочего процесса ComfyUI в формат JSON для API
Сохранение конфигурации рабочего процесса в виде JSON-структуры для вызовов через API

Подготовка рабочего процесса и экспорт API в ComfyUI

Первый этап настройки заключается в формировании пайплайна генерации. В качестве демонстрационного сценария используется шаблон рабочего процесса на базе модели Flux.2 [Klein] 4B, выполняющий преобразование текстового описания в графическое изображение. После проверки корректности работы узлов внутри стандартного интерфейса необходимо экспортировать схему в специальный формат для внешних интеграций.

Реклама
Создание конфигурации API в панели api2app
Добавление параметров сетевого вызова и тела запроса в конструкторе api2app
Тестирование отправки запроса генерации в api2app
Получение идентификатора новой задачи из очереди ComfyUI при тестовом запуске

Для этого в среде ComfyUI выполняется экспорт графа в режиме API, формирующий файл формата JSON. Содержимое этого файла содержит полную структуру связей между нодами, загрузчиками моделей, сэмплерами и текстовыми подсказками. В дальнейшем этот JSON будет служить телом POST-запросов, отправляемых внешними инструментами.

Параметры создания задачи генерации через comfy-api-proxy
Настройка обращения к эндпоинту jobs с использованием структуры workflow
Добавление заголовка Authorization с токеном доступа в api2app
Передача токена безопасности в заголовке запроса к защищенному прокси

Локальное тестирование API и настройка безопасного прокси

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

Отслеживание статуса генерации задачи в api2app
Получение информации о завершении обработки и ссылок на сгенерированный контент
python main.py --enable-cors-header https://api2app.org

В панели конструктора api2app переходят в категорию конфигурации API и создают новое подключение. На вкладке необработанных данных формируется объект с ключом «prompt», в который помещается скопированный ранее JSON из ComfyUI. В качестве метода запроса выставляется POST, а адресом назначения указывается локальная точка входа http://127.0.0.1:8188/prompt. Пробный запуск в браузере должен вернуть идентификатор добавленной в очередь задачи.

Настройка эндпоинта для получения готового изображения в api2app
Настройка сетевого запроса для выгрузки изображения по идентификатору ресурса
Список настроенных и опубликованных API в платформе api2app
Перевод созданных подключений к ComfyUI в активный общедоступный статус

Переход на comfy-api-proxy для внешнего доступа

Штатный программный интерфейс ComfyUI подходит преимущественно для локальной среды, но не предоставляет удобных механизмов защищенного разделения прав при открытии доступа из глобальной сети. Для безопасной публикации рекомендуется задействовать специализированный модуль comfy-api-proxy. Установка пакета выполняется стандартным пакетным менеджером:

Конструирование визуального интерфейса в api2app
Добавление базовых полей ввода и управляющих элементов на рабочую панель
Список элементов интерфейса приложения в конструкторе
Компоновка индикатора прогресса, текстовых блоков и области вывода картинок
pip install comfy-api-proxy

Запуск проксирующего слоя осуществляется с указанием секрета авторизации и CORS-заголовков:

Настройка действия ввода для текстового описания генерации
Связывание поля ввода промпта с параметрами запроса к нейросети
Выбор параметра Prompt Value в структуре JSON ComfyUI
Указание конкретного внутреннего поля графа ComfyUI для передачи текста пользователя
comfy-api-proxy --enable-cors-header https://api2app.org --token=ВАШ_ТОКЕН

При использовании прокси меняется формат взаимодействия:

Реклама
Настройка действия отправки запроса для кнопки генерации
Назначение триггера выполнения API на нажатие кнопки в веб-интерфейсе
  • Конечный адрес для создания задач принимает вид http://127.0.0.1:8189/api/v2/jobs;
  • В теле POST-запроса ключ верхнего уровня «prompt» заменяется на «workflow»;
  • В конфигурацию HTTP-заголовков добавляется обязательный параметр «Authorization», передающий настроенный токен доступа.

В браузере во время тестирования поле токена авторизации сохраняется открытым (без приватного режима), после чего конфигурация сохраняется в конструкторе.

Настройка действия вывода идентификатора задачи в скрытое поле
Фиксация входящего идентификатора операции для последующего опроса статуса
Передача ID задачи в URL запроса статуса выполнения
Автоматическая подстановка идентификатора задачи в адрес эндпоинта проверки

Настройка эндпоинтов для проверки статуса и выдачи результата

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

Привязка данных ответа к элементу Прогресс операции
Связывание полного ответа сервера с визуальным индикатором выполнения
Параметры настройки компонента Прогресс операции
Установка ожидаемого времени расчета, ключей статуса и интервалов опроса
  • Метод: GET;
  • Формат URL: http://127.0.0.1:8189/api/v2/jobs/{идентификатор_задачи};
  • Назначение: возврат текущего статуса обработки (queued, running, succeeded, error).

После завершения рендеринга сервер возвращает структуру с данными о готовом контенте, где содержится идентификатор ресурса (asset_id). Для скачивания или отображения финального файла создается третья конфигурация API с методом GET, направленная на адрес вида http://127.0.0.1:8189/api/v2/assets/{asset_id}/content. Все подготовленные эндпоинты переводятся в публичный или скрытый статус для связывания с интерфейсом.

Извлечение идентификатора файла изображения из ответа задачи
Маршрутизация идентификатора готового медиафайла в скрытое поле интерфейса

Сборка графического интерфейса в no-code конструкторе

После подготовки сетевого уровня в разделе создания приложений api2app настраивается визуальная панель для конечного пользователя. На рабочий экран добавляются функциональные блоки:

  • Многострочная текстовая область для ввода пользовательского описания (промпта);
  • Кнопка инициации генерации;
  • Индикатор «Прогресс операции» для отображения хода вычислений;
  • Блок вывода графического контента (изображения);
  • Два скрытых служебных поля для хранения промежуточных данных: идентификатора задачи и идентификатора файла.

Связывание событий ввода и вывода данных

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

  1. Текстовая область: в действии ввода указывается поле JSON-структуры Prompt.76.Inputs.Value, отвечающее за позитивный текстовый промпт узла генерации.
  2. Кнопка запуска: настраивается на действие «Отправить» для первой API-конфигурации создания задачи.
  3. Скрытое поле идентификатора задачи: получает значение из ответа создания задачи (поле id) и передает его в URL-параметр запроса проверки статуса задачи. Поскольку у статусного запроса нет отдельной кнопки, он запускается автоматически при обновлении значения поля.
  4. Индикатор выполнения: привязывается к полному телу ответа статусного эндпоинта. В его параметрах указываются имена полей статуса (queued, running, succeeded, error), поле ID и ориентировочная длительность генерации в секундах (например, 35 секунд). Это обеспечивает периодический опрос сервера раз в 10 секунд и отрисовку плавной шкалы ожидания.
  5. Скрытое поле идентификатора файла: извлекает значение outputs.0.id из успешного ответа статуса и подставляет его в эндпоинт загрузки контента.
  6. Блок изображения: принимает прямое значение контента из финального GET-запроса и рендерит сгенерированную картинку на экране.

Публикация и организация безопасного внешнего доступа

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

Чтобы предоставить доступ к интерфейсу пользователям без прямого подключения к локальной сети, на хосте с ComfyUI поднимается обратный туннель к порту 8189 через специализированные туннельные утилиты. Полученный внешний публичный HTTPS-домен прописывается как базовый адрес во всех созданных конфигурациях API.

В целях безопасности для всех опубликованных подключений активируется режим «Сервер». В этом режиме реальные сетевые адреса локального компьютера скрыты от браузера пользователя, тело запросов может маскироваться, а заголовки авторизации с токенами переводятся в приватный статус. Дополнительно конструктор позволяет ограничить количество входящих запросов с одного IP-адреса в сутки, предотвращая перегрузку вычислительных мощностей видеокарты. При необходимости готовый веб-проект можно скачать для автономного развертывания на собственном сервере.

01.