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

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

Keyboard In DAT がキーボードイベントを Keys / Shortcuts / Panels でフィルタリングして Python コールバックを発火させる流れを示す図

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

概要 📖 – キー入力で処理を発火する

Keyboard In DATは、キーボード入力イベントを捕捉し、Python コールバックで任意の処理を発火させるインタラクション DATです。Keys で対象キーをホワイトリスト化し、Shortcutsctrl+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)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 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: パフォーマンス時のシーン切替ホットキー 🎬

Keyboard In DAT (Perform Window Only) → onKey → Switch TOP index 更新

ライブ上演中に手元のキーボードで 1 / 2 / 3 キーを押してシーンを切替える基本パターン。Perform Window Only を On にして編集画面ではトリガーしないようにし、Keys に対象キーのみ列挙して誤反応を防ぐ。

  1. Keyboard In DAT の Active を On、Perform Window Only を On に設定
  2. Keys パラメータに 1 2 3 を入力して対象キーを限定
  3. Callbacks DAT の onKey 内で押されたキーから index を計算し、Switch TOP の index パラメータを更新
  4. Perform Mode に入り、各キーを押してシーンが切替わることを確認

Example 2: デバッグショートカットによる再ロード 🛠️

Keyboard In DAT (Shortcuts) → onShortcut → Python による再初期化

開発中に ctrl+r でアセット再ロード、ctrl+shift+r で完全リセットを発火させるショートカット。Shortcuts パラメータで修飾子付き組合せを宣言的に列挙でき、誤押下を抑えながら頻度の高いデバッグ動作を即時化できる。

  1. Shortcutsctrl+r ctrl+shift+r を入力
  2. Callbacks DAT の onShortcut 内で発火したショートカット名で分岐し、各処理を呼び出す
  3. 対象パネルにフォーカスを当てた状態でショートカットを押し、コールバックが呼ばれることを確認

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 🎯


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 に蓄積して構造化ログとして保持

参考資料 📚

その他 🔗

公式リソース 📖

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