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

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

Script DAT の Python スクリプト動的生成機能を示す図

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

概要 📖 – Python スクリプトでテーブル/テキスト出力を動的生成

Script DATは、Python スクリプト (onCook コールバック) で出力テーブルを動的生成する DATです。クックのたびに onCook が呼ばれ、スクリプト内で scriptOp.clear()scriptOp.appendRow() 等のメソッドで出力 DAT の内容を組み立てます。

主な用途 🎯

  • Python コールバック (onCook) で出力テーブルを毎クック動的生成
  • 入力 DAT を加工してテーブル化・整形 (フィルタ・集計・ソート)
  • 外部 API レスポンスを整形して Table DAT 化
  • 状態スナップショットを Python で組み立てて DAT 出力
  • テスト用ダミーデータを式で生成 (時刻 / 乱数 / カウンタ)

データフロー 🔄

入力: 任意 (入力 DAT または無入力)

Python スクリプト (onCook コールバック)

出力: テキスト / テーブル DAT

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Script Page 📋

スクリプトと出力タイプ 🐍

Callbacks DAT .callbacks 📜
– クック時に呼ばれる Python コールバックを持つ DAT を指定
– コールバック関数 onCook(scriptOp) でテーブル / テキストを組み立てる
scriptOp.clear() / scriptOp.appendRow() / scriptOp.text = ... 等のメソッドが使用可能

Output Type .outputtype 📤
– 出力 DAT の形式 (Table または Text) を選択
– Table モードでは行・列構造の DAT として、Text モードでは生テキストとして出力


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: 毎フレーム時刻 + 乱数のテーブルを生成 🎲

Script DAT (onCook) → DAT to CHOP
  1. Callbacks DAT に Text DAT を指定し、onCook(scriptOp) 関数を定義
  2. scriptOp.clear()scriptOp.appendRow(['time','value']) でヘッダ行を作成
  3. scriptOp.appendRow([absTime.frame, random.random()]) でデータ行を追加
  4. 後段の DAT to CHOP でチャンネル化

Example 2: 入力 DAT をフィルタ + ソートして整形出力 🔍

Table DAT → Script DAT (onCook) → Table DAT
  1. 入力に Table DAT を接続 (Script DAT 内で scriptOp.inputs[0] で参照可)
  2. onCook 内で入力テーブルを Python で読み出し、条件付きフィルタ + ソート
  3. 結果を scriptOp.appendRow() で出力テーブルに書き出し
  4. 後段で Select DAT や DAT to CHOP に渡して利用

Example 3: JSON レスポンスを Table 形式に整形 🌐

Web Client DAT → Script DAT (onCook) → Table DAT
  1. Web Client DAT で API を呼び出して JSON 取得
  2. Script DAT の onCook で json.loads(scriptOp.inputs[0].text) でパース
  3. 得られたリストをループして scriptOp.appendRow(...) で各レコードを行化
  4. 後段の DAT to CHOP で数値列を CHOP 化

関連オペレータ 🔗

類似機能OP 🔍

  • Evaluate DAT — Python 不要でセル式評価のみ行うシンプル版
  • Text DAT — Python スクリプトを保持するが自動クック実行はしない

組み合わせ推奨OP 🔄

  • Table DAT — 入力テーブルとして / 出力テーブルの確定先として併用
  • DAT to CHOP — 生成テーブルの数値列を CHOP チャンネル化
  • Web Client DAT — API レスポンスを Script DAT で整形
  • Timer CHOP — Script DAT を時間トリガで再クックさせる
  • Trigger CHOP — イベントトリガで Script DAT を再評価

前処理・後処理DAT 🎯


Info DAT情報 📊

Script DAT は Info DAT による詳細情報取得に対応しています。

DAT 固有情報 📄

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

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒) — スクリプト実行時間の指標
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数 (スクリプト例外発生時にカウント)

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

よくある問題と解決策 🔧

❌ Problem: onCook が呼ばれない / 出力が更新されない
✅ Solution:

  • Callbacks DAT パラメータに正しい Text DAT パスが指定されているか確認
  • Callbacks DAT 内に onCook(scriptOp) 関数が定義されているか確認 (関数名タイポ多発)
  • Script DAT は入力 DAT または依存パラメータが変化したときにクックされる。何も変わらないと再評価されないため Timer CHOP 等でトリガ

❌ Problem: Python 例外で出力が止まる
✅ Solution:

  • Textport / Console でエラーメッセージを確認 (例外ログは Textport に出力される)
  • scriptOp.clear() を毎回最初に呼んで前回の出力をリセットし、状態残留を防ぐ
  • try / except で例外を捕捉して scriptOp.appendRow([str(e)]) 等でエラー行を出力テーブルに残す

❌ Problem: テーブル / テキストモードの違いで appendRow が効かない
✅ Solution:

  • Output Type を Table に設定する (Text モードでは scriptOp.text = ... を使う)
  • appendRow / appendCol はテーブルモード専用 API
  • テキストモードでテーブルを書きたい場合は CSV / TSV 文字列を scriptOp.text に代入

参考資料 📚

公式リソース 📖

コミュニティ 💬

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