به‌طور خلاصه:
یک متغیر سراسری (Global) که بیرون از خود پروژه تعریف میشه و TouchDesigner موقع اجرا می‌تونه ازش استفاده کنه.

کاربرد اصلی:

  • مسیرها (Path)

  • تنظیمات وابسته به سیستم

  • پروژه‌های چندسیستمی

  • پرهیز از hard-code کردن مسیرها


انواع Environment Variables در TouchDesigner

1️⃣ متغیرهای پیش‌فرض TouchDesigner (Built-in)

این‌ها از قبل توسط TD تعریف شدن و فقط مصرف می‌شن.

Variable کاربرد
TOUCHDESIGNER_INSTALL_PATH مسیر نصب TD
TOUCHDESIGNER_VERSION نسخه TD
HOME / USERPROFILE مسیر Home کاربر
TEMP فولدر Temp سیستم

🔹 استفاده:

import os
os.environ['TOUCHDESIGNER_INSTALL_PATH']

یا در پارامتر:

$HOME/Documents

2️⃣ متغیرهای سیستم‌عامل (OS Environment Variables)

این‌ها در Windows / macOS / Linux تعریف می‌شن و TD هم بهشون دسترسی داره.

🔹 تعریف در ویندوز:

  1. Environment Variables

  2. System یا User Variables

  3. Add → Name / Value

مثال:

PROJECTS_ROOT = D:\TD_Projects

🔹 استفاده در TouchDesigner:

$PROJECTS_ROOT/MyShow/assets

یا در Python:

import os
os.environ['PROJECTS_ROOT']

3️⃣ متغیرهای اختصاصی پروژه (Project-based)

خیلی حرفه‌ای و تمیز 👌
برای پروژه‌هایی که قراره روی چند سیستم اجرا بشن.

تعریف:

در Edit → Preferences → General → Environment Variables

مثلاً:

SHOW_ROOT = C:/Nocturnix/Shows/EclipsePulse

📌 این‌ها:

  • همراه پروژه ذخیره می‌شن

  • بدون دستکاری سیستم کار می‌کنن

استفاده:

$SHOW_ROOT/media/video

4️⃣ متغیرهای موقت (Session-based / Runtime)

این‌ها فقط در زمان اجرا تعریف می‌شن و با بستن TD از بین می‌رن.

تعریف در Python:

import os
os.environ['LIVE_MODE'] = '1'

استفاده:

if os.environ.get('LIVE_MODE') == '1':
debug = False

📌 مناسب برای:

  • Live performance

  • Debug / Release mode

  • سوییچ‌های اجرایی


5️⃣ متغیرهای پارامتری (Expression-based Variables)

این‌ها Environment Variable واقعی نیستن ولی خیلی وقت‌ها به‌جاش استفاده می‌شن.

مثال:

project.folder + '/assets'

یا:

me.parent().par.Rootpath

📌 تفاوت:

  • محلی هستن

  • خارج از TD قابل دسترسی نیستن


تفاوت Environment Variable با Alias و Relative Path

نوع سراسری قابل انتقال وابسته به سیستم
Env Variable ❌ (در پروژه)
Relative Path
Absolute Path

بهترین Practice (خیلی مهم 🔥)

برای پروژه‌های جدی:

SHOW_ROOT

├── media
├── audio
├── tox
├── data
└── export

و همه‌چیز با:

$SHOW_ROOT/media

نه:

D:/Babak/Desktop/final_final_v3

(Environment Variables)
در مدیریت سیستم‌های بزرگ و اینستالیشن‌های پیچیده، نحوه راه‌اندازی نرم‌افزارها یکی از چالش‌های اصلی است [۱]. استفاده از متغیرهای محیطی (Environment Variables) ابزاری قدرتمند برای پیکربندی خودکار پروژه، مدیریت چندین کارت گرافیک (GPU) و استفاده از یک فایل واحد برای نقش‌های مختلف در شبکه است [۱، ۱۵]. در این مقاله، سه روش اصلی برای استفاده از این قابلیت را بررسی می‌کنیم.
چرا از متغیرهای محیطی استفاده کنیم؟
زمانی که با پروژه‌های بزرگ سر و کار دارید، ممکن است بخواهید یک فایل پروژه (.toe) بسته به شرایط، نقش‌های متفاوتی ایفا کند [۱۳]. به عنوان مثال:
یک نمونه از فایل به عنوان Controller (کنترل‌کننده) اجرا شود.
نمونه دیگر به عنوان Renderer یا Node (رندرکننده) عمل کند [۱۳، ۱۴].
در سیستم‌های دارای چند کارت گرافیک Quadro، برای متصل کردن (Binding) هر نمونه از پروژه به یک GPU خاص، استفاده از اسکریپت و متغیرهای محیطی ضروری است [۱۵].
——————————————————————————–
روش اول: استفاده از فایل‌های Batch در ویندوز
این روش برای اینستالیشن‌هایی که باید با روشن شدن کامپیوتر به طور خودکار اجرا شوند (Startup)، بسیار ایده‌آل است [۴].
گام‌های اجرایی:
۱. یک فایل با پسوند .cmd در کنار پروژه خود بسازید [۴]. ۲. از دستور set برای تعریف متغیر استفاده کنید [۱۲]. ۳. با استفاده از مسیرهای نسبی (%~dp0)، فایل پروژه را فراخوانی کنید تا در صورت جابجایی پوشه، اسکریپت همچنان کار کند [۸].
نمونه کد Batch:
@echo off
set startup=controller
:: اجرای فایل پروژه با متغیر تعریف شده
start "" "C:\Program Files\derivative\TouchDesigner\bin\TouchDesigner.exe" "%~dp0\auto_start.toe"
در این حالت، TouchDesigner متغیری به نام startup را با مقدار controller دریافت می‌کند که می‌توانید آن را با عبارت var('startup') در داخل نرم‌افزار فراخوانی کنید [۱۰، ۱۲].
——————————————————————————–
روش دوم: اسکریپت‌نویسی پایتون (قابل حمل و منعطف)
اگر می‌خواهید اسکریپت شما هم در ویندوز و هم در مک کار کند، پایتون بهترین گزینه است [۳۳]. با استفاده از ماژول os در پایتون، می‌توانید قبل از باز کردن پروژه، محیط سیستم‌عامل را تنظیم کنید [۳۳، ۳۵].
مزایای این روش:
رفع مشکل کاراکترهای خاص در مسیردهی ویندوز با تغییر جهت اسلش‌ها [۳۴].
امکان اجرای چندین نمونه از پروژه به صورت همزمان با مقادیر متفاوت در یک حلقه (Loop) [۳۶، ۳۷].
نمونه کد پایتون:
import os
os.environ['startup'] = 'node'
os.startfile("Auto_Start.toe")
——————————————————————————–
روش سوم: ساخت Launcher پیشرفته (سیستم ماژولار)
برای پروژه‌های حرفه‌ای، متیو ریگن پیشنهاد می‌کند یک ماژول اختصاصی برای “لانچر” بسازید [۱۷]. این کار باعث می‌شود کد شما قابلیت گسترش (Extensible) داشته باشد و مدیریت آن آسان‌تر شود [۱۷].
ویژگی‌های سیستم Launcher پیشرفته:
مدیریت ترتیب اجرا: می‌توانید تنظیم کنید که ابتدا نرم‌افزارهای جانبی (مثل Ableton یا Max) اجرا شوند و پس از چند ثانیه تاخیر، TouchDesigner باز شود [۳۱].
استفاده از **kwargs: این قابلیت در پایتون اجازه می‌دهد هر تعداد متغیر محیطی را بدون تغییر در ساختار تابع اصلی، به پروژه ارسال کنید [۲۳].
اتوماسیون کامل: این روش برای گالری‌ها یا فضاهای عمومی که نیاز به مدیریت بدون دخالت دست دارند، حیاتی است [۳۲].
ساختار پیشنهادی متیو ریگن: او یک فایل launcher.py شامل توابع paths و launch می‌سازد که وظیفه ترکیب مسیرها و تنظیم os.environ را بر عهده دارند [۱۸، ۲۰، ۲۹]. سپس در یک فایل اصلی، لیست تمام نمونه‌هایی که باید اجرا شوند را به صورت دیکشنری تعریف می‌کند [۲۵، ۲۶].
——————————————————————————–
نتیجه‌گیری
استفاده از متغیرهای محیطی به جای تنظیمات دستی در داخل فایل پروژه، پایداری سیستم را به شدت افزایش می‌دهد [۳۲]. با این رویکرد، شما به جای داشتن چندین فایل پروژه مشابه، از یک فایل هوشمند استفاده می‌کنید که بر اساس متغیرهای محیطی، رفتار خود را تغییر می‌دهد [۱۳، ۳۱]. این روش نه تنها در زمان توسعه صرفه‌جویی می‌کند، بلکه فرآیند عیب‌یابی و نگهداری اینستالیشن‌های طولانی‌مدت را برای شما و مشتریانتان بسیار ساده‌تر می‌سازد [۳۱، ۳۲].