Как нейросеть запускается в TouchDesigner
Четыре способа: встроенные операторы, ONNX в Python, отдельный процесс и внешний сервис — с честной ценой каждого.
Прежде чем выбирать модель, надо решить, где она будет считаться. От этого зависит и задержка, и то, что произойдёт при падении.
Четыре способа
| Способ | Задержка | Риск для шоу | Сложность |
|---|---|---|---|
| Встроенный оператор | Минимальная | Низкий | Никакой |
| Python внутри TD (ONNX/TensorRT) | Средняя | Средний | Средняя |
| Отдельный процесс (Engine COMP, свой сервис) | Средняя + передача | Низкий | Высокая |
| Внешний сервис по HTTP | Секунды | Зависит от сети | Низкая |
1. Встроенные операторы
Ничего устанавливать не нужно, задержка минимальная, всё считается на GPU. Список и требования — Встроенные операторы. Ограничение: Windows + NVIDIA RTX и фиксированный набор задач.
2. Python внутри TouchDesigner
Классический путь: модель в формате ONNX, исполняемая через
onnxruntime.
Почему ONNX, а не PyTorch или TensorFlow напрямую: практика сообщества показывает, что тяжёлые фреймворки внутри TouchDesigner нередко роняют процесс без внятного сообщения, тогда как ONNX Runtime ведёт себя предсказуемо. Плюс ONNX — общий формат: обучили в PyTorch, экспортировали, запустили где угодно.
import onnxruntime as ort
import numpy as np
sess = ort.InferenceSession(
'models/depth.onnx',
providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
def infer(arr): # arr: numpy из Script TOP
out = sess.run(None, {'input': arr})[0]
return out
Кадр берут через numpyArray() у TOP и возвращают через Script TOP.
Установка пакетов — Внешние модули.
Для скорости модель компилируют в TensorRT: движок под конкретную
видеокарту. Ускорение кратное, но .engine-файл привязан к карте и версии
драйвера — на другой машине его придётся собрать заново.
Thread Manager: не блокировать кадр
Python в TouchDesigner выполняется в главном потоке. Инференс на 30 мс — это пропущенные кадры.
В версии 2025 появился Thread Manager — компонент, позволяющий держать очередь задач в отдельных потоках. Загрузка модели и инференс уходят в фон, интерфейс и картинка не замирают. Вместе с TDPyEnvManager (управление окружениями Python прямо из TouchDesigner) это делает работу с моделями внутри программы реально применимой.
Официальный пример этой связки — реализация Depth Anything V2: модель с Hugging Face, загруженная и исполняемая через Thread Manager и менеджер окружений — Глубина и сегментация.
3. Отдельный процесс
Модель живёт в своём процессе, картинка ходит через Spout/Syphon или NDI, управление — по OSC.
Дороже по задержке, зато падение модели не роняет шоу. Именно так устроены готовые решения для диффузии. Промежуточный вариант — Engine COMP: отдельный процесс, но управляемый изнутри проекта.
4. Внешний сервис
HTTP-запрос к API — Веб. Задержка в секунды, реального времени нет. Подходит для генерации ассетов, текста и разовых операций — LLM и речь.
Практические правила
- Считайте модель в её родном разрешении. Большинство работает на 256–512 пикселей; подавать туда FullHD бессмысленно и дорого.
- Прогревайте при старте. Первый проход всегда медленнее.
- Разделяйте частоту. Модели не обязательно считаться каждый кадр: 30 или 15 раз в секунду достаточно, между ними — интерполяция.
- Готовьте план Б. Модель не ответила — что показывает шоу?
CUDA, cuDNN, TensorRT, onnxruntime, драйвер видеокарты и версия Python должны быть совместимы. Записывайте рабочую комбинацию и не обновляйте ничего перед шоу.