Skip to content
  1. OPERATORS
  2. CONTROLLERS

Any

v1.0.0new

any is a dynamic host operator: point it at a Python module and it rebuilds its custom parameters, DATs, lifecycle callbacks, and optional agent tools around that module. Use it when you want a reusable LOP surface for a small custom behavior without creating a dedicated packaged operator.

The operator copies a module from a file or DAT into its internal module DAT, validates it, then loads the module into the COMP. The loaded module can add custom parameter pages, create table/text/input DATs, promote callbacks, preserve matching parameter values across module swaps, and optionally publish tools for an agent workflow.

The Module Library section can scan included modules plus user, project, or custom folders. Included starter modules currently cover text editing, state inspection, and preset morphing.

  1. On the Any page, set Source to File or DAT.
  2. For a file module, choose Module File and optionally enable Hot Reload while editing. For a DAT module, choose Module DAT.
  3. Pulse Reload after changing a cached file or DAT source, or use Scan Modules, Module, and Load Module to load from the module library.
  4. Inspect Moduleinfo and the operator’s custom pages/DATs after the module loads.
  5. If the module exposes tools, choose Tool Preset to turn them off, expose all of them, or use custom tool toggles.
  • Inputs: No fixed connectors. A loaded module can create its own input DATs.
  • Outputs: No fixed connectors. A loaded module can create table or text DATs inside the COMP for downstream use.

any exposes GetTool() when the loaded module declares tools. The user-facing capability depends on the module. With the included text editor module, agents can read DAT/file content, list TD COMP children, replace exact strings, insert text, create DATs/files, and undo the last edit, subject to the Tool Preset and any enable toggles.

  • agent: Lets an agent call the tools supplied by the loaded module.
  • tool_dat: Useful when the module’s tool surface reads or writes DAT content.
  • tool_op_context: Pairs well with modules that inspect or edit parts of the TouchDesigner network.
  • Parameters, pages, tools, and DATs are dynamic. Swapping modules can change the operator surface immediately.
  • Tools are available only after a module that declares tools is loaded.
  • Hot Reload applies to file modules only. DAT sources are copied into the internal module DAT when loaded.
  • Module Library scanning depends on the selected Library Source. User library discovery falls back to the project .lops/modules folder when the shared Python venv path is not available.
  • Module validation errors and syntax errors are reported in Moduleinfo and the operator log; the module must at least declare a valid name.
Status (Status) op('any').par.Status Str
Default:
"" (Empty String)
Module Header
Source (Modulesource) op('any').par.Modulesource Menu
Default:
dat
Options:
file, dat
Module File (Modulefile) op('any').par.Modulefile File
Default:
"" (Empty String)
Module DAT (Moduledat) op('any').par.Moduledat DAT
Default:
./starter_module_text_editor__py
Hot Reload (Hotreload) op('any').par.Hotreload Toggle
Default:
False
Reload (Reload) op('any').par.Reload Pulse
Default:
False
Moduleinfo (Moduleinfo) op('any').par.Moduleinfo Str
Default:
"" (Empty String)
Module Library Header
Library Source (Librarytier) op('any').par.Librarytier Menu
Default:
user
Options:
user, project, custom
Custom Library (Customlibrary) op('any').par.Customlibrary Folder
Default:
"" (Empty String)
Scan Modules (Scanmodules) op('any').par.Scanmodules Pulse
Default:
False
Module (Modulesmenu) op('any').par.Modulesmenu StrMenu
Default:
text_editor
Menu Options:
  • (none) ((none))
  • preset_morpher (included) (preset_morpher)
  • state_lens (included) (state_lens)
  • text_editor (included) (text_editor)
Load Module (Loadfromlibrary) op('any').par.Loadfromlibrary Pulse
Default:
False
Modulescount (Modulescount) op('any').par.Modulescount Str
Default:
"" (Empty String)
Open Library Folder (Openlibrary) op('any').par.Openlibrary Pulse
Default:
False
Tools Header
Tool Preset (Toolpreset) op('any').par.Toolpreset Menu
Default:
full
Options:
off, custom, full
Target (op path or file path) (Target) op('any').par.Target Str
Default:
"" (Empty String)
Target Mode (Targetmode) op('any').par.Targetmode Menu
Default:
dat
Options:
dat, file
Root Directory (file sandbox) (Rootdir) op('any').par.Rootdir Folder
Default:
"" (Empty String)
Root COMP (DAT sandbox) (Rootcomp) op('any').par.Rootcomp COMP
Default:
"" (Empty String)
Reload Target (Reloadtarget) op('any').par.Reloadtarget Pulse
Default:
False
Require Read First (Autoread) op('any').par.Autoread Toggle
Default:
True
Enable Read (Enableread) op('any').par.Enableread Toggle
Default:
True
Enable List (ls) (Enablels) op('any').par.Enablels Toggle
Default:
True
Enable Str Replace (Enablestrreplace) op('any').par.Enablestrreplace Toggle
Default:
True
Enable Insert (Enableinsert) op('any').par.Enableinsert Toggle
Default:
True
Enable Create (Enablecreate) op('any').par.Enablecreate Toggle
Default:
True
Enable Undo (Enableundo) op('any').par.Enableundo Toggle
Default:
True
v1.0.02026-05-02
  • added three-tier module library (user/project/custom) with scan, menu, and load - added bundled starter module discovery via tagged DATs - added parameter ordering for Any page layout - added extensionParExec callback target self-repair - added module DAT tag-based cleanup on module swap - updated category to Controllers
  • Host operator that loads a Python module and becomes whatever that module defines - Function pattern and class pattern (Logic) module support - Diff-based parameter sync from module declarations - DAT creation from module dats declaration (table, text, input) - Tool discovery with GetTool, per-tool toggles, preset menu (off/custom/full) - Module-declared tool gating vs host-generated toggles - Promoted method binding from module to TD extension system - Hot reload (file sync) and manual reload for module source - Module swap with parameter state preservation across reloads - Ergonomic surface for module authors (ext.log, ext.par, ext.table, ext.run_async, ext.api_call) - Teaching errors: syntax errors, validation, and load failures show the fix not the stack - Dynamic __getattr__ routing for onPar callbacks and promoted methods - Category: core, release level: prod
  • Initial any structure
  • Initial commit