
概要 📖 – キー入力で処理を発火する
Keyboard In DATは、キーボード入力イベントを捕捉し、Python コールバックで任意の処理を発火させるインタラクション DATです。Keys で対象キーをホワイトリスト化し、Shortcuts で ctrl+r のような修飾子付きショートカットを登録、Panels で対象パネルが focus を持っているときのみ反応させる、といった粒度の制御が可能です。同種の Mouse In CHOP がマウス入力を担うのに対し、本 DAT はキーボード入力イベントを担当します。
主な用途 🎯
- キーボードショートカットによるシーン切替・アプリ制御 (ライブパフォーマンスやインスタレーション運用時の手元操作)
- インタラクティブ作品でのキー入力ハンドリング (押下キーごとに表現を切替えるリアルタイム演出)
- Performance Window 専用のキー監視でフルスクリーン上演時のみ反応する hotkey を仕込む
- Panels パラメータによる panel focus 連動の文脈別キー処理 (UI フォーカス先に応じてキー意味を切替)
- キーイベントログとしての利用でデバッグ時の入力履歴を
Maximum Lines制限付きで蓄積
データフロー 🔄
キーボード押下 / 離上イベント発生
↓
Keys / Shortcuts / Panels / Perform Window Only でフィルタリング
↓
Callbacks DAT のonKey/onShortcutコールバックを Python として実行
↓
関数本体で任意の副作用 (OP 操作 / storage 更新 / 表示切替 / 外部 I/O)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Keyboard In Page ⌨️
基本制御 🟢
Active .active 🔌
– On のとき、キーボードイベントをログに追加してコールバックを発火
– Off にすると onKey / onShortcut 関数本体は変更せずに一括でイベント記録を停止できる (デバッグ時の素早い無効化に便利)
Perform Window Only .perform 🖥️
– On のときは Perform Mode (フルスクリーン上演) 中のみキーイベントを検知
– 開発中のネットワーク編集画面でのキー操作を誤ってトリガーしない安全策として使う
イベントフィルタ 🔍
Keys .keys ⌨️
– ログとコールバック対象とするキーをスペース区切りで列挙 (例: 1 2 g h で 1 / 2 / g / h キーのみ反応)
– 空欄ならフィルタリングなし (全キーが対象)、許容キー名一覧は公式 Keyboard UI ページを参照
Shortcuts .shortcuts 🎹
– 監視対象のショートカット (例: ctrl+r / shift+space) をスペース区切りで列挙
– 構文と修飾子の組み合わせ規則は公式 docs の Notes セクション "Shortcuts" を参照
Panels .panels 🪟
– 対象とする Panel COMP のパスを列挙 (省略可)
– 指定した Panel のいずれかが focus を持っているときだけイベントが発火する文脈フィルタとして機能
Left/Right Modifiers .lrmodifiers 🔀
– On にすると、左右の修飾キー (Left Shift / Right Shift / Left Ctrl / Right Ctrl 等) の状態が出力テーブルに追加される
– このパラメータの ON/OFF を切替えると出力テーブルの内容はリセットされる
Log Page 📝
コールバック設定 🐍
Callbacks DAT .callbacks 📜
– キーボードイベントごとに発火する Python コールバックを書いた DAT のパス
– 使用可能な関数シグネチャ (onKey / onShortcut / onPulse 等) の詳細は keyboardinDAT_Class を参照
Execute from .executeloc 📍
– スクリプトが実行される基点位置を決定するメニューパラメータ
– 後段の From Operator と組で機能し、相対パスの解決基点を切替える
From Operator .fromop 🎯
– Execute from が Specified Operator のときに基点となる OP 参照
– コールバック内の相対パス解決を、明示的にこのコンポーネント基準に固定したい場合に指定
ログ出力制御 🗂️
Clamp Output .clamp 🚧
– デフォルトでは DAT 出力は 100 メッセージに制限されるが、Clamp Output を Off にすると無制限化できる
– ロングセッションの履歴を全件残したい場合は Off、メモリを節約したい場合は On のまま Maximum Lines で行数調整
Maximum Lines .maxlines 📏
– 出力テーブルに保持する最大行数
– 上限を超えたら古いメッセージから順に削除される FIFO 動作
Clear Output .clear 🧹
– パルスで、ヘッダー以外の全行を削除する
– Python からは op('keyboardin1').par.clear.pulse() で同等のクリアが可能
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: パフォーマンス時のシーン切替ホットキー 🎬
Keyboard In DAT (Perform Window Only) → onKey → Switch TOP index 更新
ライブ上演中に手元のキーボードで 1 / 2 / 3 キーを押してシーンを切替える基本パターン。Perform Window Only を On にして編集画面ではトリガーしないようにし、Keys に対象キーのみ列挙して誤反応を防ぐ。
- Keyboard In DAT の
Activeを On、Perform Window Onlyを On に設定 Keysパラメータに1 2 3を入力して対象キーを限定- Callbacks DAT の
onKey内で押されたキーから index を計算し、Switch TOP のindexパラメータを更新 - Perform Mode に入り、各キーを押してシーンが切替わることを確認
Example 2: デバッグショートカットによる再ロード 🛠️
Keyboard In DAT (Shortcuts) → onShortcut → Python による再初期化
開発中に ctrl+r でアセット再ロード、ctrl+shift+r で完全リセットを発火させるショートカット。Shortcuts パラメータで修飾子付き組合せを宣言的に列挙でき、誤押下を抑えながら頻度の高いデバッグ動作を即時化できる。
Shortcutsにctrl+r ctrl+shift+rを入力- Callbacks DAT の
onShortcut内で発火したショートカット名で分岐し、各処理を呼び出す - 対象パネルにフォーカスを当てた状態でショートカットを押し、コールバックが呼ばれることを確認
Example 3: Panel focus 連動の文脈別キー処理 🪟
Keyboard In DAT (Panels=[/ui/panelA, /ui/panelB]) → onKey → 文脈別ハンドラ
1 つの Keyboard In DAT で複数のパネルを切替えながら異なる意味のキー操作を扱うパターン。Panels に対象 Container COMP のパスを列挙すると、列挙したパネルのいずれかが focus を持っている時のみイベントが発火するので、画面遷移ごとに別 DAT を作らずに済む。
Panelsパラメータに対象 Container COMP のパスを 1 つ以上指定onKey内でpanel引数 (または現在 focus を持つ Panel) を参照して分岐- 各パネルに focus を移してから同じキーを押し、コンテキストごとに異なる挙動になることを確認
関連オペレータ 🔗
類似機能OP 🔍
- Panel Execute DAT — Panel COMP 上の UI イベント (クリック / ドラッグ / value change 等) を Python コールバックで受ける DAT
- Execute DAT — 起動・フレーム・再生状態などのシステムイベントをトリガーする Python コールバック DAT
組み合わせ推奨OP 🔄
- Panel CHOP — 対象 Panel COMP の
focus/state等のチャンネルを取得し、Panels パラメータと組合せて文脈フィルタを強化 - Text DAT — Keyboard In DAT のコールバック本体を独立した Text DAT に切り出し、外部エディタで Python コードを管理
- Examine DAT — Keyboard In DAT が触る storage / globals の中身をリアルタイム可視化してコールバック挙動をデバッグ
前処理・後処理DAT 🎯
- 前処理: Text DAT、Table DAT
- 後処理: Examine DAT、Null DAT
Info DAT情報 📊
Keyboard In 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 になっているか確認Perform Window Onlyが On のままネットワーク編集画面で押していないか確認 (編集中は Off に戻すか、Perform Mode に切替)Panelsを指定している場合、対象パネルが実際に focus を持っているか Panel CHOP で確認
❌ Problem: 特定のキーだけ反応しない / 余計なキーまで反応する
✅ Solution:
Keysパラメータの綴りと区切りを確認 (スペース区切りで、許容名は Keyboard UI ページ準拠)Keysが空欄ならフィルタなしで全キーが対象になるため、必要キーのみを列挙して絞り込みLeft/Right Modifiersを切替えるとテーブル内容がリセットされる点に注意し、修飾キー扱いの整合を取り直す
❌ Problem: Shortcut (修飾子付き組合せ) が思った通りに動かない
✅ Solution:
Shortcutsの構文を公式 docs の Notes セクション “Shortcuts” で確認し、修飾子の表記揺れを排除- OS / 他アプリ側のグローバルショートカットと競合していないか確認 (アプリ単体で起動して再試行)
- Keyboard In CHOP で実際の修飾キー押下状態を可視化し、想定どおりに状態が変化しているか検証
❌ Problem: ログがすぐ消えてしまう / 履歴を全件残したい
✅ Solution:
Clamp Outputを Off にして 100 行制限を解除するMaximum Linesをユースケースに合わせて十分大きい値に引き上げる- 永続化が必要なら別途 Table DAT に蓄積して構造化ログとして保持
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

