К содержанию
fohbookбета/ TouchDesigner

Как нейросеть запускается в TouchDesigner

Где считать модель: встроенный оператор, Python в процессе TouchDesigner с tdPyEnvManager и Thread Manager, отдельный процесс или сервис. Цена каждого и официальный TDDepthAnything как шаблон.

Ветка вашего пульта:
Быстрый выбор:

Сначала решают, где модель будет считаться, — от этого зависят задержка и судьба шоу при её падении.

Способ Задержка Риск для шоу Сложность
Встроенный оператор Минимальная Низкий Никакой
Python внутри TouchDesigner Средняя Средний Средняя
Отдельный процесс Средняя плюс передача Низкий Высокая
Сервис по HTTP Секунды Как повезёт с сетью Низкая

Встроенные операторы просят только модели NVIDIA и считают всё на видеокарте, но работают только на Windows с RTX и умеют фиксированный набор задач — Встроенные операторы.

Python в процессе

PyTorch, Transformers или ONNX Runtime ставят во внешнее окружение, и tdPyEnvManager из палитры (с ветки 2025.30000) подключает виртуальное окружение или Conda к Python TouchDesigner, Внешние модули и окружения. Версия Python у пакетов та же, что внутри.

Python работает в главном потоке, и 30 мс инференса — это пропущенные кадры. Thread Manager (тоже с 2025.30000) держит пул рабочих потоков и очередь: загрузка и инференс уходят в фон. Из рабочего потока операторы, компоненты и параметры не трогают вовсе — данные передаются через задачу и колбэки, а колбэки выполняются в главном потоке, Отложенный запуск и потоки.

op('cam').numpyArray() отдаёт кадр массивом NumPy, всегда в плавающей точке; с delayed=True результат приходит к следующему вызову и не стопорит видеокарту. Обратно — copyNumpyArray() в Script TOP. Для CUDA есть cudaMemory(): кадр в память CUDA мимо процессора.

Шаблон — пример TDDepthAnything от разработчика Derivative на сайте Derivative: Depth Anything V2 Small с Hugging Face через PyTorch и Transformers, окружение из tdPyEnvManager, загрузка и инференс через Thread Manager. Windows — PyTorch с CUDA на NVIDIA, macOS — процессор или Metal (MPS), а вариант v2 RT на TensorRT быстрее на свежих NVIDIA. Глубина и сегментация.

ONNX — общий формат: обучили в PyTorch, экспортировали и гоняют через ONNX Runtime без PyTorch, окружение легче, модель переносима.

import onnxruntime as ort

sess = ort.InferenceSession(
    'models/depth.onnx',
    providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])

def infer(arr):            # arr — массив NumPy под вход модели
    return sess.run(None, {'input': arr})[0]

TensorRT собирает движок под конкретную карту: кратно быстрее, но движок привязан к карте и драйверу, и на другой машине его собирают заново.

Снаружи

Своим процессом — Python-сервис, ComfyUI, другой TouchDesigner — модель дороже по задержке, зато её падение шоу не роняет. Картинка передаётся через Spout, Syphon или NDI, управление по OSC или WebSocket; середина между мирами — Engine COMP. Сервис по HTTP (Веб) отвечает секундами: ассеты, текст, разовые операции, Речь, текст и языковые модели.

Кадр уменьшают до входа модели ещё в TouchDesigner — моделям нужны сотни пикселей, а не 4K. Прогревают при старте: первый проход медленный, сборка TensorRT занимает минуты. Считают 15–30 раз в секунду с интерполяцией. И заранее решают, что покажет шоу, если модель не ответила.

Версии

CUDA, cuDNN, TensorRT, PyTorch или ONNX Runtime, драйвер и Python должны быть совместимы. Рабочую комбинацию записывают и перед шоу не трогают.

Нашли в статье ошибку, устаревшее или непонятное место?

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