
概要 📖 – パラメータグループの変化で Python を実行
ParGroup Execute DATは、OP のパラメータグループの変化を契機に Python コールバックを実行する DATです。Parameter Execute DAT が単一パラメータ単位で発火するのに対し、こちらは tx / ty / tz のようにまとまった「パラメータグループ」単位で変化を受け取れるのが特徴です。
主な用途 🎯
- パラメータグループ全体の変化を Python コールバック (
onValuesChanged) でまとめて受け取る - XYZ 座標やRGB色など複数値が連動する操作を 1 本のコールバックで一括ハンドリング
- パルス型パラメータのクリックを
onPulseで検出してアクションを実行 - エクスポートやモードの切替 (定数 / 式 / バインド) をトリガーに別 OP を更新
- カスタムパラメータの編集を契機に state machine の遷移を駆動
データフロー 🔄
入力: 監視対象 OP とパラメータ群 (OPs/Parametersで指定)
↓
グループ内の値・式・エクスポート・モード変化検出
↓
Python コールバック (onValuesChanged(par)等) 実行
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
ParGroup Execute Page 📋
監視対象と起動条件 🎯
Active .active ✅
– On 時、参照しているパラメータの変化に反応してコールバックを起動
– Off 時は監視を完全に停止 (パラメータが変わってもコールバックは呼ばれない)
OPs .op 🔗
– OPs (監視対象 OP) — トリガーとなるパラメータが属する OP を指定
– パターン指定で複数 OP をまとめて監視可能
Parameters .pars 🎚️
– Parameters (監視対象パラメータ) — どのパラメータを監視してスクリプトを起動するか指定
– t* のようなパターンで複数パラメータをまとめて対象にできる
Edit.. .edit ✏️
– Edit.. (編集) — パルスでテキストエディタを開き、DAT 内の Python コールバック本体を編集
– 各コールバック関数 (onValuesChanged 等) の中身はこの DAT のテキストに直接記述する
コールバック形式 .callbackmode 🧩
Callback Mode (コールバック形式) — コールバックに渡される curr / prev 引数の形を決めるメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Per ParGroup Change | .pargroup |
curr / prev が個別の ParGroup オブジェクトとして渡される |
| Combine ParGroup Changes as List | .pargrouplist |
curr / prev が変化した全パラメータのリストとして渡される |
監視するイベント種別 🔔
Value Change .valuechange 🔄
– Value Change (値変化) — 指定パラメータの値が何らかの形で変化したとき onValueChange() を実行
– 各フレームに 1 回呼び出される
On Pulse .onpulse ⚡
– On Pulse (パルス時) — パルス型パラメータがクリックまたは Par.pulse() で発火したとき onPulse() を実行
Expression Change .expressionchange 🧮
– Expression Change (式変化) — 指定パラメータの式が変化したとき onExpressionChange() を実行
– 例: 式を me.time.frame から me.time.seconds に変えると発火
Export Change .exportchange 📤
– Export Change (エクスポート変化) — 指定パラメータへのエクスポート経路が変わったとき onExportChange() を実行
– 例: エクスポート元が /chopname/chan1 から /chopname2/chan2 に変わると発火
Enable Change .enablechange 🔌
– Enable Change (有効/無効変化) — 指定パラメータが無効から有効に切り替わったとき onEnableChange() を実行
Mode Change .modechange 🔧
– Mode Change (モード変化) — 指定パラメータのモードが定数 / 式 / エクスポート / バインドの間で切り替わったとき onModeChange() を実行
監視するパラメータの種類 🗂️
Custom .custom 🏷️
– Custom (カスタム) — On 時、カスタムパラメータ (ユーザ定義パラメータ) を監視対象に含める
Built-In .builtin 🧱
– Built-In (組み込み) — On 時、組み込みパラメータ (標準パラメータ) を監視対象に含める
File Page 📁
ファイル入出力 💾
File .file 📂
– File (ファイル) — ロードするファイルのパスとファイル名 (.txt / .dat 対応)
Sync to File .syncfile 🔁
– Sync to File (ファイル同期) — On 時、プロジェクト起動時にファイルを読み込み、以降はファイルと双方向同期
– DAT 側の編集はファイルに書き戻され、ファイル変更も DAT に反映される
Load on Start .loadonstart 🔄
– Load on Start (起動時ロード) — On 時、プロジェクト起動時に 1 回だけファイルから読み込む
Load File .loadonstartpulse ⏬
– Load File (ファイル読込) — パルスでファイルを即時再ロード
Write on Toe Save .write 💾
– Write on Toe Save (保存時書込) — On 時、.toe プロジェクト保存時に 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: XYZ連動でカメラ更新 🎥
Geometry COMP (tx/ty/tz) → ParGroup Execute DAT (onValuesChanged) → Camera COMP
Geometry COMP の Translate グループ (tx / ty / tz) を 1 つのまとまりとして監視し、3 軸のどれかが動いた瞬間に Python コールバックでカメラ位置をまとめて更新する基本フロー。
- 監視したい Geometry COMP を用意し、ParGroup Execute DAT の
OPsにそのパスを指定 Parametersにt*(Translate グループ) を指定して 3 軸をまとめて対象にするValue Changeを On にしてonValuesChanged(par)内で変化した値を読み出す- コールバック内で
op('cam1').par.tx = ...等にまとめて反映し、3 軸を 1 回の処理で同期
Example 2: RGB編集で色を反映 🎨
Container COMP (custom RGB par) → ParGroup Execute DAT (onValuesChanged) → Constant MAT
UI コンテナのカスタムカラーパラメータ (R / G / B) をグループとして監視し、ユーザがスライダーを動かすたびにマテリアルの色をまとめて書き換える用途。
- Container COMP にカスタム RGB パラメータを作成し、ParGroup Execute DAT の
OPsに指定 Customを On にしてカスタムパラメータを監視対象に含めるCallback ModeをCombine ParGroup Changes as Listにして 3 値をまとめて受け取るonValuesChanged内でop('constant1').par.colorr/colorg/colorbに一括代入
Example 3: パルスで処理発火 ⚡
Base COMP (pulse par) → ParGroup Execute DAT (onPulse) → Script実行
カスタムのパルス型パラメータ (ボタン) を監視し、クリックされた瞬間に保存やリセットなどの一括処理を起動するシンプルな用途。
- Base COMP にパルス型のカスタムパラメータ (ボタン) を作成
- ParGroup Execute DAT の
OPsとParametersでそのパルスを指定 On Pulseを On にしてonPulse(par)にアクション処理を記述- ボタンクリックまたは
Par.pulse()でコールバックが起動し処理が走る
関連オペレータ 🔗
類似機能OP 🔍
- Parameter Execute DAT — 単一パラメータ単位で変化を監視する版 (グループではなく個別)
- CHOP Execute DAT — CHOP チャンネル値の変化を監視する版
- DAT Execute DAT — DAT (テーブル) の内容変化を監視する版
- Panel Execute DAT — UI パネルの状態変化を監視する版
- OP Execute DAT — OP の状態 (フラグ・接続・削除等) の変化を監視する版
- Execute DAT — プロジェクトのライフサイクル (start / exit / pre-frame 等) を監視する版
組み合わせ推奨OP 🔄
- Parameter DAT — 監視対象 OP のパラメータ一覧をテーブルとして取得して併用
- Script DAT — コールバック内で別の DAT を加工して結果を生成
- Text DAT — 共通の処理関数を外部 module としてまとめて import
前処理・後処理DAT 🎯
- 前処理: Parameter DAT、Text DAT
- 後処理: Script DAT、Null DAT
Info DAT情報 📊
ParGroup 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 になっているか確認OPsとParametersに監視対象が正しく指定されているか確認- 監視したいイベント種別 (
Value Change/On Pulse等) が On になっているか確認 - カスタムパラメータを監視する場合は
Customが、標準パラメータの場合はBuilt-Inが On か確認
❌ Problem: グループ内の一部の値しかコールバックに渡ってこない
✅ Solution:
Callback ModeをCombine ParGroup Changes as Listにすると変化した全パラメータをリストでまとめて受け取れるPer ParGroup Changeでは変化したグループごとに個別に呼ばれるため、グループ単位での処理に切替えるParametersのパターンがt*等でグループ全体を捕捉できているか確認
❌ Problem: Python 例外で他のコールバックも止まる
✅ Solution:
- コールバック内を
try / except Exception as e:で囲んで例外を吸収 - Textport / Console でスタックトレースを確認し例外箇所を特定
- 重い処理 (ファイル I/O など) はコールバック外に逃がし、UI スレッドをブロックしない設計に変更
❌ Problem: 値変化のたびに重い処理が走ってフレームが落ちる
✅ Solution:
onValueChange内で前回値と比較し、必要なときだけ重い処理を実行- 監視対象を
Parametersパターンで本当に必要なものだけに絞る Custom/Built-Inのうち不要な側を Off にして監視範囲を減らす
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – ParGroup Execute DAT
- PargroupexecuteDAT Class (Python API 一覧)
- Category:Python (TouchDesigner の Python 一覧)

