ComfyUI и офлайн-генерация
Когда реального времени мало: граф ComfyUI, вызванный из TouchDesigner. Экспорт в API, мосты ComfyUI-TD и ComfyTD, очередь и кэш, и почему ComfyUI лучше держать на другой машине.
ComfyUI — те же узлы, только к генеративным моделям, и с TouchDesigner он сходится естественно. Берут его, когда реального времени мало: фоны и текстуры до шоу, графы с ControlNet, апскейлом и дорисовкой, генерация по событию раз в минуту или по кнопке, контент пачками. Живое видео стилизует Диффузия, сложное и качественное делает ComfyUI.
Граф собирают в ComfyUI и экспортируют в формате API — пункт в меню workflow, а в старых версиях его открывал режим разработчика в настройках. Получается JSON с подменяемыми значениями, и TouchDesigner шлёт его по HTTP или WebSocket со своим промптом, seed и картинкой, а назад получает результат.
Мосты от сообщества: ComfyUI-TD (JiSenHua) — узлы ComfyUI, которые по
WebSocket везут в TouchDesigner картинки, видео, облака точек вплоть до
гауссовых сплатов, звук и текст, в паре с ComfyUI2TD.tox версии 5.1
и новее (ранние его версии выросли из TDComfyUI Oleg Chomp), и ComfyTD
от dotsimulate. Или своими руками на Web Client DAT и WebSocket DAT,
Веб.
TouchDesigner ComfyUI
промпт + кадр ──WebSocket──▶ граф генерации
очередь задач │
готовый кадр ◀──WebSocket─── результат
Ответ приходит через секунды, и проект его не ждёт. Новый запрос — после ответа на прошлый, иначе ComfyUI не справится. Результаты сохраняются на диск, повторять незачем. ComfyUI не отвечает — показываем кэш или заготовку.
На машине шоу ComfyUI делит с ним видеокарту. Отдельная машина в той же сети снимает спор за карту и позволяет перезапускать генерацию, не трогая шоу.
Диффузия занимает видеокарту целиком, и вывод на той же карте проваливается на каждой генерации. Отдельная машина или генерация, когда вывод не важен.
Между сеансами проект наполняет папку картинками, во время показа берёт оттуда и подмешивает свежие. Успела модель или нет — шоу всё равно.
Нашли в статье ошибку, устаревшее или непонятное место?