К содержанию
fohbook/ TouchDesigner
профи

Как нейросеть запускается в 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 и речь.

Практические правила

  1. Считайте модель в её родном разрешении. Большинство работает на 256–512 пикселей; подавать туда FullHD бессмысленно и дорого.
  2. Прогревайте при старте. Первый проход всегда медленнее.
  3. Разделяйте частоту. Модели не обязательно считаться каждый кадр: 30 или 15 раз в секунду достаточно, между ними — интерполяция.
  4. Готовьте план Б. Модель не ответила — что показывает шоу?
Версии — главный источник боли

CUDA, cuDNN, TensorRT, onnxruntime, драйвер видеокарты и версия Python должны быть совместимы. Записывайте рабочую комбинацию и не обновляйте ничего перед шоу.

рядом по смыслу