Execute DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Execute DAT が onStart / onCreate / onFrameStart 等の system イベントで Python コールバックを発火させる流れを示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – イベントで処理を発火させる

Execute DATは、TouchDesigner プロセスやフレーム進行に応じた Python コールバックを発火させるイベントトリガー DATです。onStart / onCreate / onExit といったライフサイクル系から、onFrameStart / onFrameEnd の per-frame 系、onPlayStateChange / onDeviceChange の状態変化系まで、トリガーしたい event だけをトグルで有効化して使います。同種の DAT Execute DATCHOP Execute DAT が値変化トリガーであるのに対し、本 DAT はシステム側のイベントトリガーを担当します。

主な用途 🎯

  • onFrameStart / onFrameEnd による毎フレーム Python 実行で軽量な per-frame 処理を仕込む
  • onStart / onCreate による起動・生成時の初期化 (sys.stdout リダイレクトや storage 初期化など)
  • onExit によるクリーンアップ (外部接続のクローズや一時ファイルの後始末)
  • onPlayStateChange による再生・一時停止イベントの捕捉でタイムライン状態に応じた処理切替
  • onDeviceChange によるデバイス hot-plug 検知 (MIDI / カメラ / ジョイスティック等の接続変化に追従)

データフロー 🔄

システムイベント発生 (起動 / ノード生成 / フレーム進行 / 再生状態変化 / デバイス変化)

Execute DAT が対応する on* コールバック関数を Python として実行

関数本体で任意の副作用 (OP 操作 / storage 更新 / ログ出力 / 外部 I/O)

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Execute Page ⚡

基本制御 🟢

Active .active 🔌
– On のとき、下記で有効化されたイベントに対して DAT がコールバックを発火
– Off にすると on* 関数本体は変更せずに一括で停止できる (デバッグ時の素早い無効化に便利)

実行コンテキスト (Tscript legacy) 🧭

Execute from .executeloc 📍
Tscript 専用のレガシーパラメータで、スクリプトが実行される基点位置を決定
– Python コールバックを使う現代的な運用ではほぼ意識しないが、後段の From Operator と組で機能する

From Operator .fromop 🎯
Execute from が Specified Operator のときに、スクリプトを実行する基点となるコンポーネント参照
– 相対パスの解決基点となる Component を明示的に固定したい場合に指定する

ライフサイクルイベント (Start / Create / Exit) 🌅

Start .start 🚀
– On のとき、TouchDesigner プロセス起動時に onStart() が 1 回実行される
– TouchEngine では「コンポーネントが TouchEngine 起動後に読み込まれる」性質上、このコールバックは呼ばれない点に注意

Create .create 🌱
– On のとき、このノードが生成された瞬間に onCreate() が実行される
– 起動時の読み込み・ディスクからのロード・コピー&ペースト・任意のノード生成経路すべてが対象

Exit .exit 🛑
– On のとき、TouchDesigner プロセスが終了する直前に onExit() が呼ばれる
– 外部接続のクローズや一時ファイルの後始末などクリーンアップ処理を仕込む箇所

フレームイベント (Frame Start / Frame End) 🎞️

Frame Start .framestart ⏱️
– On のとき、毎フレームの開始時に onFrameStart(frame) が実行される
– フレーム頭で行いたい状態更新・センサー値取得・スクリプト先頭処理を仕込むスロット

Frame End .frameend 🏁
– On のとき、毎フレームの終端で onFrameEnd(frame) が実行される
– 1 フレーム分の cook が確定した後の集計・ログ出力・後段送信などに使う

状態変化イベント (Play State / Device) 🎚️

Play State Change .playstatechange ⏯️
– On のとき、タイムラインの play / pause が切替わるたびに onPlayStateChange(state) が発火
– 一時停止中だけ重い処理を止めたい、再生開始時にリセットを走らせたいなどの状態依存処理を仕込める

Device Change .devicechange 🔄
– On のとき、入出力デバイスの接続変化があった瞬間に onDeviceChange() が発火
– MIDI コントローラ・カメラ・ジョイスティック等の hot-plug を検知して再列挙する処理に使う

スクリプト編集 ✏️

Edit.. .edit 📝
– クリックで外部テキストエディタを開き、DAT 内の Python コールバック本体を編集するパルスパラメータ
onStart() 内で sys.stdout = op('text1') のように Python 標準出力を Text DAT へリダイレクトする運用が典型例 (公式ドキュメント記載のティップス)


File Page 📁

ファイル参照とロード 📂

File .file 🗂️
– 読み込むスクリプトファイルのパスとファイル名
– 受け付け拡張子は .txt.dat

Sync to File .syncfile 🔁
– On のとき、プロジェクト開始時に該当ファイルをディスクから DAT に読み込み、以降は双方向で同期
– ディスク側で外部エディタが編集すれば DAT が更新され、DAT が編集されればディスク側にも即書き戻される
– ファイルが存在しない場合は DAT が初めて更新された時点で自動生成され、ファイルが削除された場合は DAT は現在の内容を保持する

Load on Start .loadonstart 🚦
– On のとき、プロジェクト開始時にディスク上のファイルを DAT に再ロード
– 起動時にはディスク側を真の値として強制反映したい運用に使う

Load File .loadonstartpulse ⤵️
– クリック (パルス) で即座にディスク上のファイルを DAT に再ロードする手動トリガー
– 外部編集後にプロジェクトを起動し直さずに反映したいときに使う

ディスクへの書込み 💾

Write on Toe Save .write 📤
– On のとき、.toe プロジェクトファイルを保存した瞬間に DAT 内容をディスク上のファイルへ書き出す
– プロジェクトと外部スクリプトファイルの内容を保存時に同期させたい場合に使う

Write File .writepulse ⤴️
– クリック (パルス) で即座に DAT 内容をディスク上のファイルへ書き出す手動トリガー
– プロジェクト保存を待たずにファイルへ反映したいときに使う


Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: onFrameStartで毎フレーム処理 🎞️

TouchDesigner フレーム進行 → Execute DAT (Frame Start = On, onFrameStart 実装) → 任意の OP 操作 / storage 更新

毎フレーム決まった処理を Python で記述したい場合、CHOP ネットワークではなく Execute DAT の onFrameStart に書くと、Python レベルで一貫した制御フローを保てます。

  1. Execute DAT を配置し、Active を On、Frame Start を On にする
  2. Edit.. パルスを押して外部エディタを開き、def onFrameStart(frame): ... の本体を実装
  3. frame 引数からは現在のフレーム番号が得られるので、これを基にした周期処理や時間制御を組む
  4. デバッグ時は Active を Off に戻すだけで一括停止できる (関数本体を残したまま安全に無効化可能)

Example 2: onStart で起動時初期化 + 標準出力リダイレクト 🚀

TouchDesigner 起動 → Execute DAT (Start = On, onStart 実装) → sys.stdout を Text DAT に差し替え

公式ドキュメントが推奨するように、onStart() でプロセス起動直後に Python の標準出力をプロジェクト内 Text DAT にリダイレクトすると、Textport を開かなくてもログをノード上で常に確認できます。

  1. Execute DAT を配置し、ActiveStart を On にする
  2. Edit.. から onStart() 内に import sys; sys.stdout = op('text1') を記述
  3. 復元可能にしたい場合は prev = sys.stdout を退避し、終了時 onExit()sys.stdout = prev に戻す
  4. TouchEngine 環境では onStart が呼ばれない仕様のため、TouchEngine 配下のコンポーネントでは onCreate 側にフォールバックする

Example 3: onPlayStateChangeで処理切替 ⏯️

タイムライン play/pause 切替 → Execute DAT (Play State Change = On, onPlayStateChange 実装) → 処理 ON/OFF

重い解析処理や外部 I/O を「再生中だけ動かしたい」「一時停止中は止めたい」シーンで、onPlayStateChange を起点にすると分岐ロジックを 1 箇所に集約できます。

  1. Execute DAT を配置し、ActivePlay State Change を On にする
  2. onPlayStateChange(state) 内で state 引数 (再生中なら True、停止中なら False) を判定
  3. 再生開始時にはサンプリングを再開、一時停止時には外部接続をアイドル状態にするなど、必要な分岐処理を Python で記述
  4. 対になる初期化を onStart() / onCreate() に置き、終了処理を onExit() に置くことでライフサイクルを 1 つの Execute DAT に集約できる

関連オペレータ 🔗

類似機能OP 🔍

  • DAT Execute DAT — 対象 DAT のセル変更・行列変化を検知して Python コールバックを発火させる値変化トリガー DAT
  • CHOP Execute DAT — 対象 CHOP のチャンネル値変化を検知して Python コールバックを発火させる DAT
  • Parameter Execute DAT — 対象 OP の特定パラメータが変化したときに Python コールバックを発火させる DAT
  • Panel Execute DAT — Panel COMP 上の UI イベント (クリック / ドラッグ等) を Python コールバックで受ける DAT
  • OP Execute DAT — 対象 OP のクック・名前変更・削除など OP ライフサイクルイベントを捕捉する DAT

組み合わせ推奨OP 🔄

  • Text DAT — Execute DAT 内のコールバック本体をプレーンテキストとして別 Text DAT に切り出し、外部エディタで管理
  • Examine DAT — Execute DAT が触る storage / globals の中身をリアルタイムで可視化してデバッグ

前処理・後処理DAT 🎯


Info DAT情報 📊

Execute DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: コールバックがまったく呼ばれない
✅ Solution:

  • Active パラメータが On になっているか確認 (Off だと全イベントが停止する)
  • 対象イベントのトグル (Start / Create / Frame Start 等) が個別に On になっているか確認
  • Edit.. で開いたコールバック関数のシグネチャがドキュメント通り (def onFrameStart(frame): 等) になっているか確認、関数名のタイポは無音失敗の典型原因
  • TouchEngine 環境下では onStart が呼ばれない仕様のため、onCreate 側へフォールバックして検証する

❌ Problem: 想定外のタイミングで onCreate / onStart が発火する
✅ Solution:

  • onCreate() は「起動・ロード・コピー&ペースト・任意のノード生成経路すべて」で呼ばれる仕様のため、起動時だけ走らせたい初期化は onStart() 側に置く
  • コピー&ペースト由来の発火を区別したい場合は、onCreate() 内で Component の storage 等に「初回フラグ」を持たせて二重実行を防ぐ
  • ライフサイクルイベントとフレームイベントを 1 つの Execute DAT に詰め込みすぎている場合は、責務単位で Execute DAT を分割する

❌ Problem: 複数の Execute DAT を使ったとき発火順が安定しない
✅ Solution:

  • 公式ノート: 複数の Execute DAT の Start / Create 関数は、DAT 名の numbered-alphanumeric 順で発火する
  • 順序を強制したい場合は DAT 名に 01_init_execute / 02_post_init_execute のように数値プレフィックスを付ける
  • そもそも順序依存を避けたい場合は、初期化処理を 1 つの Execute DAT に集約し、内部関数呼び出しで順序を明示する
  • 順序の検証には Examine DAT や Text DAT へのログ出力を併用すると確認しやすい

❌ Problem: Sync to File が機能せず DAT とディスクが乖離する
✅ Solution:

  • File パラメータが空でないか、パス区切りが OS 規約と一致しているかを確認
  • Sync to File を一度 Off → On に切替えてからプロジェクトを保存し直すと初期同期が走り直す
  • 対象ファイルが別プロセス (外部エディタの未保存バッファ等) でロックされていないかを確認
  • 起動時にディスク側を強制反映したい場合は Load on Start も併用、即時反映したいときは Load File パルスを叩く

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました