ComfyUI и офлайн-генерация
Связка TouchDesigner с ComfyUI по WebSocket: когда нужен результат сложнее, чем даёт реальное время.
ComfyUI — нодовый интерфейс к диффузионным моделям. Логика узлов там та же, что в TouchDesigner, и связать их естественно.
Когда это нужно
| Задача | Реальное время | ComfyUI |
|---|---|---|
| Стилизация живого видео | Диффузия | — |
| Генерация фонов и текстур перед шоу | — | Да |
| Сложные пайплайны с ControlNet, апскейлом, инпейнтом | — | Да |
| Генерация по событию (раз в минуту, по кнопке) | — | Да |
| Подготовка контента пачками | — | Да |
Коротко: реальное время — StreamDiffusion, качество и сложность — ComfyUI.
Как связывают
ComfyUI имеет HTTP- и WebSocket-API. Схема:
- В ComfyUI включите Dev Mode в настройках — появится экспорт workflow в формате API.
- Экспортированный JSON — это описание графа с подставляемыми значениями.
- TouchDesigner отправляет этот JSON с подменёнными параметрами (промпт, seed, входное изображение) и получает результат.
Готовые решения:
- TDComfyUI — интерфейс к ComfyUI из TouchDesigner;
- ComfyUI-TD — нода на стороне ComfyUI, отправляющая результат в
TouchDesigner по WebSocket; передаёт изображения, видео, облака точек
(в том числе гауссовы сплаты) и звук. Работает в паре с компонентом
ComfyUI2TD.tox.
Своими силами это тоже собирается: Web Client DAT и WebSocket DAT —
Веб.
Практическая схема
TouchDesigner ComfyUI
промпт + кадр ──WebSocket──▶ граф генерации
очередь задач │
готовый кадр ◀──WebSocket─── результат
Ключевые моменты:
- асинхронность: запрос уходит, ответ приходит через секунды. Проект не должен ждать;
- очередь: не отправляйте новый запрос, пока не пришёл предыдущий, иначе ComfyUI забьётся;
- кэш: сохраняйте результаты на диск. Второй раз то же самое генерировать незачем;
- план Б: ComfyUI не ответил — берём из кэша или показываем заготовленное.
Локально или на сервере
ComfyUI может стоять на той же машине (делит видеокарту с шоу — плохо) или на отдельной (правильно). Отдельная машина в той же сети снимает конкуренцию за GPU и позволяет перезапускать генерацию, не трогая шоу.
Диффузия загружает видеокарту полностью. Если ComfyUI работает на той же карте, что и вывод, — картинка будет проваливаться в момент генерации. Либо отдельная машина, либо генерация только когда вывод не критичен.
Самая надёжная схема для инсталляции: ночью или между сеансами проект генерирует пул изображений и складывает в папку; днём показывает из неё, подмешивая новые по мере готовности. Зритель не отличит, а шоу не зависит от того, успела ли модель.