
概要 📖 – Python スクリプトでテーブル/テキスト出力を動的生成
Script DATは、Python スクリプト (onCook コールバック) で出力テーブルを動的生成する DATです。クックのたびに onCook が呼ばれ、スクリプト内で scriptOp.clear() や scriptOp.appendRow() 等のメソッドで出力 DAT の内容を組み立てます。
主な用途 🎯
- Python コールバック (
onCook) で出力テーブルを毎クック動的生成 - 入力 DAT を加工してテーブル化・整形 (フィルタ・集計・ソート)
- 外部 API レスポンスを整形して Table DAT 化
- 状態スナップショットを Python で組み立てて DAT 出力
- テスト用ダミーデータを式で生成 (時刻 / 乱数 / カウンタ)
データフロー 🔄
入力: 任意 (入力 DAT または無入力)
↓
Python スクリプト (onCookコールバック)
↓
出力: テキスト / テーブル DAT
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 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: 毎フレーム時刻 + 乱数のテーブルを生成 🎲
Script DAT (onCook) → DAT to CHOP
- Callbacks DAT に Text DAT を指定し、
onCook(scriptOp)関数を定義 scriptOp.clear()→scriptOp.appendRow(['time','value'])でヘッダ行を作成scriptOp.appendRow([absTime.frame, random.random()])でデータ行を追加- 後段の DAT to CHOP でチャンネル化
Example 2: 入力 DAT をフィルタ + ソートして整形出力 🔍
Table DAT → Script DAT (onCook) → Table DAT
- 入力に Table DAT を接続 (Script DAT 内で
scriptOp.inputs[0]で参照可) onCook内で入力テーブルを Python で読み出し、条件付きフィルタ + ソート- 結果を
scriptOp.appendRow()で出力テーブルに書き出し - 後段で Select DAT や DAT to CHOP に渡して利用
Example 3: JSON レスポンスを Table 形式に整形 🌐
Web Client DAT → Script DAT (onCook) → Table DAT
- Web Client DAT で API を呼び出して JSON 取得
- Script DAT の onCook で
json.loads(scriptOp.inputs[0].text)でパース - 得られたリストをループして
scriptOp.appendRow(...)で各レコードを行化 - 後段の 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 🎯
- 前処理: Table DAT、Web Client DAT、OSC In DAT
- 後処理: Select DAT、Merge DAT、Null 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に代入


