
概要 📖 – オペレータの変化で実行
OP Execute DATは、監視対象に指定したオペレータのクック・作成・削除・リネーム等のイベントに反応して Python コールバックを実行する DATです。自身は処理結果のデータを出力するのではなく、Monitor OPs で指定したオペレータの状態変化をトリガに、内部に記述した Python メソッドを呼び出します。CHOP Execute / Parameter Execute / Panel Execute と同じ「イベント駆動コールバック」族の DAT で、オペレータそのものの変化に反応する点が特徴です。
主な用途 🎯
- 監視対象オペレータのクック前後で Python コールバックを実行し、データ処理の前後にフックを差し込む
- オペレータの作成・削除・リネームを検知して、ネットワーク構成の変化に応じた自動処理を走らせる
- フラグ変更や配線変更をトリガに、ノードの状態同期や UI 更新を自動化する
- 子オペレータ数の変化を検知して、COMP 内のリスト・メニューを動的に再構築する
- イベント駆動のツール開発で、ノード操作に反応する独自のオーサリング支援を組む
データフロー 🔄
入力: 監視対象オペレータのイベント (クック / 作成 / 削除 / リネーム 等)
↓
該当コールバックメソッド (onPreCook/onDestroy等) を呼び出し
↓
出力: スクリプト本文に書いた Python 処理を実行
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
OP Execute Page 📋
基本設定 ⚙️
Active .active ✅
– Active (有効化) — オンの間だけ、参照しているオペレータのイベントに反応してコールバックを実行します
– オフにすると監視を停止し、スクリプトは呼び出されません
Execute from .executeloc 📍
– Execute from (実行元) — スクリプトをどの場所を基点に実行するかを決めます (Tscript 専用の設定)
– 実行基点を Specified Operator にした場合は、次の From Operator で基点オペレータを指定します
From Operator .fromop 🗂️
– From Operator (実行元オペレータ) — Execute from を Specified Operator にしたとき、スクリプトの実行基点となるオペレータのパスを指定します
Monitor OPs .op 👁️
– Monitor OPs (監視対象オペレータ) — コールバックのトリガとして監視するオペレータを指定します
– ここで指定したオペレータでイベントが発生すると、下記の各コールバックが呼ばれます
クックコールバック 🔁
Pre Cook .precook ▶️
– Pre Cook (クック前) — 監視対象オペレータがクックされる前に onPreCook() メソッドが呼ばれます
Post Cook .postcook ⏹️
– Post Cook (クック後) — 監視対象オペレータがクックされた後に onPostCook() メソッドが呼ばれます
ライフサイクルコールバック ♻️
Destroy .opdelete 🗑️
– Destroy (削除時) — 監視対象オペレータが削除されたときに onDestroy() メソッドが呼ばれます
Flag Change .flagchange 🚩
– Flag Change (フラグ変更) — オペレータのフラグの状態が変わったときに onFlagChange() メソッドが呼ばれます
– OP 共通フラグおよび COMP / SOP / CHOP の Python アクセス可能なフラグが対象です
Wire Change .wirechange 🔌
– Wire Change (配線変更) — オペレータの入力が繋ぎ直された (接続 / 切断 / 入れ替え) ときに onWireChange() メソッドが呼ばれます
Name Change .namechange 🏷️
– Name Change (名前変更) — オペレータの名前が変更されたときに onNameChange() メソッドが呼ばれます
Path Change .pathchange 🧭
– Path Change (パス変更) — オペレータのパスが変更されたときに onPathChange() メソッドが呼ばれます
UI Change .uichange 🖼️
– UI Change (UI 変更) — オペレータがネットワークエディタ上でリサイズ / 移動されたときに onUIChange() メソッドが呼ばれます
子オペレータコールバック 🌳
Number Children Change .numchildrenchange 🔢
– Number Children Change (子の数変更) — オペレータが持つ子の数が変化したときに onNumChildrenChange() メソッドが呼ばれます
– COMP (コンポーネント) 系オペレータでのみ動作します
Child Rename .childrename ✏️
– Child Rename (子のリネーム) — オペレータの子がリネームされたときに onChildRename() メソッドが呼ばれます
Current Child Change .currentchildchange 🎯
– Current Child Change (カレント子変更) — ネットワーク内で子オペレータがカレント (選択中) になったときに onCurrentChildChange() メソッドが呼ばれます
– COMP 系オペレータでのみ動作します
Extension Change .extensionchange 🧩
– Extension Change (拡張変更) — オペレータの拡張 (Extension) が変更されたときに onExtensionChange() メソッドが呼ばれます
エディタ 📝
コールバックメソッドの本文を記述するための編集ボタン:
- Edit..:
Edit..(編集) — クリックすると DAT のテキストを編集するテキストエディタが開きます。各コールバックメソッドの Python 実装をここに記述します
File Page 📁
ファイル連携 💾
File .file 📄
– File (ファイル) — 読み込むファイルのパスとファイル名を指定します。.txt および .dat ファイルを受け付けます
Sync to File .syncfile 🔄
– Sync to File (ファイル同期) — オンにすると、プロジェクト起動時にディスク上のファイルを DAT に読み込みます (ファイル名の指定が必須)
– ファイルと DAT は双方向で監視され、どちらの変更も即座に反映されます。ファイルが存在しなければ初回更新時に作成されます
Load on Start .loadonstart 🚀
– Load on Start (起動時読込) — オンにすると、プロジェクト起動時にディスク上のファイルを DAT に再読み込みします
Load File .loadonstartpulse 📥
– Load File (ファイル読込) — クリックすると、ファイルを即座に再読み込みします
Write on Toe Save .write 📝
– Write on Toe Save (保存時書出) — オンにすると、プロジェクト保存時に DAT の内容をディスク上のファイルへ書き出します
Write File .writepulse 📤
– Write File (ファイル書出) — クリックすると、ファイルを即座にディスクへ書き出します
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 Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
Word Wrap .wordwrap 🔁
ノード表示でのワードラップ (折り返し) の有効化
| 項目 | 内部名 | 説明 |
|---|---|---|
| Input | .input |
入力 DAT の Word Wrap 設定を継承 |
| On | .on |
Word Wrap を有効化 (ノード上の長い行を折り返し表示) |
| Off | .off |
Word Wrap を無効化 (折り返さずそのまま表示) |
実践アイデア 💡
Example 1: クック前後にフック 🔁
監視対象 OP → OP Execute DAT (Pre Cook / Post Cook) → ログ出力 / 計測処理
重い処理を行うオペレータのクック前後に OP Execute DAT のコールバックを差し込み、処理時間の計測やログ記録を自動化する構成。onPreCook で開始時刻を記録し、onPostCook で経過時間を算出すれば、特定ノードのパフォーマンス監視を外部から非侵襲的に組めます。
- OP Execute DAT を配置し、
Monitor OPsに計測したい監視対象オペレータのパスを指定 Pre CookとPost Cookをオンにして、onPreCook()/onPostCook()を有効化Edit..でスクリプトを開き、onPreCook で開始時刻を保存、onPostCook で経過時間を算出する処理を記述Activeをオンにして監視を開始、対象オペレータがクックされるたびに計測が走る
Example 2: 削除を検知して掃除 🗑️
監視対象 OP → OP Execute DAT (Destroy) → 関連リソースのクリーンアップ
動的に生成・破棄されるオペレータの削除を OP Execute DAT で検知し、紐づくリソース (テーブル行 / 外部接続 / 一時ファイル等) を自動で後始末する設計。onDestroy コールバックで対象が消えた瞬間に掃除処理を走らせれば、手作業のクリーンアップ漏れを防げます。
- OP Execute DAT の
Monitor OPsに、削除を監視したいオペレータのパスを指定 DestroyをオンにしてonDestroy()コールバックを有効化Edit..でスクリプトを開き、onDestroy 内に関連リソースの後始末処理を記述- 対象オペレータが削除されると onDestroy が自動で呼ばれ、クリーンアップが実行される
Example 3: 子の数変化でUI更新 🌳
監視対象 COMP → OP Execute DAT (Number Children Change) → メニュー / リスト再構築
COMP 内に子オペレータが追加・削除されるたびに OP Execute DAT で検知し、その内容を反映したメニューやリスト UI を自動再構築する用途。onNumChildrenChange コールバックを使えば、ユーザがノードを足すだけで連動する動的インターフェースを組めます。
- OP Execute DAT の
Monitor OPsに、子の増減を監視したい COMP のパスを指定 Number Children ChangeをオンにしてonNumChildrenChange()を有効化 (COMP 系のみ動作)Edit..でスクリプトを開き、子の一覧を取得して UI 要素を再生成する処理を記述- COMP の子が増減すると onNumChildrenChange が呼ばれ、メニュー / リストが自動更新される
関連オペレータ 🔗
類似機能OP 🔍
- CHOP Execute DAT — CHOP チャンネルの値変化を監視してコールバックを実行、OP Execute はオペレータ自体の変化を監視
- Parameter Execute DAT — パラメータ値の変更を監視してコールバックを実行、OP Execute はオペレータの構造変化を監視
- Panel Execute DAT — パネル (UI) のインタラクションを監視してコールバックを実行する Execute 兄弟
組み合わせ推奨OP 🔄
- Info DAT — コールバック内で監視対象の状態 (クック回数 / エラー等) を Info DAT で取得して判定に使う
- Text DAT — 共通のコールバック処理を Text DAT (Python モジュール) に切り出して再利用
- Table DAT — コールバックで検知したイベントを Table DAT にログとして書き込み履歴を残す
- Execute DAT — フレーム開始・終了・プロジェクト起動等のグローバルイベントに反応、OP Execute は特定 OP の変化に反応
- DAT Execute DAT — DAT のテーブル内容変化を監視するコールバック、OP Execute と組み合わせ監視範囲を分担
前処理・後処理DAT 🎯
Info DAT情報 📊
OP Execute DAT は Info DAT による詳細情報取得に対応しています (total_cooks / cook_time / cook_frame / warnings / errors 等の共通 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がオンになっているか確認、オフの間はどのコールバックも実行されないMonitor OPsに監視対象のオペレータが正しく指定されているか確認 (パスのタイプミス / ワイルドカードの範囲)- 反応させたいイベントの対応トグル (
Pre Cook/Destroy等) がオンになっているか確認
❌ Problem: 子オペレータ系のコールバックが動かない
✅ Solution:
Number Children Change/Current Child Changeは COMP (コンポーネント) 系オペレータでのみ動作する、SOP / TOP 等を監視対象にしても呼ばれないMonitor OPsに指定したのが COMP かどうかを確認、子を持てるのはコンポーネントのみ- 子の検知ではなく COMP 自身の変化を見たい場合は
Flag Change/UI Change等の他コールバックを使う
❌ Problem: コールバック内のエラーで処理が止まる
✅ Solution:
- Info DAT や Textport でエラーメッセージを確認し、コールバック内の Python 例外を特定
- 重い処理をクックコールバック (
onPreCook/onPostCook) に書くと監視対象のクックごとに走るため、処理を軽量化するか別経路に逃がす - 共通処理は Text DAT モジュールに切り出して import し、コールバック本文を最小化する
❌ Problem: 監視対象を変えても反応しない
✅ Solution:
Monitor OPsを書き換えた後にActiveを一度オフ→オンして監視を再登録するFrom Operatorを使う場合はExecute fromの設定 (実行基点) が意図通りか確認- 複数オペレータを監視する場合はワイルドカード (例:
geo*) のパターンが対象を正しく捕捉しているか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – OP Execute DAT
- Info DAT (DAT 共通 Info チャンネル)
- CHOP Execute DAT (チャンネル値変化のコールバック)

