
概要 📖 – フォルダ内のファイル / サブフォルダ一覧を行列テーブルとして列挙する
Folder DATは、指定したフォルダ配下のファイルおよびサブフォルダ一覧を行列テーブル形式で列挙する DATです。Root Folder パラメータで指定したパス配下を走査し、Folders / Names / Extensions でパターンによる絞り込みを行い、Columns Page の各列トグルで必要なメタ情報だけを列として持つテーブルを生成します。Refresh Pulse でディスクからの再走査を任意のタイミングで起動できます。
主な用途 🎯
- 指定したルートフォルダ配下のファイル / サブフォルダ一覧を行列テーブルとして取得
- 名前・ベース名・拡張子・サイズ・更新日時・絶対パス・相対パス等を列単位で出力
- Folders / Names / Extensions パターンマッチングで対象ファイルを抽出
- Image / Movie / Audio Extensions トグルで TouchDesigner が対応するメディア拡張子を一括包含
- Include Subfolders + Maximum Depth でサブフォルダを再帰的に走査しアセットライブラリを自動列挙
データフロー 🔄
ファイルシステム上のディレクトリ
↓Root Folderで指定したパス配下を走査
↓Type/Folders/Names/Extensions設定に応じてファイル・フォルダを抽出
↓
Columns Page トグルで指定した列 (Name / Size / Path / Date Modified 等) を持つ行列テーブルとして出力
↓
下流 DAT へチェイン (Select DAT / Script DAT / File In DAT 等)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Folder Page 📋
基本設定 ⚙️
Active .active 🟢
– オフのときは見出し行のみを持つ単一行テーブルを出力
– 非アクティブ時の dormant 用途、または Replicator COMP へ DAT を送る場合に活用
– デフォルト: オン
Asynchronous Update .async ⏳
– オンにするとフォルダ走査をメインスレッドから分離して非同期に実行
– 大規模ディレクトリ走査時に TouchDesigner のフレーム落ちを防ぐ
– 副作用: ディスク変更後の次フレームでテーブルが更新されない場合がある
ルートフォルダ指定 📁
Root Folder .rootfolder 📂
– 内容をテーブルに列挙する対象ディレクトリのファイルシステム上のパス
– 絶対パスまたは .toe ファイル位置を基点とした相対パスを指定可能
– 未保存プロジェクトで相対パスを使うと予期せぬ位置を走査するため絶対パス推奨
リフレッシュ制御 🔄
Refresh .refresh ♻️
– オンの間、指定したフォルダをファイルシステム上で監視
– ファイル追加・削除・更新を検知して自動的にテーブル内容を更新
– 常時監視が不要な場面ではオフにし Refresh Pulse で明示的に再走査するのが軽量
Refresh Pulse .refreshpulse ⚡
– パルスでフォルダ内容を 1 回だけ再走査
– Python からは op('folder1').par.refreshpulse.pulse() で起動可能
– 外部プロセスがファイルを追加・削除した直後のディレクトリ再列挙に最も便利
Name Format .nameformat 🏷️
ファイル名を Columns Page の Name 列に出力する際の表記形式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Include Extension | .extension |
拡張子を含むファイル名で出力 (例: scene01.mp4) |
| No Extension | .noextension |
拡張子を除いたベース名のみで出力 (例: scene01) |
Date Format .dateformat 📅
Columns Page の Date Created / Date Modified / Date Accessed 列で使用する日付表記
| 項目 | 内部名 | 説明 |
|---|---|---|
| Standard | .std |
標準的な日付表記形式 (OS の locale に従う人間可読の文字列) |
| Epoch | .epoch |
Epoch (UNIX 時間) を秒単位の数値で出力。差分計算や閾値比較に便利 |
Type .type 🗂️
テーブルに含める対象種別の選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Files | .files |
ファイルのみ列挙 |
| Folders | .folders |
フォルダのみ列挙 |
| Files and Folders | .filesandfolders |
ファイルとフォルダの両方を列挙 |
パターンマッチング (Folders / Names) 🔍
Folders .folders 📁
– フォルダパスに対するパターンマッチング文字列
– 区切り文字はスペースとカンマ。スペースを含む語は二重引用符で囲む
– 例: scene_* asset_* でこれらに一致するフォルダのみ通過
Names .names 📝
– ファイル / フォルダ名に対するパターンマッチング文字列
– 区切り文字はスペースとカンマ。スペースを含む語は二重引用符で囲む
– 空欄ですべての名前を含める
拡張子フィルタ 🎯
All Extensions .allextensions 🌐
– オンですべてのファイル拡張子を含める
– オフのときは下記 4 つのトグルおよび Extensions 文字列で対象を絞り込み
Image Extensions .imageextensions 🖼️
– オンで TouchDesigner が対応する画像拡張子をすべて包含
– 一括チェックでメディアブラウザ系の構築が高速化
Movie Extensions .movieextensions 🎬
– オンで TouchDesigner が対応する動画拡張子をすべて包含
– Movie File In TOP の File パラメータに渡すアセットを列挙する用途に最適
Audio Extensions .audioextensions 🎵
– オンで TouchDesigner が対応するオーディオ拡張子をすべて包含
– サウンドファイル用アセットライブラリの自動列挙に使用
Extensions .extensions 🔡
– 任意の拡張子をパターンで指定する文字列 (ピリオドは含めない)
– 例: *txt で .txt ファイルにマッチ (*.txt ではない)
– 複数指定はスペース区切り (例: *json *yaml)
サブフォルダ再帰走査 🪜
Include Subfolders .subfolders 🔁
– オンで Root Folder 配下のサブフォルダも再帰的に走査
– オフでは Root Folder 直下の 1 階層のみ列挙
Minimum Depth .mindepth 🔽
– 走査対象とするサブフォルダの最小階層数
– 0 で Root Folder 直下を含める、1 以上で浅い階層をスキップ
– 深い階層からのみ列挙したい場合に使用
Limit Depth .limitdepth 🚧
– オンで Maximum Depth を有効化し走査階層を制限
– オフではすべてのサブツリーを最深まで走査 (大規模ディレクトリで暴走の危険)
Maximum Depth .maxdepth 🔢
– Limit Depth がオンのときの走査最大階層数
– 巨大ディレクトリ走査時のパフォーマンス制御に使用
Columns Page 📊
出力列トグル 🗒️
各トグルをオンにすると出力テーブルに対応する列が追加されます (12 列):
- Name (namecol): フォルダまたはファイルの名前。ファイルの場合は拡張子を含む (例:
myfile.txt) - Base Name (basenamecol): ファイル名から拡張子を除いた形 (例:
myfile)。フォルダの場合は名前そのまま - Extension (extensioncol): ファイルの拡張子 (例:
txt)。フォルダの場合は空 - Type (typecol): OS から取得したファイル種別の文字列
- Size (sizecol): ファイルサイズ (バイト単位)。フォルダはサイズを報告しない
- Depth (depthcol): Root Folder からの相対階層数。Root Folder 直下のアイテムは
0 - Folder (foldercol): アイテムが格納されているフォルダのパス (ファイルの場合は所属フォルダのパス)
- Path (pathcol): フォルダまたはファイルの絶対フルパス
- Relative Path (relpathcol): Root Folder からの相対パス
- Date Created (datecreatedcol): 作成日時 (
Date Formatパラメータの設定に従う) - Date Modified (datemodifiedcol): 最終更新日時 (
Date Formatパラメータの設定に従う) - Date Accessed (dateaccessedcol): 最終アクセス日時 (
Date Formatパラメータの設定に従う)
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: アセット自動列挙でMovie File Inへ供給 🎬
メディアフォルダ → Folder DAT (Movie Extensions=On, Path 列=On) → Select DAT → Script DAT → Movie File In TOP
プロジェクト配下のメディアフォルダを Folder DAT で走査し、Movie Extensions トグルで動画ファイルだけに絞り込み、Columns Page の Path 列でフルパス文字列を取得して下流の Movie File In TOP の File パラメータへ動的に渡すアセット管理フロー。新しい動画ファイルをフォルダに追加して Refresh Pulse を発火するだけで TouchDesigner 側のメディアライブラリが即座に更新される。
- Folder DAT を配置し
Root Folderにメディアディレクトリの絶対パスを設定 TypeをFilesに、Movie Extensionsをオンに設定- Columns Page で
Name/Path/Date Modified列をオン - 下流の Select DAT で必要な行を抽出し、Script DAT で Movie File In TOP の
Fileに書き込み - 新規ファイル追加時は
op('folder1').par.refreshpulse.pulse()を呼び出して即時反映
Example 2: 再帰走査によるシーンフォルダ一覧の構築 🌳
プロジェクトルート → Folder DAT (Include Subfolders=On, Folders=scene_*) → Table DAT → UI リスト表示
プロジェクトルート配下のサブフォルダを Folder DAT の再帰モードで走査し、Folders パターンに scene_* を設定してシーン用フォルダだけを列挙してシーン選択 UI のデータソースに使う構成。Columns Page の Depth 列でツリー階層を可視化し、Limit Depth + Maximum Depth で走査範囲をプロジェクト規模に応じて調整する。
- Folder DAT の
Root Folderにプロジェクトルートを設定 TypeをFoldersに、Foldersパターンにscene_*を設定Include Subfoldersをオン、Limit Depthをオン、Maximum Depthを3に設定- Columns Page で
Name/Relative Path/Depth列をオン - 下流の Table DAT に渡し UI Components の Listbox にバインド
Example 3: 外部ツールが書き出すファイル群のホットリロード監視 ♻️
外部レンダラ出力フォルダ → Folder DAT (Refresh=On, Async=On) → DAT Execute DAT → Texture Reload
外部ツール (Blender / Houdini / 撮影機材等) が定期的に書き出すフォルダを Folder DAT の Refresh オンで継続監視し、Asynchronous Update でフレーム落ちを避けつつ、DAT Execute DAT で新規ファイル検出時にテクスチャ更新等のアクションを起動するホットリロード構成。
- Folder DAT の
Root Folderに外部ツールの出力先パスを設定 Refreshをオン、Asynchronous Updateをオンに設定- DAT Execute DAT を配置し
onTableChangeコールバックで新規ファイルを検出 - 検出時に Movie File In TOP / Texture 3D TOP の
Fileを新しいパスに更新
関連オペレータ 🔗
類似機能OP 🔍
- File In DAT — 単一ファイルの内容を読み込む (Folder DAT は一覧、File In DAT は中身)
組み合わせ推奨OP 🔄
- File In DAT — Folder DAT で列挙したパスを
Fileに渡して各ファイルの中身を読み込み - Select DAT — Folder DAT の出力テーブルから条件に合う行のみ抽出
- Script DAT — Folder DAT の各行を Python で処理し下流 OP のパラメータに反映
- DAT Execute DAT — Folder DAT 内容の変化 (ファイル追加・削除) をコールバックで検知
- Replicator COMP — Folder DAT の各行に対応するコンポーネントインスタンスを生成
- Movie File In TOP — Folder DAT の Path 列を
Fileに渡して動画を順次ロード
前処理・後処理DAT 🎯
Info CHOP情報 📊
Folder DAT は Info CHOP による詳細情報取得に対応しています。
DAT 固有情報 📋
num_rows: DAT の行数num_cols: DAT の列数type: DAT の型 (table / text)is_table: テーブル形式の場合 1、テキスト形式の場合 0
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数cooked_this_frame: このフレームでクックしたら1
DAT 共通情報 📊
num_rows: Folder DAT のテーブル行数 (列挙されたファイル / フォルダ数 + 見出し行)num_cols: Folder DAT のテーブル列数 (Columns Page でオンにした列の数)
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: ファイル一覧が出ない / テーブルが空
✅ Solution:
Activeがオンになっているか確認 (オフの場合は見出し行のみ出力)Root Folderのパスが正しいか確認 (相対パスは.toe保存後に解決される)Type設定がFiles/Folders/Files and Foldersの意図通りか確認All Extensionsがオフのときは Image / Movie / Audio /Extensionsのいずれかが対象拡張子を含むか確認
❌ Problem: パターンマッチが期待通りに効かない
✅ Solution:
Folders/Names/Extensionsの区切り文字はスペースまたはカンマ (タブ・改行は不可)- スペースを含む語は二重引用符で囲む (例:
"my project") Extensionsは拡張子にピリオドを含めない (*.txtではなく*txt)- 公式の Pattern Matching ドキュメントで構文を再確認
❌ Problem: 再帰走査が深すぎてパフォーマンスが低下する
✅ Solution:
Limit DepthをオンにしMaximum Depthを実用範囲 (例:3) に設定Asynchronous Updateをオンにしてメインスレッドのフレーム落ちを回避Refreshを常時オンにせずRefresh Pulseによる明示再走査に切り替えFoldersパターンで走査対象サブフォルダを早期に絞り込む
❌ Problem: ファイルを追加・削除したのにテーブルが更新されない
✅ Solution:
Refreshがオンになっているか確認、またはスクリプトからop('folder1').par.refreshpulse.pulse()を呼ぶAsynchronous Updateオン時は次フレーム以降のテーブル更新を待つ必要がある- 外部ツールがファイルをロック中の場合 OS が変更通知を発行しないことがある
- ネットワークドライブ / クラウドストレージは変更検知が遅延・欠落する場合があるため
Refresh Pulse併用が確実
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

