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

Внешние модули и окружения

Как подключить пакеты pip, зачем нужен TDPyEnvManager и почему numpy лучше не подменять.

TouchDesigner несёт свой Python со своим набором пакетов (numpy, OpenCV и другие). Всё остальное подключается снаружи — и это тот самый шаг, на котором ломается большинство попыток запустить нейросеть.

Способ первый: путь к пакетам

Классический подход, работающий во всех версиях:

  1. Поставьте отдельный Python той же версии, что в TouchDesigner (в актуальных сборках — 3.11), или создайте виртуальное окружение.
  2. Установите туда пакет:
pip install --target=D:/td_packages onnxruntime-gpu
  1. В Edit → Preferences → General включите Add External Python to Search Path и укажите путь в Python 64-bit Module Path. Несколько путей разделяются ;.
  2. Перезапустите TouchDesigner.

Способ второй: TDPyEnvManager

Начиная с версии 2025 в палитре есть компонент TDPyEnvManager — менеджер Python-окружений прямо внутри TouchDesigner.

Что он умеет:

  • создавать и подключать виртуальные окружения (venv) и окружения conda;
  • работать с pip и conda из панели параметров компонента;
  • автоматически добавлять окружение в пути поиска TouchDesigner;
  • хранить контекст в файле рядом с проектом (TDPyEnvManagerContext.yaml, а в свежих сборках — секция в pyproject.toml), чтобы окружение подключалось до инициализации компонентов.

Это правильный способ на 2025-й версии: окружение едет вместе с проектом, а не живёт в голове разработчика.

Thread Manager

Второй компонент из того же набора — Thread Manager. Он позволяет выполнять Python в отдельных потоках с очередью задач, не блокируя главный поток TouchDesigner.

Практический смысл: загрузка модели и инференс идут в фоне, интерфейс и картинка не замирают. Без этого любая тяжёлая библиотека роняет кадры — Как нейросеть запускается в TD.

Что нельзя подменять

Не ставьте свою версию numpy или OpenCV

Внутренние инструменты TouchDesigner полагаются на встроенные numpy и OpenCV. Подключение других версий приводит к падениям без сообщений — причём не сразу, а через час работы. Если библиотека требует другой numpy, изолируйте её в отдельном процессе.

Изоляция как стратегия

Чем тяжелее и «чужероднее» библиотека, тем разумнее не тащить её внутрь:

Способ Плюс Минус
В том же процессе Просто, быстро Падение библиотеки роняет шоу
В потоке (Thread Manager) Не блокирует кадр Всё ещё один процесс
В Engine COMP Изоляция от падений Сложнее отладка
Отдельное приложение + Spout/NDI Полная изоляция Задержка, больше движущихся частей

Для шоу почти всегда правильный ответ — два последних варианта.

Проверка

import sys
for p in sys.path: print(p)

import onnxruntime as ort
print(ort.__version__, ort.get_available_providers())

Если импорт падает — сначала проверьте версию Python, потом разрядность, потом путь. Разбор частых ошибок — Ошибки Python.

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