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

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

Examine DAT の OP 内部 dict / Python オブジェクト可視化を示す図

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

概要 📖 – 内部のデータ構造を確認する

Examine DATは、OPの内部ディクショナリやPythonオブジェクトを再帰的に展開し、Level / Key / Type / Value 形式で可視化するデバッグDATです。Component の storage や Python の locals / globals を中身が見える形で並べてくれるため、ノードグラフだけでは追いにくい内部状態のデバッグに使います。FormatTable にすると Level / Key / Type / Value の列を持つ整形済みテーブルとして出力されます。

主な用途 🎯

  • Component の内部ストレージ dict (operator locals) の中身をテーブル表示してデバッグ
  • プロジェクト全体の Globals dict の状態をリアルタイムで可視化
  • 任意の Python 式を Expression パラメータに記述し、評価結果の階層構造を確認
  • Key / Type / Value フィルタで大規模 dict から特定のエントリのみを抽出表示
  • Format=Table モードで Level / Key / Type / Value 列に整形した形でロガー出力

データフロー 🔄

対象 OP のパス指定 (op パラメータ)

Source 選択 (Operator Locals / Globals)

再帰展開 (Max Levels / Expand Classes)

フィルタ適用 (Key / Type / Value)

出力 DAT: Text 形式または Table 形式

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Examine Page 📋

対象オペレータと参照範囲 🎯

Operator .op 🧭
– 中身を覗きたい対象 OP へのパス文字列
– 相対パス・絶対パスのどちらでも指定可能

Subkey .subkey 🔑
– 対象が dict のとき、特定キーだけを掘り下げて表示するための絞り込み
– トップレベルではなく内部の特定エントリだけ確認したいときに使う

Expression .expression 🧮
Source に依存しない任意の Python 式を直接記述するスロット
– 式の評価結果を Examine DAT がそのまま再帰展開して表示する

Source .source 🎛️

対象 OP のどの部分を表示するかを選ぶメニュー

項目 内部名 説明
Operator Locals .locals 対象 DAT モジュールに紐づく locals dict を展開 (DAT 限定)
Globals .globals プロジェクト全体の globals dict (テキストポートからもアクセス可能) を展開

展開深さの制御 📐

Level .level 🪜
– 表示する階層の最大深度を上限クランプする整数値
– 大規模 dict のトップだけ覗きたいときに小さい値で打ち切れる

Expand Classes .expandclasses 🧩
– On 時、複雑なオブジェクト (例: OP インスタンス) の中身をさらに再帰展開
– Off 時はクラスを 1 行のサマリで止めるためテーブルが軽くなる

Max Levels .maxlevels ♾️
– Python オブジェクトを再帰展開する最大階層数を別途指定
– 自己参照する dict などで無限ループに陥らないための保険として機能する

結果フィルタ (Key / Type / Value) 🔎

Key .key 🔑
– 出力結果を キー名でフィルタするパターン文字列
* 等のワイルドカードで部分一致絞り込みが可能

Type .type 🏷️
– 出力結果を 型名でフィルタするパターン文字列
– 例えば intOP 系だけを抽出したいときに使う

Value .value 💎
– 出力結果を でフィルタするパターン文字列
– 特定値を持つエントリだけを抽出表示できる

出力フォーマット .format 🧾

Examine DAT の出力をテキストとして並べるか、テーブルとして整形するかの選択

項目 内部名 説明
Text .text 生のテキスト形式で出力 (人間がそのまま読みやすい形)
Table .table Level / Key / Type / Value の列を持つテーブル形式で出力

テーブル出力時の列制御 🗂️

Output Headers .outputheaders 🏁
– On 時、FormatTable のときに列名のヘッダ行を表示
– 後段で Select DAT などからカラム名で参照したいときに必須

Output Level .outputlevel 🪜
– On 時、結果テーブルに Level 列 (階層深度) を含めて出力
– 不要なら Off にして列数を減らす

Output Key .outputkey 🔑
– On 時、結果テーブルに Key 列を含めて出力
– キーが不要な flat なリスト用途では Off にして簡略化

Output Type .outputtype 🏷️
– On 時、結果テーブルに Type 列を含めて出力
– 値だけで十分なときは Off にして列を 1 個減らせる

Output Value .outputvalue 💎
– On 時、結果テーブルに Value 列を含めて出力
– 通常は On のまま (Off にすると値が表示されなくなる)


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: internal storageをデバッグ表示 🔍

Container COMP (storage に dict 保持) → Examine DAT (Source=Operator Locals) → Format=Table → 観察

Container COMP などに storage として保持した状態 dict が、ノードグラフ上では中身が見えないため、Examine DAT を貼って locals を覗くのが定石フロー。

  1. 対象 Component に storage['state'] = {...} のような dict を保持しておく
  2. Examine DAT を配置し、Operator パラメータに対象 Component のパスを記入
  3. SourceOperator Locals に設定し、FormatTable に切替
  4. Output Level / Output Key / Output Type / Output Value を必要な列だけ On にして整形
  5. 実行中に Component の storage が更新されると Examine DAT のテーブルが自動更新される

Example 2: Globals dict のリアルタイム監視で状態管理デバッグ 🌐

Project Globals (任意の場所で td.global 等を書込) → Examine DAT (Source=Globals) → Text TOP に流して常時表示

プロジェクト全体で共有するグローバル変数の現在値を、テキストポートを開かなくてもノード上で常に確認できるようにする監視フロー。

  1. Examine DAT を配置し、SourceGlobals に設定
  2. 必要なら Key パターンで特定のグローバル変数名だけを絞り込み
  3. FormatTable + Output Headers On で列名付きテーブル化
  4. Text TOP に Examine DAT の出力を流して画面上に常時表示

Example 3: Python式を評価し階層を覗く 🧮

Examine DAT (Expression=任意の式) → 再帰展開 → 出力テーブル

OP に紐付かない自由 Python 式 (例: モジュールインポート結果や辞書内包) を実行時に評価し、その階層構造を確認するアドホックなデバッグ用途。

  1. Examine DAT の Expression パラメータに評価したい式を直接書く (例: {k: type(v).__name__ for k, v in op('container1').storage.items()})
  2. Max Levels を程々の値 (3 など) に設定して無限ループを防ぐ
  3. Expand Classes を On にすると複雑なオブジェクトの中身まで展開、Off にすると軽量化
  4. TypeValue フィルタで気になる型・値だけ抽出表示

関連オペレータ 🔗

類似機能OP 🔍

  • Info DAT — OP のメタ情報 (cook time / num_rows 等) をテーブル取得する DAT

組み合わせ推奨OP 🔄

  • Text DAT — Expression 式を別 Text DAT に書いて外部エディタで管理 + Examine DAT から参照
  • Table DAT — Examine DAT の Table 出力を集約・整形して保持する後段コンテナ
  • DAT Execute DAT — Examine DAT の内容変化をトリガーに Python コールバックを発火
  • Script DAT — Examine DAT で得た情報をさらに Python で加工して別 DAT に展開
  • Text TOP — Examine DAT の出力テキストをそのまま画面上にオーバーレイ表示

前処理・後処理DAT 🎯


Info DAT情報 📊

Examine 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: 出力が空、または期待した dict の中身が表示されない
✅ Solution:

  • Operator パラメータのパスが対象 OP と一致しているか確認 (タイプミス / 相対パスのずれ)
  • Source の選択が目的と合っているか確認 (locals が空なら Globals 側、Globals が空なら locals 側を試す)
  • Subkey を一旦空にしてトップレベル全体を表示してから絞り込み直す
  • 対象 Component に実際に storage / locals dict がセットされているか別経路 (Textport) で先に確認

❌ Problem: 期待した深さまで階層が展開されない
✅ Solution:

  • Level の上限クランプが小さすぎないか確認し、必要なら大きめに引き上げる
  • Max Levels を増やして Python オブジェクト側の展開上限を緩める
  • Expand Classes を On にして複雑オブジェクト (OP インスタンス等) の中身まで展開
  • 深くしすぎると自己参照で重くなるため、対象 dict のサイズに応じて値を慎重に選ぶ

❌ Problem: 出力が重く、再描画が遅い
✅ Solution:

  • Expand Classes を Off にしてクラス内部の展開を止める
  • Max Levels / Level を低めに制限してテーブル行数を抑える
  • Key / Type / Value フィルタで本当に必要なエントリだけに絞る
  • 監視対象が複数あるなら Select DATNull DAT で後段を分岐させ、ビュー単位で必要な列だけ拾う

❌ Problem: テーブル形式にしたのに列ヘッダや特定の列が出ない
✅ Solution:

  • FormatTable になっているか確認 (Text モードでは列構造を持たない)
  • Output Headers を On にしてヘッダ行を表示
  • Output Level / Output Key / Output Type / Output Value のうち欲しい列が On になっているか確認
  • 後段で Select DAT を使う場合は Output Headers On が前提条件

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました