Skip to content

Generated by scripts/gen-tool-docs.ts; edit the registry instead of this page. Regenerate with npm run docs:gen (runs automatically before docs:build).

Tools reference

tdmcp exposes 497 tools organized into three layers, foundation primitives, library/packaging, CLI automation, AI session memory, and the Obsidian vault integration. Build with the highest-level tool that fits and drop to a lower layer for fine control. Tools tagged read-only only inspect; mutates changes your project; destructive can delete, overwrite, run code, or write package assets.

This page is generated from the running tool registry, so it always matches the installed version.

Foundation primitives

Low-level visual building blocks shared by higher-level importers and effects, exposed directly when you need precise control over the underlying mapping or shader network.

apply_glsl_top_mapping mutates

Build a self-contained GLSL TOP network from a pre-translated mapping (fragment + uniforms + channels + controls). Foundation primitive used by Shadertoy and ISF importers; also reachable directly for power users with a hand-translated fragment.

ParameterTypeRequiredDescription
mappingobjectyesPre-built mapping (fragment + uniforms + channels + controls + provenance).
parent_pathstringnoParent COMP path where the system container is created. (default: /project1)
namestringnoName of the container COMP created under parent_path. (default: glsl_mapping)
resolutionobject[]noGLSL TOP output resolution [width, height]. (default: 1280,720)
pixel_formatrgba8 | rgba16 | rgba32noGLSL TOP pixel format. (default: rgba8)
expose_controlsbooleannoIf false, skip the control panel pass. (default: true)
capture_previewbooleannoCapture a preview image of the output TOP after the build. (default: true)

Artist tools (Layer 1)

Describe the result you want; each tool builds and wires a whole network, auto-arranges it into a readable left→right layout, and — for the playable systems — exposes a control panel you can tweak, animate, preset or map to a controller.

create_feedback_network mutates

Build a feedback-based visual system: a seed feeds a loop that is transformed (blur/displace/etc.) and fed back each frame. Creates a new baseCOMP under parent_path holding the seed, a Feedback TOP, a 'maximum' Composite, the transform chain, a Level decay node, an optional GLSL colorize pass, and a Null output (the Feedback TOP samples the Level node to close the loop). Great for evolving, hypnotic visuals. Exposes a live 'Feedback' decay knob. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image. Use this for a general feedback look with a chosen seed type and an ordered chain of effects; for the specific infinite-zoom/rotate spiral (with Zoom/Rotate/HueShift/Decay knobs) use create_feedback_tunnel instead.

ParameterTypeRequiredDescription
seed_typenoise | shape | image | video | webcam | glslnoWhat feeds the loop each frame: 'noise' (monochrome Noise TOP), 'shape' (Circle TOP), 'image'/'video' (Movie File In TOP), 'webcam' (Video Device In TOP — may prompt for camera permission), or 'glsl' (a generative shader). Default 'noise'. (default: noise)
transformationsblur | displace | edge | level | hsv_adjust | transform | …[]noTOP effects applied in order inside the loop each frame (blur, displace, edge, level, hsv_adjust, transform, mirror, tile, luma_blur). Default ['blur','displace','level']. (default: blur,displace,level)
feedback_gainnumbernoLoop decay multiplier (0–1) applied via a Level TOP's brightness1: how much of the fed-back frame survives each cycle. Higher = longer-lived, more saturated trails; default 0.95. (default: 0.95)
colorsstring[]noUp to two hex colors ('#rrggbb') used to colorize the otherwise-grayscale output via a final GLSL gradient (one color = black→color, two = color0→color1). Omit to leave it grayscale.
expose_controlsbooleannoWhen true (default), expose a live 'Feedback' knob on the system container, bound to the loop's decay. (default: true)
parent_pathstringnoParent network where the feedback container is created (default '/project1'). (default: /project1)

create_generative_art mutates

Create an evolving generative visual. Creates a new baseCOMP under parent_path holding the generator (a recipe network, a GLSL TOP + Text DAT, or a noise chain) ending in a Null output. reaction_diffusion/noise_landscape use validated recipes; strange_attractor, voronoi, and fractal render real GLSL; custom_glsl uses your shader; the rest fall back to animated noise (with a warning). Exposes a live 'Speed' knob (except for recipe-built techniques). Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, the technique, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
techniquenoise_landscape | reaction_diffusion | strange_attractor | l_system | cellular_automata | flow_field | …yesGenerative method. reaction_diffusion/noise_landscape build validated recipes; strange_attractor/voronoi/fractal render faithful inline GLSL; custom_glsl uses your shader (custom_glsl_code); l_system/cellular_automata/flow_field currently fall back to an animated-noise approximation (with a warning).
color_palettestringnoFree-text palette hint recorded in the result; best-effort, not all techniques honor it.
evolution_speednumbernoAnimation speed multiplier on the time uniform driving the look (1 = nominal, higher = faster evolution). Exposed as the 'Speed' knob. (default: 1)
custom_glsl_codestringnoFragment shader source used only when technique='custom_glsl'; if omitted, a default plasma shader is used (with a warning).
expose_controlsbooleannoWhen true (default), expose a live 'Speed' knob (evolution speed) on the system container. (default: true)
parent_pathstringnoParent network where the generative container is created (default '/project1'). (default: /project1)

create_audio_reactive mutates

Build an audio analysis chain (spectrum + level + optional beat) and a spectrum visual driven by it. Creates a new baseCOMP under parent_path holding the audio source, an Audio Spectrum CHOP, an Analyze level, an optional Beat CHOP, a CHOP-to-TOP texture with a Sensitivity gain, the GLSL visual, and a Null output. Each visual_style renders the spectrum its own way: glsl=horizontal bars, geometric=radial bars, particle=dot field, feedback=ring tunnel, instancing=LED grid. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image. This is the only audio tool that produces a built-in visual: use extract_audio_features for level/bass/mid/treble channels or create_spectrum for per-band channels (no visual), and bind_audio_reactive to wire those channels onto an existing COMP's knobs.

ParameterTypeRequiredDescription
audio_sourcemicrophone | file | device_in | existing_chopnoWhere audio comes from: 'microphone'/'device_in' create an Audio Device In CHOP, 'file' an Audio File In CHOP (set audio_file_path), 'existing_chop' reuses an audio CHOP you already have (set existing_chop_path). (default: microphone)
audio_file_pathstringnoPath to an audio file to play; used only when audio_source='file'.
existing_chop_pathstringnoPath of an existing audio CHOP to analyze; used only when audio_source='existing_chop'.
visual_stylegeometric | particle | feedback | glsl | instancingyesHow the spectrum is rendered: glsl=horizontal bars, geometric=radial bars, particle=dot field, feedback=ring tunnel, instancing=LED grid.
frequency_bandsintegernoSpectrum resolution: sets the Audio Spectrum CHOP output length (TouchDesigner clamps it to 128–4096 bins). Higher = finer spectrum. (default: 8)
beat_detectionbooleannoWhen true (default), add a Beat CHOP driven by the audio source for tempo/beat signals. (default: true)
expose_controlsbooleannoWhen true (default), expose a live 'Sensitivity' knob controlling how strongly the audio drives the visual. (default: true)
parent_pathstringnoParent network where the audio-reactive container is created (default '/project1'). (default: /project1)
transient_gatebooleannoWhen true, add a transient/onset channel to a new modulation Null CHOP (mod1) for binding to parameters. (default: false)
transient_thresholdnumbernoTransient threshold (0–1); used only when transient_gate=true. (default: 0.3)
transient_hold_msnumbernoTransient hold time in ms before decay; used only when transient_gate=true. (default: 120)
sidechain_duckbooleannoWhen true, add an inverted duck-envelope channel to the modulation Null CHOP (mod1). (default: false)
duck_depthnumbernoHow deeply the duck pulls toward 0 at peak level (0–1). (default: 0.7)
duck_release_msnumbernoRelease time of the duck envelope in ms. (default: 350)

create_particle_system mutates

Build a CPU particle system: an emitter SOP feeds a Particle SOP inside a Geometry COMP, rendered with a camera + light. Creates a new baseCOMP under parent_path holding the Geometry COMP (emitter + particle SOP), a material, Camera, Light, Render TOP, and a Null output. Forces and render style are scaffolded for further tuning. Exposes live Drag / Turbulence / Gravity / Lifetime knobs. This is the simplest CPU emitter, born from a real SOP shape; pick a sibling instead when you need scale or specific motion: create_gpu_particle_field for much higher counts (GPU-simulated noise/curl/gravity drift, up to ~262k), create_particle_flock for boids/flocking behaviour, image_to_particles to reconstruct an image/video as points, create_pop_particle_system for TouchDesigner's native POP particle network. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings (e.g. approximated forces or fallback render styles), and an inline preview image.

ParameterTypeRequiredDescription
emitter_shapepoint | line | circle | sphere | mesh | imagenoSource SOP particles are born from: point (Add SOP), line, circle, sphere, mesh (Box), or image (Grid). Default 'sphere' — its varied normals spray a full radial cloud; 'point' has no normals and stays a thin turbulence-driven stream. (default: sphere)
particle_countintegernoTarget number of live particles at steady state; sets the Particle SOP birth rate (birth ≈ count / lifetime). Default 10000. (default: 10000)
forcesgravity | noise | attract | repel | vortex | turbulence | …[]noForces applied to the sim, mapped to native Particle SOP params (gravity→external -Y, noise/turbulence→turbulence, drag→drag). attract/repel/vortex have no native equivalent and are approximated with turbulence (a warning is returned). Default ['noise','gravity']. (default: noise,gravity)
render_stylepoints | sprites | lines | trails | instanced_geonoHow particles are drawn. 'sprites' uses a Point Sprite MAT, 'points' a Constant MAT; 'lines'/'trails'/'instanced_geo' currently fall back to point/sprite rendering (a warning is returned). Default 'sprites'. (default: sprites)
lifetimenumbernoParticle life span in seconds before it dies and is reborn. Default 3. (default: 3)
expose_controlsbooleannoWhen true (default), expose live Drag / Turbulence / Gravity / Lifetime knobs on the system container. (default: true)
parent_pathstringnoParent network where the particle-system container is created (default '/project1'). (default: /project1)

create_data_visualization mutates

Build a data-driven visualization: a data source feeds a CHOP that drives a chart TOP. Creates a new baseCOMP under parent_path holding a 'data' source operator (seeded with placeholder values), a DAT-to-CHOP / CHOP-to-TOP conversion, a Scale level, the chart visual, and a Null output. Wire your real data into the created 'data' node. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings (including a reminder to wire real data), and an inline preview image.

ParameterTypeRequiredDescription
data_sourcetable | file | chopnoKind of source operator to create: 'table' (Table DAT, pre-seeded with sample values), 'file' (File In DAT), or 'chop' (Constant CHOP). Wire your real data into the created 'data' node afterward. (default: table)
chart_stylebars | graph | pointsnoVisual style. 'bars' renders a GLSL bar chart; 'graph' and 'points' currently render the data as a texture strip and add a warning that richer plotting needs customization. (default: bars)
expose_controlsbooleannoWhen true (default), expose a live 'Scale' knob that amplifies the data values feeding the chart. (default: true)
parent_pathstringnoParent network where the visualization container is created (default '/project1'). (default: /project1)

apply_post_processing mutates

Chain post-processing effects (bloom, glitch, rgb_split, vignette, etc.) onto an existing TOP, applied in the order given. Creates a new baseCOMP under parent_path that pulls the source in via a Select TOP, wires each effect (built-in TOPs or inline-GLSL passes) in series, and ends in a Null TOP. Returns a summary plus a JSON block with the container path, all created node paths, the output Null path, any node errors, warnings, and an inline preview image. Use create_color_grade or create_glitch instead when you want a single dedicated effect with its own exposed controls.

ParameterTypeRequiredDescription
source_pathstringyesPath of the existing TOP to post-process (e.g. '/project1/render1'); pulled in via a Select TOP so it may live in another container.
effectsbloom | chromatic_aberration | film_grain | vignette | color_grade | sharpen | …[]yesEffects to apply, chained in the order listed. Each is one of: bloom, chromatic_aberration, film_grain, vignette, color_grade, sharpen, blur, edge_detect, invert, threshold, posterize, glitch, rgb_split, scanlines, halftone, dither, crt, mirror, vhs, npr_oil, npr_pencil, npr_watercolor. The 3D-aware modes ssao / ssr / dof / motion_blur are recognized but redirect to the dedicated post_passes_3d tool (they need depth/normal/velocity AOVs that this chain doesn't have).
parent_pathstringnoParent network where the effect-chain container is created (default '/project1'). (default: /project1)

setup_output mutates

Route a finished TOP to an output destination: a display window, NDI stream, Syphon/Spout, a recording, or Touch Out. Creates the matching output node ('<output_type>out') under parent_path; for a window it points the Window COMP's winop at the source and sets its size, and for the other types it bridges the source in through a Select TOP (TD wires can't cross COMP boundaries). Typically the LAST step after building a visual — feed it the output Null from a create* tool or a create_layer_mixer. Returns the created output node path, the output type, the source path, and any non-fatal warnings (e.g. if wiring or window config failed).

ParameterTypeRequiredDescription
source_pathstringyesPath of the final TOP to output.
output_typewindow | ndi | syphon_spout | record | touch_outnoDestination: 'window' (a Window COMP display), 'ndi' (NDI Out TOP network stream), 'syphon_spout' (Syphon/Spout Out TOP for other apps), 'record' (Movie File Out TOP to disk), or 'touch_out' (Touch Out TOP to another TD instance). (default: window)
resolution720p | 1080p | 4KnoWindow size for output_type='window' (720p=1280×720, 1080p=1920×1080, 4K=3840×2160); ignored by the other output types. (default: 1080p)
record_formatmp4 | mov | image_sequencenoFile format for output_type='record' (sets the Movie File Out TOP's type); ignored otherwise.
parent_pathstringnoParent COMP path the output node (and any bridging Select TOP) is created inside. (default: /project1)

get_preview read-only

Capture a TOP node's current output as an inline PNG image so you can see what was created — read-only, it creates and modifies nothing. Returns the image (scaled to width×height) plus a caption with the node path and actual dimensions; only TOPs can be previewed (CHOP/SOP/etc. have no image). For a much cheaper check (is it alive / roughly what colour?) pass sample_grid=N to get an N×N grid of RGBA samples + per-channel stats as JSON instead of an image.

ParameterTypeRequiredDescription
node_pathstringnoPath of the TOP node to capture. Required unless collecting a deferred job by job_id.
widthintegernoWidth of the captured preview image in pixels (1–4096; default 640). (default: 640)
heightintegernoHeight of the captured preview image in pixels (1–4096; default 360). (default: 360)
sample_gridintegernoWhen set (2–16), return a lightweight N×N grid of RGBA samples + per-channel min/max/mean as JSON instead of an image — 10–50× cheaper. Use this when you only need to know whether the output is alive / roughly what colour it is, not its spatial detail.
pre_pulsesobject[]noParameters to pulse in the SAME frame immediately before capturing — e.g. reset a feedback loop or fire a timer so a transient is actually visible. All targets are validated before any fires (all-or-nothing).
delay_framesintegernoDefer the capture by N frames (to catch an event that appears a few frames after a pulse). Returns a job_id + wait_ms instead of the image; call get_preview again with that job_id to collect the result.
job_idstringnoCollect a previously deferred capture (from a delay_frames call) by its job_id.

plan_visual read-only

Turn a natural-language description of a visual you WANT into a build plan (which tool/recipe and nodes) — a dry run that creates nothing. Note: this does NOT inspect the current TouchDesigner project; to read existing nodes use get_td_nodes / get_td_topology / find_td_nodes.

ParameterTypeRequiredDescription
descriptionstringyesNatural-language description of the visual you want.

create_visual_system mutates

Create a complete visual system from a natural-language description. Classifies intent (audio-reactive, particle, feedback, reaction-diffusion, landscape, generative) and delegates to the matching Layer-1 builder (or a tag-matched recipe), creating a self-contained COMP under parent_path, then verifies and previews it. Use plan_visual instead for a dry run that reports which tool/recipe would be chosen without building anything. Returns a note on how the description was interpreted plus the underlying builder's result (created nodes, exposed controls, and a preview image).

ParameterTypeRequiredDescription
descriptionstringyesNatural-language description of the visual system.
parent_pathstringnoParent COMP path the generated visual-system container is created inside. (default: /project1)
resolution720p | 1080p | 4K | customnoAdvisory target resolution. Recorded in the build note; the sub-builders use their own internal sizes and do not enforce this per-node. (default: 1080p)
target_fpsnumbernoAdvisory target frame rate (informational only — TD's real cook rate is a project-level setting, not set here). (default: 60)

extract_audio_features mutates

Build an audio-analysis chain that exposes ready-to-bind reactive channels — overall level plus bass/mid/treble band energies — on a Null CHOP. Unlike create_audio_reactive (which renders a spectrum visual), this produces the raw signals so you can drive ANY parameter: bind a node parameter to op('…/audio_features/features')['bass'] and it pulses with the music. A Sensitivity knob scales all channels. Source can be the live device (mic/line — may prompt for macOS permission), an audio file, a synthetic oscillator (for testing), or an existing CHOP. Use create_spectrum for N fine per-band channels instead of these four coarse bands, and pass this Null as the source_chop to bind_audio_reactive to make a whole COMP react.

ParameterTypeRequiredDescription
sourcedevice | file | oscillator | existing_chopnoAudio source. 'device' = live microphone/line in (the real-world default; creating it may pop a one-time macOS microphone-permission dialog — click Allow). 'file' = an audio file. 'oscillator' = a synthetic tone, handy for testing without any device permission. 'existing_chop' = reuse a CHOP you already have. (default: device)
audio_file_pathstringnoAudio file path (source='file').
existing_chop_pathstringnoPath of an existing audio CHOP to analyze (source='existing_chop').
bass_hznumbernoLow-pass cutoff for the bass band. (default: 200)
mid_hznumbernoBand-pass centre for the mid band. (default: 1500)
treble_hznumbernoHigh-pass cutoff for the treble band. (default: 4000)
expose_controlsbooleannoExpose a live 'Sensitivity' knob (a gain over every feature channel). (default: true)
parent_pathstringnoParent COMP path the self-contained 'audio_features' container is created inside. (default: /project1)

create_motion_reactive mutates

Build a video-analysis chain that exposes ready-to-bind reactive channels — overall brightness plus frame-to-frame motion energy — on a Null CHOP. The camera counterpart to extract_audio_features: bind any parameter to op('…/motion_reactive/features')['motion'] and it responds to movement in front of the camera, or ['brightness'] to ambient light. A Sensitivity knob scales both. Creates a new baseCOMP under parent_path holding the source, a downsized monochrome analysis chain, and a 'features' Null CHOP output. Source can be the live camera (may prompt for macOS permission), a movie file, an animated synthetic pattern (for testing without a camera), or an existing TOP. Optical flow is unavailable on macOS, so direction isn't exposed. Returns a summary plus a JSON block with the container path, created node paths, the features Null path, the channel names, exposed controls, any node errors, and warnings (no preview image — the output is a CHOP, not a TOP).

ParameterTypeRequiredDescription
sourcecamera | file | synthetic | existing_topnoVideo source. 'camera' = live webcam/capture device (the real-world default; creating it may pop a one-time macOS camera-permission dialog — click Allow). 'file' = a movie file. 'synthetic' = an animated noise pattern, handy for testing without any device permission. 'existing_top' = analyze a TOP you already have. (default: camera)
movie_file_pathstringnoPath to a movie file to play as the source; used only when source='file'.
existing_top_pathstringnoPath of an existing TOP to analyze; used only when source='existing_top'.
analysis_resolutionintegernoThe video is downsized to this square resolution before analysis — small keeps it cheap (the reactive values barely change with size). (default: 160)
expose_controlsbooleannoWhen true (default), expose a live 'Sensitivity' knob (a gain over every feature channel). (default: true)
parent_pathstringnoParent network where the motion-reactive container is created (default '/project1'). (default: /project1)

create_interactive_projection_mapping mutates

Build a synthetic-safe interactive projection mapping rig for a USB webcam plus projector: camera/synthetic/existing TOP input, frame-difference motion field, placeholder blob/post-it mask, cyan dot and magenta card visual TOPs, manual Corner Pin projection mapping, debug switch, live controls, and an out1 Null TOP. Defaults to source='camera' for installations, but source='synthetic' previews without camera permission. Returns output/debug paths and explicit warnings for camera, blob tracking, and physical calibration states.

ParameterTypeRequiredDescription
namestringnoName for the generated interactive projection mapping Base COMP. (default: interactive_projection_mapping)
parent_pathstringnoParent COMP where the interactive projection mapping system is created. (default: /project1)
sourcecamera | synthetic | existing_topnoInput source: a USB camera, a self-animated synthetic TOP, or an existing TOP pulled through a Select TOP. (default: camera)
existing_top_pathstringnoAbsolute TOP path required when source='existing_top'.
camera_indexintegernoUSB/webcam device index used when source='camera'. (default: 0)
fallback_to_syntheticbooleannoIf camera creation fails, build a synthetic source so the rig remains previewable. (default: true)
interaction_modehybrid | motion_only | blob_markersnoInteraction branch to prioritize. The first slice always keeps motion available. (default: hybrid)
analysis_resolutionintegernoSquare working resolution for cheap motion/blob analysis. (default: 256)
output_widthintegernoProjection output width in pixels. (default: 1280)
output_heightintegernoProjection output height in pixels. (default: 720)
particle_countintegernoTarget count for the cyan dot field. This MVP uses it as visual density metadata. (default: 64)
card_countintegernoTarget count for magenta card blocks. This MVP uses it as visual density metadata. (default: 5)
motion_sensitivitynumbernoGain over the frame-difference motion field. (default: 4)
repel_radiusnumbernoNormalized radius metadata for hand/motion repulsion. (default: 0.18)
trail_decaynumbernoFeedback persistence for visual trails. (default: 0.88)
blob_thresholdnumbernoThreshold used by the placeholder blob/post-it mask branch. (default: 0.55)
max_blobsintegernoMaximum blob slots reserved for the later marker-tracking branch. (default: 8)
dot_colorstringnoCyan dot color as #rrggbb. (default: #8ff4f2)
card_colorstringnoMagenta card color as #rrggbb. (default: #ff2f9a)
background_colorstringnoDark projected background color as #rrggbb. (default: #05100e)
projection_brightnessnumbernoFinal Level TOP brightness before out1. (default: 0.85)
debug_viewfinal | camera | analysis | motion | blobs | calibration | …noWhich branch the debug switch shows initially. (default: final)
expose_controlsbooleannoExpose live controls for calibration/debug/performance tuning. (default: true)

create_kinect_wall_harp mutates

Build a synthetic-safe Kinect v2 / FreenectTD projected wall harp in an isolated Base COMP. The network can create a FreenectTOP depth path when explicitly enabled, listen to an external OSC Kinect bridge with source='osc_kinect', or build a synthetic fallback. It extracts left/right hand centroids, divides the projection into configurable musical zones, triggers short electronic plucks on zone entry, renders a denser vibrating curtain of projected strings, and exposes depth/mask/hands/audio plus bridge-status diagnostics. If FreenectTD or Kinect hardware is unavailable, the tool returns warnings instead of throwing, so the visual/audio/trigger chain can still be tested offline.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path where the isolated kinect_wall_harp Base COMP is created. (default: /project1)
namestringnoName for the generated Base COMP under parent_path. (default: kinect_wall_harp)
sourcefreenect | synthetic | osc_kinectnoInput source. 'freenect' tries the FreenectTD FreenectTOP Kinect v2 path; 'synthetic' builds a device-free wall-touch simulator; 'osc_kinect' listens for normalized Kinect hand points from an external OSC bridge. (default: freenect)
osc_portintegernoUDP port for OSC Kinect hand input when source='osc_kinect'. (default: 7400)
bridge_status_jsonstringnoJSON status path written by scripts/kinect-wall-harp-bridge.mjs --status-json and read by the generated bridge_status DAT. (default: _workspace/kinect-wall-harp/bridge-status.json)
fallback_to_syntheticbooleannoWhen true, missing FreenectTD/Kinect hardware still creates a playable synthetic fallback with warnings. (default: true)
deactivate_existing_freenectbooleannoDeactivate existing FreenectTOP nodes under parent_path before starting the new Kinect source. Kinect v2 is a single-device path, so this avoids multiple active FreenectTD nodes competing for the same sensor. (default: true)
activate_freenectbooleannoSafety gate for actually creating/activating FreenectTOP. Default false because FreenectTD Kinect v2 initialization is unstable on the validated macOS setup; leave false for crash-safe synthetic fallback. (default: false)
output_widthintegernoWidth for generated debug and projected output TOPs. (default: 1280)
output_heightintegernoHeight for generated debug and projected output TOPs. (default: 720)
wall_depth_centernumbernoNormalized depth value representing the calibrated wall/touch plane. (default: 0.5)
touch_thicknessnumbernoAccepted depth band around wall_depth_center. (default: 0.08)
depth_polaritynear | farnoWhich side of the wall-depth band should count as touch candidates. (default: near)
sensitivitynumbernoBlob threshold / cleanup aggressiveness for the wall-touch mask. (default: 0.65)
smoothingnumbernoHand centroid smoothing amount used by the tracking Script CHOP. (default: 0.18)
crop_leftnumberno(default: 0)
crop_rightnumberno(default: 1)
crop_topnumberno(default: 0)
crop_bottomnumberno(default: 1)
input_mirror_xbooleannoMirror normalized hand X after OSC input, before projector-space calibration. (default: false)
input_leftnumbernoRaw normalized Kinect X that maps to the projector's left edge. (default: 0)
input_rightnumbernoRaw normalized Kinect X that maps to the projector's right edge. (default: 1)
input_topnumbernoRaw normalized Kinect Y that maps to the projector's top edge. (default: 0)
input_bottomnumbernoRaw normalized Kinect Y that maps to the projector's bottom edge. (default: 1)
show_debugbooleannoWhen true, the visual Script TOP draws hand dots and zone guides. (default: false)
calibration_hold_msintegernoMilliseconds a hand must remain stable on a calibration target before auto-capture. (default: 900)
string_countintegernoNumber of musical trigger zones across the projected wall harp. (default: 16)
visual_line_countintegernoNumber of visible projected laser lines. Can exceed string_count for curtain behavior. (default: 128)
curtain_spreadnumbernoHow many neighboring visual lines share vibration from each musical zone. (default: 3.2)
curtain_follownumbernoHow strongly nearby visual lines bend around tracked wall-touch hands. (default: 0.5)
cooldown_msintegernoPer-string retrigger guard in milliseconds. (default: 150)
frequenciesnumber[]noPluck frequencies for the musical trigger zones. (default: 130.81,146.83,164.81,196,220,246.94,261.63,293.66,329.63,392,440,493.88,523.25,587.33,659.25,783.99)
master_volumenumbernoOverall gain for the internal pluck Script CHOP. (default: 0.35)
audio_devicestringnoOptional Audio Device Out device name. Leave empty to keep TouchDesigner's default device. (default: ``)
audio_sample_rateintegernoScript CHOP audio sample rate. Set to 192000 when using UMC202HD at 192k. (default: 48000)
decaynumbernoElectronic pluck decay in seconds. (default: 0.45)
brightnessnumbernoVery subtle harmonic color for the generated sine pluck tone. (default: 0.08)
reverb_mixnumbernoWet reverb mix for the internal pluck synth. (default: 0.22)
reverb_decaynumbernoFeedback decay for the internal algorithmic reverb. (default: 0.68)
reverb_dampingnumbernoHigh-frequency damping for the internal algorithmic reverb. (default: 0.45)
base_colorstringnoIdle projected string color as #RRGGBB. (default: #050505)
hit_colorstringnoTouched string color as #RRGGBB. (default: #FFB000)
background_levelnumbernoNeutral projected background brightness; 0.0 leaves the wall unlit behind the laser lines. (default: 0)
glownumbernoVisual glow multiplier for active strings. (default: 1.25)
vibration_amountnumbernoMaximum horizontal string vibration in pixels. (default: 18)
vibration_decaynumbernoVisual vibration decay in seconds. (default: 0.7)
expose_controlsbooleannoExpose calibration, harp, audio, and visual controls on the generated COMP. (default: true)

create_multi_output mutates

Fan a master TOP across N projectors/displays: each output is a cropped slice (horizontal or vertical) resized to full projector resolution and ended on a Null, ready for setup_output. Set overlap for edge-blending — tiles widen into their neighbours and a GLSL feather fades the shared seams so physically-overlapping projectors blend smoothly. Creates a new baseCOMP under parent_path holding the Select TOP, per-tile Crop (+ optional GLSL feather) and Null outputs, and optional Window COMPs. With as_windows, each tile also gets a borderless Window COMP offset across the desktop so it lands on its own display (left closed — open in Perform mode). Use setup_output instead for a single-window output; create_dome_output/create_cubemap_dome for curved/fulldome instead of flat tiling. Returns a summary plus a JSON block with the container path, created node paths, the first output path, the full list of output and window paths, and any node errors/warnings, with an inline preview image of the first tile.

ParameterTypeRequiredDescription
source_pathstringyesThe master TOP to fan out across the projectors/displays.
countintegernoHow many outputs to split the master into (one per projector/display). (default: 2)
layouthorizontal | verticalnoSlice the master side-by-side (horizontal) or stacked (vertical). (default: horizontal)
overlapnumbernoEdge-blend: overlap each tile into its neighbor by this fraction of a tile's width, with a linear feather at the shared seams so physically-overlapping projectors blend smoothly (0 = abutting tiles, no blend). Try 0.1–0.3. (default: 0)
resolution720p | 1080p | 4KnoPer-output (per-projector) resolution. (default: 1080p)
as_windowsbooleannoAlso create a borderless Window COMP per tile, offset across the desktop so each lands on its own display. Left closed — open them in Perform mode when ready. (default: false)
parent_pathstringnoParent network where the multi-output container is created (default '/project1'). (default: /project1)

sync_external_clock mutates

Lock the project tempo to a live source so beat-synced visuals follow the music. mode picks the source: 'tap' (default) gives a Bpm knob + Tap pulse you dial/tap by ear; 'ableton_link' locks to an Ableton Link session on the network; 'midi_clock' derives BPM from incoming MIDI timing-clock (24 PPQN). All modes write the global tempo (op('/').time.tempo), so create_tempo_sync clocks and create_autopilot follow. The Link/MIDI modes are hardware-gated — without that source present the manual Bpm knob still drives the clock.

ParameterTypeRequiredDescription
bpmnumbernoStarting tempo in BPM (match the DJ's displayed BPM, then fine-tune by tapping). (default: 120)
modetap | ableton_link | midi_clocknoHow the tempo is sourced. 'tap' (default): a Bpm knob + Tap pulse you dial/tap by ear. 'ableton_link': lock to an Ableton Link session on the network (an Ableton Link CHOP's tempo drives the clock). 'midi_clock': derive BPM from incoming MIDI timing-clock (24 PPQN). The Link/MIDI modes need that source present on the machine — without it they fall back to the manual Bpm knob. (default: tap)
parent_pathstringnoParent COMP path the self-contained 'tempo_clock' container is created inside. (default: /project1)

create_tempo_sync mutates

Create a tempo clock (Beat CHOP driven by TouchDesigner's global tempo) exposing beat-synced channels on a Null CHOP: a per-beat 0→1 ramp, a pulse spike on each beat, integer beat/bar counters, and bpm. Bind any parameter to these to lock visuals to the beat. With emit_events on, it also broadcasts a beat event over the bridge WebSocket each beat, so tdmcp-agent watch and the AI can see the pulse live. Pair with extract_audio_features for full musical reactivity.

ParameterTypeRequiredDescription
periodnumbernoBeats per bar / beat period — how the ramp and bar channels divide the tempo. (default: 4)
emit_eventsbooleannoAlso broadcast a beat event over the bridge WebSocket on every beat, so tdmcp-agent watch and the AI can react to beats live. (default: true)
expose_controlsbooleannoExpose a live 'Period' knob to retune the beat division on the fly. (default: true)
parent_pathstringnoParent COMP path the self-contained 'tempo_sync' container is created inside. (default: /project1)

create_text_overlay mutates

Composite styled STATIC text over a visual (or on its own transparent background) — a Text TOP with font size, color, and alignment, optionally laid 'over' a source TOP through a Composite TOP, output as a Null. For lyrics, titles, song names, or credits in a set. Distinct from the vault's bind_vault_text (which data-syncs a Text DAT to a note); this is a finished visual layer ready for setup_output. The text does not move: for a single word that flashes/pulses/slides use create_kinetic_text, and for multi-line scrolling tickers/credits rolls/typewriter reveals use create_text_crawl.

ParameterTypeRequiredDescription
textstringnoThe text to display. (default: TEXT)
source_pathstringnoOptional TOP to composite the text over (e.g. a finished visual). Omit to get the text alone on a transparent background, ready to composite later.
font_sizenumbernoFont size in pixels. (default: 64)
colorstringnoText color as a hex string, e.g. '#ff3366'. (default: #ffffff)
alignleft | center | rightnoHorizontal alignment. (default: center)
valigntop | center | bottomnoVertical alignment. (default: center)
resolution720p | 1080p | 4KnoOutput resolution of the Text TOP: '720p' (1280×720), '1080p' (1920×1080), or '4K' (3840×2160). (default: 1080p)
parent_pathstringnoParent COMP path the self-contained 'text_overlay' container is created inside. (default: /project1)

create_autopilot mutates

Build a beat-driven auto-VJ: a Beat CHOP + a CHOP Execute DAT that, every N beats, either randomizes a target COMP's numeric controls (a hands-free drift, set by Amount) or cycles through its stored cues — so a set keeps evolving on its own. Creates a new baseCOMP under parent_path holding the Beat CHOP and the engine DAT; it modifies the target COMP at comp_path (its custom controls or stored cues) live at runtime. Live Active/Beats/Amount knobs let you pause or retune on stage. Reuses the tempo clock, randomize_controls and manage_cue mechanisms. Pair with a generated system (or a control panel) as the target. Returns a summary plus a JSON block with the container path, created node paths, the target, mode, beats, amount, engine path, any node errors, and warnings (no preview image — the output is a CHOP engine, not a TOP).

ParameterTypeRequiredDescription
comp_pathstringnoCOMP the autopilot drives — its numeric custom controls (randomize mode) or its stored cues (cue mode). Usually a generated system container or a control panel. (default: /project1)
moderandomize | cueno'randomize' nudges the COMP's numeric controls toward new random values each trigger (works on any COMP with controls). 'cue' cycles through the COMP's stored cues (needs cues from manage_cue). (default: randomize)
beatsintegernoFire an action every N beats (4 = once per bar at 4/4). (default: 4)
amountnumberno(randomize) How far to move toward random each trigger: 1 = full scramble, low = gentle drift. (default: 0.5)
parent_pathstringnoWhere to create the autopilot engine. (default: /project1)

create_layer_mixer mutates

Build a VJ-style layer mixer: combine source TOPs into one output. Creates a new baseCOMP under parent_path. 'crossfade' makes an A/B Cross TOP with a Crossfade knob (the classic two-deck mix); any other blend mode composites the inputs (add, difference, hardlight, glow, …). Sources are pulled in via Select TOPs so they can live anywhere; with fewer than two, demo sources (noise + ramp) are created. Output is a Null ready for post-processing or setup_output. Returns a summary plus a JSON block with the container path, created node paths, the source and output paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
inputsstring[]noPaths of source TOPs to mix (brought in via Select TOPs, so they can live in other containers). With fewer than 2, demo sources (noise + ramp) are created so you can see it working. (default: ``)
blendcrossfade | add | difference | hardlight | glow | lightercolor | …no'crossfade' = an A/B Cross TOP with a Crossfade knob; any other value composites all inputs with that blend mode. (default: crossfade)
expose_controlsbooleannoWhen true (default), expose a live 'Crossfade' knob on the container (crossfade mode only). (default: true)
parent_pathstringnoParent network where the mixer container is created (default '/project1'). (default: /project1)

create_video_player mutates

Build a movie/clip player inside a new 'video_player' container under parent_path: one Movie File In TOP, or a playlist of clips fed through a Switch TOP with a Clip selector. Exposes live Play / Speed (and Clip) controls, output as a Null TOP. Pass file paths, or none to get an empty player you point at a file in TD. Use create_video_synth instead when you want a procedurally generated (oscillator/CRT) image rather than playing a video file. Returns the created clip paths, the output Null path, and whether a playlist was built. For VJ clip playback — mix it with create_layer_mixer or make it react with bind_to_channel.

ParameterTypeRequiredDescription
filesstring[]noMovie file path(s). 0 = an empty player you can point at a file later; 1 = a single clip; 2+ = a playlist with a Switch TOP and a Clip selector. (default: ``)
expose_controlsbooleannoExpose live Play / Speed (and Clip, for a playlist) controls. (default: true)
parent_pathstringnoParent COMP path the self-contained 'video_player' container is created inside. (default: /project1)

create_3d_scene mutates

Build a renderable 3D scene: a Geometry COMP holding the chosen primitive (sphere/box/grid), a Camera, a Light, and a Render TOP, output as a Null. Creates a new baseCOMP under parent_path holding all of these — optionally instanced into a grid of instances copies via GPU instancing, with scale_variation for per-copy random sizes and spin for per-copy rotation over time. Exposes RotateY (whole-scene spin) and Zoom (camera distance) knobs. The starting point for 3D visuals — bind RotateY to a tempo ramp or an audio feature to make it move. Use create_3d_audio_reactive instead when you want the geometry driven by sound, or create_pbr_scene for physically-based materials. Returns a summary plus a JSON block with the container path, created node paths, the geometry/camera/render/output paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
primitivesphere | box | gridnoGeometry to render. (default: sphere)
instancesintegernoCopies to scatter via GPU instancing on a grid (1 = a single object). (default: 1)
spinnumbernoPer-instance spin around Y in degrees/sec (0 = still). Each copy rotates in place over time; needs instances > 1. (default: 0)
scale_variationnumbernoPer-instance size variation: 0 = all the same size, 1 = sizes range from 0 to full. Needs instances > 1. (default: 0)
expose_controlsbooleannoWhen true (default), expose live RotateY (spin) and Zoom (camera distance) knobs. (default: true)
parent_pathstringnoParent network where the 3D-scene container is created (default '/project1'). (default: /project1)

create_projection_mapping mutates

Wrap a source TOP in a Corner Pin warp for projection mapping: drag the four corner handles to line the image up with a physical surface (wall, object, screen). The source comes in through a Select TOP so it can live anywhere; output is a Null ready for setup_output. The corner positions are parameters, so you can also drive or save them.

ParameterTypeRequiredDescription
source_pathstringnoTOP to map (brought in via a Select TOP). Omit for a demo grid source.
parent_pathstringnoParent COMP path the self-contained 'projection' container is created inside. (default: /project1)

projector_calibration_wizard mutates

Build a rehearsal-safe projector calibration network: generated grid/crosshair or selected source TOP, per-projector crop/corner-pin/level/output lanes, preview layout, notes, and brightness/gamma controls. Live projector alignment remains explicitly unverified until run on the physical outputs.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path to build inside. (default: /project1)
namestringnoName for the generated calibration container. (default: projector_calibration)
source_pathstringnoOptional existing TOP to calibrate. Omit to generate a built-in grid/crosshair.
projectorsintegernoNumber of projector lanes to scaffold. (default: 1)
widthintegernoPer-lane output width. (default: 1920)
heightintegernoPer-lane output height. (default: 1080)
overlapnumbernoNormalized overlap reserved for soft-edge alignment notes. (default: 0.08)
include_corner_pinbooleannoInsert a Corner Pin TOP per projector lane for keystone alignment. (default: true)
expose_controlsbooleannoExpose Brightness and Gamma controls on every projector lane. (default: true)

create_keyframe_animation mutates

Animate parameters along a keyframed curve synced to the timeline — structured motion beyond animate_parameter's LFO (use animate_parameter instead for continuous LFO oscillation). Give time/value keyframes and the targets; this creates a baseCOMP 'keyframe_anim' under parent_path containing an Execute DAT that interpolates the curve each frame (linear or smooth easing) and writes the value onto every target parameter, looping over the keyframe span (or holding the last value). Use it for choreographed moves (a build-up, a drop, a sweep). Returns a summary plus a JSON block with the container path, the Execute DAT (hook) path, the loop duration, the targets, and warnings (including any targets that did not resolve). Returns a friendly error if the keyframes do not span a positive duration.

ParameterTypeRequiredDescription
targetsstring[]yesParameters to animate, each written as 'nodePath.parName'.
keyframesobject[]yesKeyframes (time + value); the curve interpolates between them in order.
loopbooleannoLoop the animation; otherwise it holds the last value. (default: true)
easinglinear | smoothnoInterpolation between keys: linear, or smooth (eased) for organic motion. (default: smooth)
parent_pathstringnoParent network where the keyframe-animation container (a baseCOMP) is created (default '/project1'). (default: /project1)

create_simulation mutates

Build a GPU simulation: 'reaction_diffusion' grows Gray-Scott patterns (via the validated recipe), while 'slime' and 'fluid' run a feedback loop displaced by an evolving noise flow field — drifting trails and advected smears. Exposes a Decay knob (trail persistence). For more procedural techniques (cellular automata, flow fields, strange attractors) see create_generative_art.

ParameterTypeRequiredDescription
typereaction_diffusion | slime | fluidnoreaction_diffusion = Gray-Scott patterns (uses the validated recipe); slime = drifting decaying trails; fluid = advected smear. (default: reaction_diffusion)
speednumberno(slime/fluid) How fast the flow field evolves. (default: 1)
decaynumberno(slime/fluid) Trail persistence — higher holds longer. (default: 0.96)
expose_controlsbooleanno(slime/fluid) Expose a live 'Decay' knob bound to the gain Level TOP. (default: true)
parent_pathstringnoParent COMP path the self-contained simulation container is created inside. (default: /project1)

list_recipes read-only

List the built-in recipe library — ready-made network templates (feedback tunnel, particle galaxy, reaction-diffusion, projection mapping, …) with their id, name, tags and difficulty. Offline. Apply one with apply_recipe.

ParameterTypeRequiredDescription
tagstringnoOptional tag/keyword to filter recipes by (matches tags or name).

apply_recipe mutates

Instantiate a built-in recipe by id (from list_recipes) inside a COMP — a tested, ready-made network you can build in one call, then tweak. Creates a new baseCOMP under parent_path, adds and wires every node the recipe declares, exposes its controls, then auto-layouts, verifies, and previews. Returns a summary plus a JSON block with the container path, all created node paths, the output path, the recipe id, exposed controls, any node errors, warnings, and an inline preview image. Returns a friendly error listing available ids if id is unknown.

ParameterTypeRequiredDescription
idstringyesRecipe id to build (see list_recipes).
parent_pathstringnoCOMP to build the recipe inside. (default: /project1)

scaffold_show mutates

Create a starting skeleton for a live show: a new container under parent_path with a 'master' output Null (where your mix lands) and a 'tempo' beat clock for reactivity, but NO scenes or look. Use scaffold_genre instead when you want a genre-flavored start (tempo + a ready-made look + palette already wired in). Returns the container path plus the 'master' and 'tempo' node paths. A blank-canvas starting point — then add scenes, audio features, a layer mixer into master, cues and a control surface.

ParameterTypeRequiredDescription
namestringnoName of the show container to create. (default: show)
parent_pathstringnoParent COMP path the show container is created inside. (default: /project1)

create_strobe mutates

Build a beat-syncable strobe / flash layer — a full-frame colour flash that pulses hard on/off, the signature live-VJ strobe effect. A square-wave LFO CHOP at the given Rate (Hz) drives a Level TOP's brightness so a Constant TOP (the flash colour, white by default) blinks; Duty sets the on-time fraction. With an input_path the flash is composited OVER that source (pulled in by a Select TOP, so it can live in another container); without one, the bare flash is output. Output is a Null TOP. Rate is free-running for v1 — bind the LFO's frequency to a beat CHOP later to lock it to the tempo.

ParameterTypeRequiredDescription
rate_hznumbernoStrobe rate in flashes per second (Hz) — the LFO CHOP square-wave frequency. (default: 8)
intensitynumbernoBrightness of the flash when it is on (0..1). Drives the Level TOP's brightness1. (default: 1)
colorstringnoFlash colour as a hex string ('#ffffff' = white, the classic strobe). Sets the Constant TOP's RGB. (default: #ffffff)
dutynumbernoOn-time fraction of each cycle (0..1, 0.5 = even on/off). Mapped to the LFO CHOP's Bias, which rectangularises the square wave. (default: 0.5)
input_pathstringnoOptional absolute path of a source TOP to flash OVER. Pulled in via a Select TOP (TD wires don't cross containers) and composited under the flash. If omitted, the bare flash is output.
expose_controlsbooleannoExpose live Rate / Intensity / Duty knobs bound to the right node parameters. (default: true)
parent_pathstringnoParent COMP path the self-contained 'strobe' container is created inside. (default: /project1)

create_kaleidoscope mutates

Wrap a source in a kaleidoscope / radial-mirror symmetry effect — a signature VJ look. Folds the image into N identical mirrored wedges around a centre, with live Segments / Rotation / Zoom / Center controls. Creates a new baseCOMP under parent_path holding the source, a single GLSL fold pass, and a Null output. Pass input_path (an absolute TOP path) to kaleidoscope an existing visual, or omit it to generate a self-contained noise source that previews on its own. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
segmentsintegernoNumber of mirrored wedges (N-fold symmetry). 6 is the classic look; higher = finer. (default: 6)
rotationnumbernoRotation of the whole kaleidoscope, in radians. Animate/bind this to spin it. (default: 0)
zoomnumbernoZoom into the source — >1 magnifies the pattern, <1 pulls more of the source in. (default: 1)
center_xnumbernoKaleidoscope centre X in normalized UV (0–1). 0.5 is the middle of the frame. (default: 0.5)
center_ynumbernoKaleidoscope centre Y in normalized UV (0–1). 0.5 is the middle of the frame. (default: 0.5)
input_pathstringnoAbsolute path of a source TOP to kaleidoscope. Brought in via a Select TOP (cross-container wiring silently no-ops). If omitted, a coloured noise source is generated so the network previews on its own.
expose_controlsbooleannoWhen true (default), expose live Segments / Rotation / Zoom / Center X / Center Y knobs on the container. (default: true)
parent_pathstringnoParent network where the kaleidoscope container is created (default '/project1'). (default: /project1)

create_glitch mutates

Build a glitch / corrupted-signal visual: RGB channel split, noise-driven blocky/slice displacement and horizontal band tearing over a source. Creates a new baseCOMP under parent_path holding the source, a noise driver, a Displace TOP, a GLSL RGB-shift pass, and a Null output. With input_path it glitches an existing TOP (pulled in via a Select TOP); otherwise it uses a self-contained animated colour-noise source (no device permissions). Exposes Amount (master intensity — bind to audio/beat), Speed, RGBShift and BlockSize knobs. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image. A signature live VJ look.

ParameterTypeRequiredDescription
amountnumbernoMaster glitch intensity (0..1). Scales both the block/slice displacement and the RGB channel split — 0 is a clean passthrough. Exposed as the 'Amount' knob and is the parameter to bind to audio/beat later. (default: 0.5)
speednumbernoAnimation speed of the noise that drives the blocky tearing (drives the noise's tz). (default: 1)
rgb_shiftnumbernoBase per-channel horizontal offset in UV space (0..~0.1 is a useful range). Multiplied by Amount. (default: 0.02)
block_sizenumbernoScale of the displacement noise — smaller = larger, blockier tears; larger = finer grain. Sets the noise's period. (default: 8)
seednumbernoRandom seed for the displacement noise. (default: 1)
input_pathstringnoAbsolute path of an existing TOP to glitch (e.g. '/project1/render/out1'). Pulled in via a Select TOP because wires cannot cross COMPs. If omitted, a self-contained animated colour-noise source is used so the system builds with zero device permissions (NOT a live webcam).
expose_controlsbooleannoWhen true (default), expose live Amount/Speed/RGBShift/BlockSize knobs on the system container. (default: true)
parent_pathstringnoParent network where the glitch container is created (default '/project1'). (default: /project1)

create_spectrum mutates

Build an FFT audio-spectrum analyzer that exposes N separate, ready-to-bind frequency-bin channels (band0..band{N-1}) on a Null CHOP. This is the per-band complement to extract_audio_features (which only gives overall level + bass/mid/treble): bind a row of parameters to op('…/spectrum/spectrum')['band0'], ['band1'], … to drive a bank of bars, or pick one frequency. A Sensitivity knob scales every band. Source can be the live device (mic/line — may prompt for macOS permission), an audio file, a synthetic oscillator (for testing), or an existing CHOP. Use extract_audio_features when you want coarse level/bass/mid/treble bands instead of N fine bins, create_audio_reactive for a ready-made spectrum visual, and feed this Null into bind_audio_reactive to drive a COMP.

ParameterTypeRequiredDescription
sourcedevice | file | oscillator | existing_chopnoAudio source. 'device' = live microphone/line in (the real-world default; creating it may pop a one-time macOS microphone-permission dialog — click Allow). 'file' = an audio file. 'oscillator' = a synthetic tone (white noise → energy in every band, handy for testing without any device permission). 'existing_chop' = reuse a CHOP you already have. (default: device)
audio_file_pathstringnoAudio file path (source='file').
existing_chop_pathstringnoPath of an existing audio CHOP to analyze (source='existing_chop').
bandsintegernoNumber of frequency bins to expose as separate, bindable channels (band0..band{N-1}). 16 or 32 is typical; higher = finer frequency resolution. (default: 16)
expose_controlsbooleannoExpose a live 'Sensitivity' knob (a gain over every band channel). (default: true)
parent_pathstringnoParent COMP path the self-contained 'spectrum' container is created inside. (default: /project1)

detect_onsets mutates

Build a transient/onset detector that flags kick/snare/hi-hat hits in live audio and exposes a per-band pulse channel (a 0→1 spike on each hit) on a Null CHOP. Unlike create_tempo_sync (a fixed internal clock), this follows the ACTUAL audio: bind a parameter to op('…/onsets/onsets')['kick'] to flash or cut exactly on the kick drum. Each band is built from primitives (band filter → RMS energy → moving-baseline compare → threshold), so a Threshold knob tunes hit sensitivity and a Sensitivity knob scales the output. Source can be the live device (mic/line — may prompt for macOS permission), an audio file, a synthetic oscillator (for testing), or an existing CHOP. With emit_events on, it also broadcasts an onset event over the bridge WebSocket on each hit. The audio-following complement to create_tempo_sync.

ParameterTypeRequiredDescription
sourcedevice | file | oscillator | existing_chopnoAudio source. 'device' = live microphone/line in (the real-world default; creating it may pop a one-time macOS microphone-permission dialog — click Allow). 'file' = an audio file. 'oscillator' = a synthetic tone, handy for testing without any device permission. 'existing_chop' = reuse a CHOP you already have. (default: device)
audio_file_pathstringnoAudio file path (source='file').
existing_chop_pathstringnoPath of an existing audio CHOP to analyze (source='existing_chop').
kick_hznumbernoLow-pass cutoff (Hz) isolating the kick/bass-drum band. (default: 120)
snare_hznumbernoBand-pass centre (Hz) isolating the snare/body band. (default: 1500)
hat_hznumbernoHigh-pass cutoff (Hz) isolating the hi-hat/cymbal band. (default: 6000)
thresholdnumbernoHow far an instant's band energy must rise above its own moving baseline (in RMS units) to count as a hit. Band-RMS magnitudes are small (a steady tone reads ~0.002 live), so the default is 0.01 — the old 0.15 was unreachable and never fired. Lower = more sensitive; raise it if a loud track double-triggers. Tune live per source (needs real percussive audio to dial in). (default: 0.01)
emit_eventsbooleannoAlso broadcast an onset event over the bridge WebSocket on every detected hit (with the band name), so tdmcp-agent watch and the AI can react to drum hits live. (default: false)
expose_controlsbooleannoExpose live 'Sensitivity' (output gain) and 'Threshold' (hit sensitivity) knobs. (default: true)
parent_pathstringnoParent COMP path the self-contained 'onsets' container is created inside. (default: /project1)

create_color_grade mutates

Build a colour-grading / LUT finishing stage over a source — the 'make the final output look graded' tool for VJ sets. A Level TOP applies lift/gamma/gain (brightness1 / gamma1 / contrast + black level), then an HSV Adjust TOP applies saturation + hue rotation; an optional LUT image file is loaded via a Movie File In TOP and fed into a Lookup TOP's second input to remap every colour. Creates a new baseCOMP under parent_path holding the chain. With an input_path the source is pulled in via a Select TOP (so it can live in another container); without one, a Ramp TOP test gradient is graded so it builds and previews standalone. Live Brightness / Gamma / Contrast / Saturation / Hue knobs are exposed. Output is a Null TOP. Returns a summary plus a JSON block with the container path, created node paths, the Level/HSV/output paths, exposed controls, any node errors, warnings, and an inline preview image. Use apply_post_processing instead to chain several distinct effects in series.

ParameterTypeRequiredDescription
brightnessnumbernoOverall brightness / gain multiplier (1 = unchanged). Drives the Level TOP's brightness1 (this is the gain control — the param is brightness1, NOT gain). (default: 1)
gammanumbernoGamma / mid-tone curve (1 = linear, <1 brightens mids, >1 darkens mids). Drives the Level TOP's gamma1. (default: 1)
contrastnumbernoContrast around mid-grey (1 = unchanged). Drives the Level TOP's contrast. (default: 1)
black_levelnumbernoLift the black point (0 = unchanged); raises the darkest pixels for a faded / filmic 'lift'. Drives the Level TOP's blacklevel. (default: 0)
saturationnumbernoColour saturation multiplier (0 = greyscale, 1 = unchanged, >1 = punchier). Drives the HSV Adjust TOP's saturationmult. (default: 1)
huenumbernoHue rotation in degrees (0 = unchanged, 0..360 wraps the colour wheel). Drives the HSV Adjust TOP's hueoffset. (default: 0)
lut_pathstringnoOptional absolute path to a LUT image file (e.g. a 256x1 / 512x512 colour ramp). When given, a Movie File In TOP loads it and feeds the SECOND input of a Lookup TOP; the graded image is the first input, so each pixel is remapped through the LUT. Omit to skip LUT remapping.
input_pathstringnoOptional absolute path of the source TOP to grade. Pulled in via a Select TOP (TD wires don't cross containers). If omitted, a Ramp TOP test gradient is graded so the chain still builds and previews without any device or external source.
expose_controlsbooleannoWhen true (default), expose live Brightness / Gamma / Contrast / Saturation / Hue knobs bound to the right node parameters. (default: true)
parent_pathstringnoParent network where the color-grade container is created (default '/project1'). (default: /project1)

create_color_wheels mutates

Classic colour-grading wheels — three tinted Level TOPs run in series for shadows (lift, gamma-biased), midtones (gamma) and highlights (gain, brightness-biased), then a master Level TOP for global offset (blacklevel), then an HSV Adjust TOP for saturation. Each wheel is an [r,g,b] multiplier in 0..2 (1,1,1 = neutral). Builds a new baseCOMP under parent_path holding the chain; with source_path the upstream TOP is pulled in via a Select TOP, without one a Ramp TOP test gradient is graded so the chain previews standalone. Exposes per-channel LiftR/G/B, GammaR/G/B, GainR/G/B float knobs plus Offset and Saturation (live-bound to the underlying Level/HSV pars). Output is a Null TOP. Use create_color_grade for a simpler single-Level + HSV chain, or apply_post_processing to chain several distinct effects.

ParameterTypeRequiredDescription
source_pathstringnoAbsolute path of the source TOP to grade. Pulled in via a Select TOP (TD wires don't cross containers). If omitted, a Ramp TOP test gradient is graded so the chain still builds and previews without any external source.
liftobject[]noShadow tint (lift wheel) as [r,g,b] in 0..2. Multiplies R/G/B on a Level TOP whose gamma1 is biased high (~1.4) so the multiply lands in the darker tonal range. [1,1,1] = neutral. (default: 1,1,1)
gammaobject[]noMidtone tint (gamma wheel) as [r,g,b] in 0..2. Multiplies R/G/B on a mid-biased Level TOP. [1,1,1] = neutral. (default: 1,1,1)
gainobject[]noHighlight tint (gain wheel) as [r,g,b] in 0..2. Multiplies R/G/B on a Level TOP biased into highlights via brightness1. [1,1,1] = neutral. (default: 1,1,1)
offsetnumbernoGlobal black-level offset (-1..1). Positive lifts the black point (faded/filmic look); negative crushes. Drives the master Level TOP's blacklevel. (default: 0)
saturationnumbernoMaster saturation multiplier (1 = unchanged, 0 = greyscale). Drives the trailing HSV Adjust TOP's saturationmult. (default: 1)
expose_controlsbooleannoWhen true (default), expose live per-channel float knobs LiftR/G/B, GammaR/G/B, GainR/G/B (0..2, 1 = neutral) plus Offset and Saturation. Three floats per wheel — instead of a single RGB swatch — because the shared control-panel builder cannot bind an rgb control to a parameter, so the swatch would be display-only. (default: true)
base_namestringnoOptional base name for the container (defaults to 'color_wheels'). Final container path is &lt;parent_path&gt;/&lt;base_name&gt; with TD's auto-suffix.
parent_pathstringnoParent network where the colour-wheels container is created (default '/project1'). (default: /project1)

import_model mutates

Import a 3D model file (.obj/.fbx/.usd) and render it to a TOP: a File In SOP reading model_path, fed into a Geometry COMP, with a Camera, a Light, and a Render TOP output as a Null. Omit model_path to fall back to a default primitive so the network still builds with no dependencies. Exposes RotateY (spin), Zoom (camera distance) and Scale knobs — the imported-model sibling of create_3d_scene.

ParameterTypeRequiredDescription
model_pathstringnoPath to a 3D model file (.obj/.fbx/.usd) read by a File In SOP. Omit to fall back to a default primitive so the network still builds and previews with no file dependency.
rotate_ynumbernoInitial rotation of the model around Y in degrees (exposed as the RotateY knob). (default: 0)
zoomnumbernoCamera distance from the model along Z (exposed as the Zoom knob). (default: 5)
scalenumbernoUniform scale applied to the model (1 = imported size). (default: 1)
expose_controlsbooleannoExpose live RotateY (spin), Zoom (camera distance) and Scale knobs. (default: true)
parent_pathstringnoParent COMP path the self-contained 'model' container is created inside. (default: /project1)

blender_scene_import mutates

Create a self-contained TouchDesigner render scaffold for a Blender scene or Blender-exported asset: File In SOP (or fallback primitive), Geometry COMP, PBR material, environment/key lights, Camera, Render TOP, and Null TOP output. Supports .blend/.fbx/.obj/.gltf/.glb/.usd/.usdz paths and warns when a .blend may need export from Blender first.

ParameterTypeRequiredDescription
scene_pathstringnoPath to a Blender scene or exported model file (.blend/.fbx/.obj/.gltf/.glb/.usd/.usdz). Omit to create a renderable fallback primitive.
parent_pathstringnoParent COMP path where the self-contained Blender import container is created. (default: /project1)
namestringnoName for the generated container under parent_path. (default: blender_scene)
import_scalenumbernoUniform scale applied to the imported scene geometry. (default: 1)
rotate_ynumbernoInitial Y rotation of the imported scene in degrees. (default: 0)
camera_distancenumbernoCamera distance from the scene along Z. (default: 6)
material_modepbr | claynopbr keeps metallic/roughness controls; clay uses a neutral matte material. (default: pbr)
base_colorobject[]noRGB material base color, normalized 0..1. (default: 0.78,0.8,0.84)
metallicnumbernoPBR metallic amount. Ignored for material_mode=clay. (default: 0.15)
roughnessnumbernoPBR roughness amount. (default: 0.45)
expose_controlsbooleannoExpose RotateY, CameraDistance, Scale, Metallic, and Roughness controls. (default: true)

create_shader_lib mutates

Instantiate a curated, ready-to-run full-screen GLSL shader (tunnel, raymarch_sphere, fractal, metaballs, plasma) into a GLSL TOP with live Speed / Scale / Color controls. High-value VJ eye-candy; unlike create_glsl_shader it ships robust built-in shaders rather than taking arbitrary code.

ParameterTypeRequiredDescription
shadertunnel | raymarch_sphere | fractal | metaballs | plasmanoWhich curated built-in shader to instantiate. (default: tunnel)
speednumbernoAnimation speed multiplier (drives uTime). Exposed as a live 'Speed' control. (default: 1)
scalenumbernoPattern scale/zoom multiplier (uScale). Exposed as a live 'Scale' control. (default: 1)
colorstringnoBase color as hex (e.g. '#33ccff'); parsed to 0..1 RGB and exposed as 'Color'.
resolutionobject[]noOutput resolution [width, height] of the GLSL TOP. (default: 1280,720)
expose_controlsbooleannoExpose live Speed / Scale / Color controls on the system container. (default: true)
parent_pathstringnoParent COMP path the self-contained 'shader_lib_<shader>' container is created inside. (default: /project1)

create_shader_park mutates

Compile Shader Park JavaScript sculpture code with shader-park-core and instantiate it as a self-contained TouchDesigner GLSL MAT scene with live controls. Use the companion shader-park:tox script when you specifically want the official Shader Park .tox plugin workflow.

ParameterTypeRequiredDescription
codestringnoShader Park sculpture code. Example: let size = input(); sphere(size);. The code is compiled with shader-park-core and stored in a Text DAT for editing. _(default: `setMaxIterations(96);
rotateY(time * 0.25);
color(vec3(0.2, 0.8, 1.0));
sphere(0.45);`)_
namestringnoName of the created baseCOMP container. (default: shader_park_sculpture)
uniform_valuesobjectnoInitial values for Shader Park input() uniforms by name, e.g. { "size": 0.55 }. (default: [object Object])
speednumbernoAnimation speed multiplier for the Shader Park time uniform. (default: 1)
scalenumbernoInitial _scale uniform value. (default: 1)
opacitynumbernoInitial opacity uniform value. (default: 1)
step_sizenumbernoInitial Shader Park raymarch stepSize uniform value. (default: 0.85)
camera_znumbernoCamera distance from the sculpture. (default: 4)
resolutionobject[]noRender TOP resolution [width, height]. (default: 1280,720)
expose_controlsbooleannoExpose Speed / Scale / Opacity / StepSize / CameraZ plus any float Shader Park inputs. (default: true)
parent_pathstringnoParent COMP path for the new sculpture. (default: /project1)

create_video_synth mutates

Instantiate an analog video-synthesizer pattern (lissajous oscillator curve, moving interference fringes, or CRT scanline modulation) into a GLSL TOP with live Speed / FreqX / FreqY / Scale / Color controls, output as a Null TOP inside a new 'video_synth_<mode>' container under parent_path. An oscillator/interference generator for VJ work — distinct from create_shader_lib's tunnel/raymarch/fractal/metaball looks. Use create_video_player instead when you want to play a real movie file rather than generate a pattern. Returns the chosen mode, its parameters, and a preview of the output TOP.

ParameterTypeRequiredDescription
modelissajous | interference | scanlinesnoOscillator look: 'lissajous' (two-oscillator X/Y curve), 'interference' (moving sine fringes), or 'scanlines' (analog CRT scanline modulation). (default: lissajous)
speednumbernoAnimation speed multiplier (drives uTime). Exposed as a live 'Speed' control. (default: 1)
freq_xnumbernoX-axis oscillator frequency (uFreqX). Exposed as a live 'FreqX' control. (default: 3)
freq_ynumbernoY-axis oscillator frequency (uFreqY). Exposed as a live 'FreqY' control. (default: 2)
scalenumbernoPattern scale/zoom multiplier (uScale). Exposed as a live 'Scale' control. (default: 1)
colorstringnoBase color as hex (e.g. '#33ccff'); parsed to 0..1 RGB and exposed as 'Color'.
resolutionobject[]noOutput resolution [width, height] of the GLSL TOP. (default: 1280,720)
expose_controlsbooleannoExpose live Speed / FreqX / FreqY / Scale / Color controls on the system container. (default: true)
parent_pathstringnoParent COMP path the self-contained 'video_synth_<mode>' container is created inside. (default: /project1)

create_detection_reactive mutates

Turn object/person detection into TouchDesigner control channels — with NO CUDA requirement. Two backends: 'websocket' subscribes to an external detector process that streams JSON detections over a WebSocket (runs on any machine/GPU, or none), and 'onnx' scaffolds a CPU Script CHOP that runs an .onnx model via onnxruntime inside TD. Either way the output is a Null CHOP carrying a stable contract — presence (0/1), count, and per-object normalized bboxes (obj1_x, obj1_y, obj1_w, obj1_h, obj1_score, …) — ready for bind_to_channel. (Detection idea inspired by TDYolo, MIT-licensed; no code copied.)

ParameterTypeRequiredDescription
namestringnoBase name for the container COMP. (default: detection)
parent_pathstringnoCOMP to create the detection container in (default '/project1'). (default: /project1)
sourcewebsocket | onnxnoDetector backend. 'websocket' subscribes to an external detector process that streams JSON detections (no CUDA needed, runs anywhere). 'onnx' scaffolds a Script CHOP that runs an ONNX model via onnxruntime on the CPU inside TouchDesigner — you fill in the model path + inference. (default: websocket)
urlstringno(websocket) URL of the external detector's WebSocket. It should send JSON objects like {"count": N, "objects": [{"x":..,"y":..,"w":..,"h":..,"score":..}]}. (default: ws://127.0.0.1:8765)
model_pathstring | nullno(onnx) Filesystem path to the .onnx model to load in the Script CHOP (CPU inference). (default: null)
input_topstring | nullno(onnx) Absolute path of the TOP to read frames from for inference. Pulled via a Select TOP. (default: null)
max_objectsintegernoNumber of detected objects (bboxes) to expose as channels (obj1_x, obj1_y, …). (default: 4)
reconnect_secondsnumberno(websocket) Auto-reconnect interval if the detector connection drops. (default: 2)

create_fixture_control mutates

Build a moving-head lighting rig with BOTH a DMX/Art-Net output chain AND a 3D visual previsualization. For each fixture: a Constant CHOP holds an 8-channel movingHead8 block (pan, tilt, dimmer, r, g, b, strobe, gobo, prefixed '<id>/…'), padded and merged into a dmxoutCHOP (interface, universe, netaddress, rate); and a Geometry COMP 'head' with a tube-cone beam whose pan→ry and tilt→rx rotation is expression-driven straight from that fixture's DMX pan/tilt channels (0-255 mapped across pan_range/tilt_range degrees), all rendered under one camera+light Render TOP. This adds the live 3D preview on top of what create_dmx_fixture_pipeline (DMX-out only) does. Bind individual channels later with bind_to_channel / animate_parameter on op('rig_out')['fix1/pan']; the previz updates automatically.

ParameterTypeRequiredDescription
namestringnoBase name for the container COMP. (default: fixture_rig)
parent_pathstringnoCOMP to create the fixture rig container in (default '/project1'). (default: /project1)
hoststring | nullnoTarget IP for Art-Net / sACN (dmxoutCHOP netaddress). Null = leave default. (default: null)
universeintegernoDMX universe written to the dmxoutCHOP. (default: 1)
netartnet | sacnnoNetwork protocol — written to the dmxoutCHOP interface par. (default: artnet)
fpsnumbernoDMX refresh rate (dmxoutCHOP rate). (default: 40)
pan_rangenumbernoPhysical pan sweep in degrees the fixture spans across DMX 0-255 (previz rotation). (default: 540)
tilt_rangenumbernoPhysical tilt sweep in degrees the fixture spans across DMX 0-255 (previz rotation). (default: 270)
beam_lengthnumbernoLength of the previz beam cone from the head (metres). (default: 8)
beam_anglenumbernoHalf-angle of the previz beam cone (degrees) — narrow = spot, wide = wash. (default: 12)
fixturesobject[]yesMoving-head fixtures. Each becomes a DMX movingHead8 block + a 3D previz head+beam.

create_geo_visualization mutates

Turn GeoJSON (e.g. OpenStreetMap-derived) into a 3D city visualization. Reads Point / LineString / Polygon / Multi* features, projects lat/long via a Mercator projection normalized to a unit box, and builds a Script SOP that lays out point clouds for points and polylines for streets/building footprints — optionally extruded into 3D ribbon 'walls' using each feature's numeric 'height' property — all wrapped in a Geometry COMP under a camera+light Render TOP for instant preview. NOTE: OpenStreetMap map data is © OpenStreetMap contributors and licensed under the Open Database License (ODbL); you must attribute it when visualizing OSM-derived data.

ParameterTypeRequiredDescription
namestringnoBase name for the container COMP. (default: geo_viz)
parent_pathstringnoCOMP to create the geo visualization container in (default '/project1'). (default: /project1)
geojsonobjectyesA GeoJSON FeatureCollection (or single Feature). Only geometry coordinates + an optional numeric 'height' property are read.
scalenumbernoWorld-units per projected unit. The projection is normalized to [-1,1] then scaled. (default: 100)
extrudebooleannoExtrude polygon/line features into 3D 'buildings' using each feature's 'height' property (default height when missing). (default: true)
default_heightnumbernoHeight (world units) for extruded features lacking a numeric 'height' property. (default: 0.1)

create_depth_silhouette mutates

Extract a silhouette / body mask from a depth or video source — a person's white outline on black you can composite, fill with colour, or use as a mask for reactive visuals (interactive installations / camera-reactive sets). The signal is smoothed (Blur TOP), keyed to a mask (Threshold TOP), optionally inverted (Level TOP) and optionally filled with a colour keyed through the mask (Constant + multiply Composite). Creates a new baseCOMP under parent_path holding the source, Blur, Threshold, Level, optional Constant + Composite fill, and a Null output. Source defaults to a self-contained synthetic noise field so it builds and previews with ZERO device permissions; pick 'file' for a clip, or a 'kinect_azure'/'kinect'/'realsense' sensor for the live installation (may prompt for macOS permission). Exposes Threshold (bind to proximity/audio), Smooth, Invert (+ FillColor) and outputs a Null TOP. Use create_depth_displacement instead for true 3D relief geometry rather than a flat 2D mask. Returns a summary plus a JSON block with the container path, created node paths, the mask/output paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourcesynthetic | file | kinect_azure | kinect | realsensenoWhere the depth/luma signal comes from. 'synthetic' (the default) = a self-contained animated noise/ramp field that needs ZERO device permissions, so the network builds and previews immediately — use it to dial in the look. 'file' = a movie/image file (source_file_path). 'kinect_azure' | 'kinect' | 'realsense' = a live depth/IR sensor (the real installation source); creating it may pop a one-time macOS camera/depth-permission dialog — click Allow. (The depth-device op names are confirmed to exist; their per-device params still need live confirmation.) (default: synthetic)
source_file_pathstringnoMovie/image file path for source='file' (e.g. a pre-recorded depth or IR clip). Ignored for other sources.
thresholdnumbernoDepth/luma cutoff (0..1) that separates the body from the background: pixels brighter than this become the white silhouette, the rest go black. The headline 'Threshold' knob and the parameter to bind to audio/beat/proximity later. (default: 0.5)
smoothnumbernoEdge smoothing — a Blur TOP filter size applied to the raw mask to round off jagged sensor edges before the silhouette is keyed. 0 = hard, aliased edges; higher = softer outline. (default: 0.5)
invertbooleannoInvert the mask (swap silhouette and background). Off = white body on black; on = black body on white. Drives a Level TOP's invert. (default: false)
fill_colorstringnoOptional hex colour ('#rrggbb') to fill the silhouette with instead of plain white — keyed through the mask via a Constant TOP composited (multiply) against it. Omit for a white-on-black mask.
expose_controlsbooleannoWhen true (default), expose live Threshold / Smooth / Invert (+ FillColor) controls on the system container. (default: true)
parent_pathstringnoParent network where the silhouette container is created (default '/project1'). (default: /project1)

create_kinetic_text mutates

Build a self-contained animated / kinetic typography layer — a word or line that flashes, pulses, or slides, the signature live-VJ lyric-flash effect. A Text TOP renders the text; an LFO CHOP at the given Rate (Hz) drives the animation: 'flash' gates a Level TOP's alpha/opacity hard on/off (a square wave — the text vanishes between flashes rather than turning black, so it pops cleanly in and out over a background), 'pulse' drives a Transform TOP's scale plus a Level TOP alpha fade (a sine, the text breathes), and 'slide' scrolls the Transform TOP's translate-X. Creates a new baseCOMP under parent_path holding the Text TOP, the LFO, the per-mode Transform/Level nodes, an optional Composite, and a Null output. With an input_path the text is composited OVER that source (pulled in by a Select TOP, so it can live in another container); without one it animates on a transparent frame. Rate is free-running for v1 — bind the LFO's frequency to a beat CHOP (or a Trigger to a detect_onsets channel) to lock the flashes to the tempo. This is for a single animated word/line; for a static caption or title use create_text_overlay, and for multi-line scrolling tickers/credits rolls/typewriter reveals use create_text_crawl. Returns a summary plus a JSON block with the container path, created node paths, the text/lfo/output paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
textstringnoThe word or line to animate (the lyric flash). Rendered by a Text TOP. For multiple lines use \n. (default: DUQUESA)
modeflash | pulse | slidenoAnimation style: 'flash' = hard on/off blink (a square LFO gates the alpha/opacity — the classic lyric-flash, the text vanishes between flashes rather than going black); 'pulse' = breathing scale-up + alpha fade driven by a sine LFO; 'slide' = the text scrolls horizontally across the frame. (default: flash)
sizenumbernoFont size in pixels (drives the Text TOP's fontsizex / fontsizey). (default: 120)
colorstringnoText colour as a hex string ('#ffffff' = white). Sets the Text TOP's fontcolorr/g/b. (default: #ffffff)
rate_hznumbernoAnimation rate in cycles per second (Hz) — the LFO frequency. Free-running for v1; bind it to a beat CHOP to fire on the actual beat. (default: 2)
input_pathstringnoOptional absolute path of a source TOP to lay the text OVER. Pulled in via a Select TOP (TD wires don't cross containers) and composited under the text. If omitted, the text animates on a transparent frame.
expose_controlsbooleannoWhen true (default), expose live Text / Size / Color / Rate controls bound to the right node parameters. (default: true)
parent_pathstringnoParent network where the kinetic-text container is created (default '/project1'). (default: /project1)

create_waveform mutates

Build a time-domain audio waveform / oscilloscope — the actual audio signal scrolling left-to-right as a moving trace (the time-domain companion to create_spectrum's frequency bins and detect_onsets' transients). A Trail CHOP keeps a rolling buffer of recent samples (time_window seconds), a CHOP-to-SOP turns those samples into a real scope LINE (x=time, y=amplitude) rendered by a Geometry COMP through an orthographic Camera + Render TOP, and a Constant TOP tints the trace to the chosen colour. Unlike create_audio_reactive (which renders a spectrum), this shows the raw waveform. Source can be the live device (mic/line — may prompt for macOS permission), an audio file, a synthetic oscillator (for testing), or an existing CHOP. Output is a Null TOP. Scale is the vertical amplitude zoom; TimeWindow is the horizontal time span.

ParameterTypeRequiredDescription
sourcedevice | file | oscillator | existing_chopnoAudio source. 'device' = live microphone/line in (the real-world default; creating it may pop a one-time macOS microphone-permission dialog — click Allow). 'file' = an audio file. 'oscillator' = a synthetic tone, handy for testing the scope without any device permission. 'existing_chop' = reuse a CHOP you already have. (default: device)
audio_file_pathstringnoAudio file path (source='file').
existing_chop_pathstringnoPath of an existing audio CHOP to scope (source='existing_chop').
colorstringnoWaveform colour as a hex string ('#00ff88' = classic phosphor green). Tints the rendered scope line via a Constant TOP multiplied over the Render TOP image. (default: #00ff88)
scalenumbernoAmplitude gain on the signal before it is drawn — the vertical zoom of the trace. Drives a Math CHOP's gain (1 = raw signal). (default: 1)
time_windownumbernoHow much recent history the scrolling trace holds, in seconds — the horizontal time span. Drives the Trail CHOP's Window Length (wlength, units = seconds). (default: 1)
expose_controlsbooleannoExpose live Color / Scale / TimeWindow controls bound to the right node parameters. (default: true)
parent_pathstringnoParent COMP path the self-contained 'waveform' container is created inside. (default: /project1)

detect_pitch mutates

EXPERIMENTAL monophonic pitch tracker. Estimates the dominant musical pitch of live audio and exposes pitch_hz (frequency in Hz), note (MIDI note number), and confidence (peak magnitude) on a Null CHOP — bind a colour/parameter to op('…/pitch/pitch')['pitch_hz'] to drive visuals from a melody. Built entirely from stock CHOPs (the Pitch CHOP isn't createable in this build): an Audio Spectrum CHOP in 1-sample-per-Hz mode, trimmed to a [min_hz, max_hz] search band, then an Analyze CHOP argmax (highestpeakindex) whose index IS the frequency. A Threshold knob mutes the pitch when nothing is clearly playing and a Sensitivity knob scales the magnitude. Source can be the live device (mic/line — may prompt for macOS permission), an audio file, a synthetic sine oscillator (for testing), or an existing CHOP. Caveats: ~1 Hz resolution, no harmonic/octave correction, monophonic only — approximate and best tuned live.

ParameterTypeRequiredDescription
sourcedevice | file | oscillator | existing_chopnoAudio source. 'device' = live microphone/line in (the real-world default; creating it may pop a one-time macOS microphone-permission dialog — click Allow). 'file' = an audio file. 'oscillator' = a synthetic tone (a SINE wave at a fixed frequency → a clean single peak, the ideal device-free test for pitch tracking). 'existing_chop' = reuse a CHOP you already have. (default: device)
audio_file_pathstringnoAudio file path (source='file').
existing_chop_pathstringnoPath of an existing audio CHOP to analyze (source='existing_chop').
min_hznumbernoBottom of the frequency search range (Hz). The dominant-bin search ignores everything below this, so sub-bass rumble / DC offset can't masquerade as the pitch. 80 Hz ≈ low male voice / bass guitar E. (default: 80)
max_hznumbernoTop of the frequency search range (Hz). The search ignores everything above this. 2000 Hz comfortably covers the fundamental of most melodic instruments and voice; raise it for piccolo/whistle, lower it to reject high harmonics. (default: 2000)
expose_controlsbooleannoExpose live 'Sensitivity' (magnitude gain) and 'Threshold' (minimum peak magnitude below which the pitch is treated as silence) knobs. (default: true)
parent_pathstringnoParent COMP path the self-contained 'pitch' container is created inside. (default: /project1)

create_3d_audio_reactive mutates

Build a 3D scene that reacts to sound — the 3D counterpart of create_audio_reactive (use that for a 2D spectrum visual instead). Creates a new baseCOMP under parent_path. An FFT spectrum chain feeds geometry: 'instanced_bars' renders a row of bands boxes/spheres whose individual heights track each frequency bin (a 3D spectrum bar-graph), while 'bass_pulse' swells a single primitive with the low-frequency energy. Includes a Camera, Light, and Render TOP, output as a Null TOP. Exposes Sensitivity (audio gain), Zoom (camera distance), and Spin (whole-scene rotation) knobs. Source can be the live device (mic/line — may prompt for macOS permission), an audio file, a synthetic oscillator (for testing), or an existing CHOP. Returns a summary plus a JSON block with the container path, created node paths, the spectrum/geometry/camera/render/output paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourcedevice | file | oscillator | existing_chopnoAudio source. 'device' = live microphone/line in (the real-world default; creating it may pop a one-time macOS microphone-permission dialog — click Allow). 'file' = an audio file. 'oscillator' = a synthetic tone (white noise → energy in every band, handy for testing without any device permission). 'existing_chop' = reuse a CHOP you already have. (default: device)
audio_file_pathstringnoPath to an audio file to play; used only when source='file'.
existing_chop_pathstringnoPath of an existing audio CHOP to analyze; used only when source='existing_chop'.
modeinstanced_bars | bass_pulseno'instanced_bars' = a row of bands boxes/spheres, each one's height driven by one frequency bin (a 3D spectrum bar-graph). 'bass_pulse' = a single primitive that swells with the low-frequency energy (the guaranteed-visible fallback). (default: instanced_bars)
bandsintegernoNumber of bars in 'instanced_bars' mode — one per frequency bin. (default: 16)
primitivebox | spherenoGeometry rendered for each bar / the pulsing object. (default: box)
spinnumbernoWhole-scene rotation around Y in degrees/sec (0 = still). Spins the entire bar row / object over time. (default: 0)
expose_controlsbooleannoWhen true (default), expose live Sensitivity (audio gain), Zoom (camera distance), and Spin knobs. (default: true)
parent_pathstringnoParent network where the scene container is created (default '/project1'). (default: /project1)

create_dome_output mutates

Remap a source TOP (treated as an equirectangular / panoramic master) into a square single-output dome master for planetarium fulldomes / 360 — the curved complement to create_multi_output's flat tiling. A Select TOP pulls the master in, a GLSL TOP warps it (fisheye: equirect → centred dome disc using fov; equirectangular: near-passthrough identity remap) via a shader held in a Text DAT, ending on a Null ready for setup_output. Creates a new baseCOMP under parent_path holding the Select TOP, GLSL remap, and Null output. With expose_controls a Rotation knob spins the dome horizon. Note: this GLSL-remaps an existing flat source — use create_cubemap_dome instead for a true cube-map render (higher fidelity, no equirect pole-pinch/seam). Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings (including the cubemap-follow-up note), and an inline preview image.

ParameterTypeRequiredDescription
source_pathstringyesThe master TOP to remap, treated as an equirectangular / panoramic source (the full 360°×180° latlong image the dome warps from).
projectionfisheye | equirectangularnofisheye: warp the equirectangular source into a centred dome disc (planetarium fulldome master). equirectangular: near-passthrough identity remap, so an already-equirect source still yields a valid output. (default: fisheye)
resolution1024 | 2048 | 4096noSquare dome-master resolution (width = height). (default: 2048)
fovnumbernoFisheye coverage in degrees (the angular diameter the disc spans). 180 = full hemisphere (standard fulldome); larger over-fills, smaller zooms in. Used by the fisheye shader. (default: 180)
expose_controlsbooleannoWhen true (default), expose a Rotation knob bound to the shader uniform that spins the dome horizon (degrees). (default: true)
parent_pathstringnoParent network where the dome-output container is created (default '/project1'). (default: /project1)

create_mesh_warp mutates

Map a source TOP onto a curved or irregular surface via a deformable textured grid — the curved-surface upgrade to create_projection_mapping's flat corner-pin, for domes, columns, and sculptures. Builds a Geometry COMP holding a grid that is bent into a dome (bulge), ripples (wave), half-cylinder (cylinder), or left flat, textured with the source through a Constant MAT, and rendered through an orthographic Camera + Light + Render TOP. Creates a new baseCOMP under parent_path holding all of these; output is a Null ready for setup_output; exposes a Zoom knob. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
source_pathstringyesPath of the TOP to map onto the surface (brought in through a Select TOP).
rowsintegernoGrid rows — more rows give a smoother curve but a heavier mesh. (default: 20)
colsintegernoGrid columns — more columns give a smoother curve but a heavier mesh. (default: 20)
warpbulge | wave | cylinder | flatnoSurface shape: bulge (dome), wave (ripples across X), cylinder (half-cylinder wrap), or flat (no deform). (default: bulge)
amountnumbernoDeformation strength (0 = flat, 1 = full bend). Ignored when warp is 'flat'. (default: 0.3)
expose_controlsbooleannoWhen true (default), expose a live Zoom (camera distance) knob. (default: true)
parent_pathstringnoParent network where the mesh-warp container is created (default '/project1'). (default: /project1)

create_depth_displacement mutates

Push a flat plane into real 3D relief by a depth/luminance map: a subdivided grid whose vertices are offset along Z by a GLSL displacement material sampling the source's brightness, rendered with a camera + light so it reads as depth that shifts with the view. Unlike create_depth_silhouette (a flat 2D mask), this is true geometry — a 2.5D landscape. Source can be the live camera (may prompt for macOS permission), a movie file, an animated synthetic pattern (testable without a camera), or an existing TOP (e.g. a real depth map). subdivisions sets the relief resolution, depth the push amount, invert flips bright↔near. Creates a new baseCOMP under parent_path holding the source, height map, Geometry COMP + GLSL displacement MAT, Camera, Light, Render TOP, and a Null output. Exposes Depth and Zoom knobs — bind Depth to a tempo ramp or an audio feature to make the surface heave. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourcecamera | file | synthetic | existing_topnoDepth/luminance source that drives the relief. 'camera' = live webcam/capture device (creating it may pop a one-time macOS camera-permission dialog — click Allow). 'file' = a movie file. 'synthetic' = an animated noise pattern, so the relief moves and the chain is testable without any device permission (the default). 'existing_top' = displace by a TOP you already have (e.g. a real depth map). (default: synthetic)
movie_file_pathstringnoPath to a movie file to play as the source; used only when source='file'.
existing_top_pathstringnoPath of an existing TOP to sample as the height map; used only when source='existing_top'.
subdivisionsintegernoGrid resolution (rows = cols). Higher = finer relief and smoother displacement, but more vertices to push. 100 gives a 100×100 plane. (default: 100)
depthnumbernoDisplacement amount along Z: how far bright (or dark, if inverted) pixels push the surface out of the plane. 0 = flat. (default: 1)
invertbooleannoFlip the height mapping. false = bright pixels push toward the camera (bright = near); true = dark pixels push toward the camera (dark = near). (default: false)
expose_controlsbooleannoWhen true (default), expose live Depth (displacement amount) and Zoom (camera distance) knobs. (default: true)
parent_pathstringnoParent network where the displacement container is created (default '/project1'). (default: /project1)

create_gpu_particle_field mutates

Build a high-count GPU particle / point field: position and velocity are simulated entirely on the GPU in two RGBA32float feedback-TOP loops (velocity integrates forces — noise/curl/gravity; position integrates velocity), then a Geometry COMP instances a tiny dot once per texel, reading XYZ from the position texture. Creates a new baseCOMP under parent_path holding the velocity/position feedback loops, the instanced Geometry COMP, Camera, Light, and Render TOP ending in a Null output. Reaches counts (side², up to 512²≈262k) well beyond the CPU create_particle_system (use that for a simpler, lower-count CPU emitter). This is the general-purpose GPU drift field (noise/curl/gravity); pick a sibling instead for other motion: create_particle_flock for boids separation/alignment/cohesion, image_to_particles when particles should spring to the pixels of an image/video, create_pop_particle_system for TouchDesigner's native POP particle network. Exposes PointSize and Zoom knobs. Optional reactivity energises the field live: 'audio' drives it from mic/line RMS, 'motion' from camera frame-difference energy (both bound to the velocity shader's uReact uniform). Returns a summary plus a JSON block with the container path, created node paths, the particle count, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sideintegernoEdge of the square particle buffer; the field is side×side particles (count = side², e.g. 256 → 65 536). Each particle is one texel of the RGBA32float position/velocity buffers. (default: 256)
forcesnoise | gravity | curl[]noIn-shader forces added to velocity each frame: 'noise' (per-particle random drift), 'gravity' (constant -Y pull), 'curl' (divergence-free swirling). (default: noise)
reactivitynone | audio | motionnoOptional external push that energises the field live, bound to the velocity shader's uReact uniform. 'none' (default) is fully self-contained. 'audio' drives it from mic/line RMS (Audio Device In → Analyze), 'motion' from camera frame-difference energy (Video Device In → mono → cache/difference → average). Either may pop a one-time macOS device-permission dialog — click Allow. (default: none)
point_sizenumbernoRadius of each instanced dot (the sphere/circle SOP scale). (default: 0.02)
expose_controlsbooleannoWhen true (default), expose live PointSize and Zoom (camera distance) knobs on the system container. (default: true)
parent_pathstringnoParent network where the particle-field container is created (default '/project1'). (default: /project1)

create_raymarch_scene mutates

Instantiate a self-contained GLSL TOP raymarcher (volumetric / signed-distance-field) — the 3D complement to create_shader_lib. Scenes: sphere_field (repeated spheres), menger (Menger-sponge fractal), tunnel (twisting tunnel). Exposes live CameraZ / Speed / StepCount / Intensity / ColorA / ColorB controls and previews the output TOP.

ParameterTypeRequiredDescription
scenesphere_field | menger | tunnelnoWhich SDF scene to ray-march: sphere_field, menger (sponge fractal), or tunnel. (default: sphere_field)
camera_znumbernoCamera distance back from the origin (uCameraZ). Exposed as a live 'CameraZ' control. (default: 4)
speednumbernoAnimation speed multiplier (drives uTime). Exposed as a live 'Speed' control. (default: 1)
step_countintegernoRaymarch iterations (uSteps); higher = more detail/cost. Exposed as 'StepCount'. (default: 64)
intensitynumbernoOutput brightness multiplier (uIntensity). Exposed as a live 'Intensity' control. (default: 1)
color_astringnoNear/primary colour as hex (e.g. '#33ccff'); parsed to 0..1 RGB, exposed as 'ColorA'.
color_bstringnoFar/secondary colour as hex (e.g. '#ff2266'); parsed to 0..1 RGB, exposed as 'ColorB'.
resolutionobject[]noOutput resolution [width, height] of the GLSL TOP. (default: 1280,720)
expose_controlsbooleannoExpose live CameraZ / Speed / StepCount / Intensity / ColorA / ColorB controls. (default: true)
parent_pathstringnoParent COMP path the self-contained 'raymarch_scene_<scene>' container is created inside. (default: /project1)

create_raytk_scene mutates

Build the minimal renderable RayTK node graph (sphereSdf → raymarchRender3D → Null TOP) from RayTK's real ROP COMP masters, copied at runtime — the node-graph-native complement to create_raymarch_scene (which stays the lightweight, no-dependency GLSL path). Optional flags union a second SDF, insert an inline basicMat, and add an explicit lookAtCamera / pointLight. Requires the RayTK toolkit staged + loaded (manage_packages install raytk, then load the .tox); RayTK 0.46 requires TouchDesigner 2025.30770+. Fails forward with 'stage & load RayTK first' guidance when the library is absent.

ParameterTypeRequiredDescription
sdf_primitivesphereSdf | boxSdf | boxFrameSdf | torusSdfnoPrimary RayTK SDF primitive ROP to raymarch. One of sphereSdf, boxSdf, boxFrameSdf, torusSdf. These are RayTK 'sdf'-category COMP masters copied from the loaded library — not native TouchDesigner operators. (default: sphereSdf)
union_withsphereSdf | boxSdf | boxFrameSdf | torusSdfnoOptional second SDF primitive to combine with sdf_primitive via a RayTK simpleUnion (combine category). Omit for a single primitive. Example: sdf_primitive=sphereSdf + union_with=boxSdf yields a merged blob.
materialbooleannoInsert a RayTK basicMat (material category) inline between the SDF/union chain and the renderer, so the surface gets a base color/shading instead of the renderer default. (default: false)
add_camerabooleannoAdd a RayTK lookAtCamera (camera category) wired into the renderer's Camera input (connector index 1, 0-based). Default false uses the renderer's built-in camera — leave false for the minimal scene. (default: false)
add_lightbooleannoAdd a RayTK pointLight (light category) wired into the renderer's Light input (connector index 2, 0-based). Default false uses the renderer's built-in light — leave false for the minimal scene. (default: false)
namestringnoName of the container COMP created for the scene. Defaults to 'raytk_scene_<sdf_primitive>'.
parent_pathstringnoParent COMP path the RayTK scene container is created inside. (default: /project1)

create_raytk_sdf_graph mutates

Build a RayTK SDF graph from copied RayTK ROP masters: primary SDF, optional secondary SDF through simpleUnion, optional basicMat, lookAtCamera, pointLight, raymarchRender3D, and a native Null TOP output. Requires RayTK to be staged with manage_packages install raytk and loaded from the staged .tox.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path where the RayTK SDF graph container is created. (default: /project1)
namestringnoName of the container COMP created for the graph. (default: raytk_sdf_graph)
primarysphereSdf | boxSdf | boxFrameSdf | torusSdfnoPrimary RayTK SDF primitive ROP copied from the loaded RayTK library. (default: sphereSdf)
secondarysphereSdf | boxSdf | boxFrameSdf | torusSdfnoOptional second RayTK SDF primitive, combined with primary by simpleUnion.
operationnone | simpleUnionnoCombination operation. A provided secondary upgrades none to simpleUnion. (default: none)
materialbooleannoInsert a RayTK basicMat between the SDF chain and renderer. (default: true)
camerabooleannoAdd a RayTK lookAtCamera wired to renderer input 1. (default: true)
lightbooleannoAdd a RayTK pointLight wired to renderer input 2. (default: true)
render_resolutionobject[]noRayTK renderer resolution [width, height]. Defaults to 1280x720 to avoid TouchDesigner Non-Commercial render-size warnings. (default: 1280,720)
output_namestringnoName of the native Null TOP receiving the renderer output. (default: out1)

create_iphone_depth_source mutates

Create a deterministic TouchDesigner scaffold for iPhone depth senders such as TDLidar, Record3D, or a generic NDI/OSC source. Builds live/video receiver TOPs, color_out, depth_preview, OSC sensor input, sensors_out, setup hints, and an optional point-cloud placeholder. This is a scaffold and returns warnings where sender-specific metric depth decoding must be validated live.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to create the scaffold in. (default: /project1)
namestringnoName for the generated base COMP. (default: iphone_depth_source)
sourcetdlidar | record3d | generic_ndi_oscnoiPhone depth sender profile to document in setup hints. (default: tdlidar)
video_modendi | syphon_spout | movie_filenoTransport for the color/depth video stream. (default: ndi)
video_source_namestringnoNDI source name or Syphon/Spout sender name when using a live video transport.
movie_filestringnoMovie file path used when video_mode is movie_file.
osc_portintegernoUDP port for OSC sensor data from the iPhone app. (default: 9002)
sensor_prefixstringnoOSC address prefix used to select phone sensor channels. (default: /iphone)
create_pointcloud_stubbooleannoCreate a textDAT placeholder for app-specific point-cloud reconstruction notes. (default: true)
activebooleannoStart the live/video receiver immediately where the operator supports it. (default: false)

create_sam2_segmentation_bridge mutates

Build a TouchDesigner bridge surface for an external SAM2/FastSAM segmentation service. Creates source input, mask receiver, mask_out, matte_out, preview_out, and clear notes that no model is bundled.

ParameterTypeRequiredDescription
parent_pathstringnoCOMP that will receive the SAM2/FastSAM bridge container. (default: /project1)
namestringnoContainer name for the bridge under parent_path. (default: sam2_segmentation_bridge)
input_top_pathstringnoOptional source TOP path. When provided it is pulled into the container via a Select TOP.
bridge_modecomfyui | websocket | ndi_mask | syphon_spout_mask | file_watchnoExternal mask transport used by the SAM2/FastSAM service. (default: comfyui)
server_urlstringnoExternal SAM2/FastSAM service URL or WebSocket endpoint. (default: http://127.0.0.1:8188)
mask_source_namestringnoNDI/Syphon/Spout sender name that publishes the segmentation mask.
watch_folderstringnoFolder used by file_watch mode for externally rendered mask images.
prompt_modeauto | point | box | textnoPrompt style expected by the external SAM2/FastSAM service. (default: auto)
activebooleannoStart request/polling endpoints active. Default is off for artist validation. (default: false)

create_yolo_onnx_tracker mutates

Build a deterministic TouchDesigner scaffold for YOLO-style object tracking. Creates source input, backend receiver placeholder, detections DAT, stable tracks_out CHOP channels, annotated_out TOP, and setup notes. Live detection requires an external detector or validated TouchDesigner Python ONNX runtime.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP that will receive the YOLO/ONNX tracker container. (default: /project1)
namestringnoContainer name for the tracker scaffold under parent_path. (default: yolo_onnx_tracker)
input_top_pathstringnoOptional source TOP path pulled into the container through a Select TOP.
backendexternal_websocket | onnx_script | ndi_detections | file_watchnoDetection transport or runtime scaffold to build. (default: external_websocket)
server_urlstringnoExternal WebSocket detector URL used by external_websocket mode. (default: ws://127.0.0.1:8766)
model_pathstringnoONNX model path documented by onnx_script mode.
class_filterstring[]noOptional class names the external detector or ONNX postprocess should keep. (default: ``)
max_objectsintegernoMaximum tracked object slots exposed as stable CHOP channels. (default: 16)
confidence_thresholdnumbernoMinimum detection confidence expected from the detector or postprocess. (default: 0.35)
activebooleannoStart live receiver operators active. Default is off until validation. (default: false)

create_nuitrack_body_bus mutates

Create a TouchDesigner scaffold for Nuitrack skeleton data over OSC, WebSocket, TCP JSON, or sample mode. Produces a stable body_bus CHOP contract and setup notes; live SDK/device calibration must be validated separately.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP where the Nuitrack body-bus container is created. (default: /project1)
namestringnoName of the generated baseCOMP. (default: nuitrack_body_bus)
sourceosc | websocket | tcp_json | samplenoTransport for Nuitrack skeleton data. (default: osc)
listen_portintegernoLocal port for OSC/TCP skeleton input. (default: 7007)
server_urlstringnoWebSocket URL when source is websocket. (default: ws://127.0.0.1:8767)
joint_setupper_body | full_body | handsnoJoint subset to expose as normalized body channels. (default: full_body)
max_bodiesintegernoMaximum tracked bodies exposed in the output CHOP contract. (default: 2)
channel_prefixstringnoPrefix for output CHOP channels, e.g. body0_head_x. (default: body)
activebooleannoStart the transport active where supported. (default: false)

create_orbbec_depth_silhouette mutates

Create an Orbbec/Kinect-compatible depth silhouette scaffold with synthetic/file fallbacks, stable silhouette_out and depth_preview TOPs, and explicit hardware/SDK validation warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Orbbec silhouette. (default: /project1)
namestringnoGenerated baseCOMP name. (default: orbbec_depth_silhouette)
sourceorbbec_top | kinect_azure_orbbec | file | syntheticnoDepth source path. Synthetic is the offline-safe default. (default: synthetic)
source_top_pathstringnoExisting TOP path to select instead of creating a device/file source.
movie_filestringnoMovie/depth file for source=file.
near_thresholdnumbernoNear depth cutoff. (default: 0.2)
far_thresholdnumbernoFar depth cutoff. (default: 0.8)
smoothnumbernoBlur size for mask smoothing. (default: 1.5)
invertbooleannoInvert the silhouette mask. (default: false)
activebooleannoStart device/file source active where supported. (default: false)

raytk_expr_graph_builder mutates

Build an editable RayTK ROP expression graph from a preset or explicit nodes/edges: copy RayTK masters live via pathsByOpType/category search, wire typed connectors, apply simple parameter values, lay out copied nodes deterministically, and expose the selected output through out1. Complements create_raytk_scene (minimal scene) and create_raytk_op (single ROP). Requires RayTK staged and loaded; offline tests validate payload/registration only, while live render/cook proof remains explicit.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path to build inside. (default: /project1)
namestringnoName for the generated graph container. (default: raytk_expr_graph)
presetsphere_union_box | torus_frame_union | material_study | customnoStarter graph to build when nodes are omitted. Use custom with explicit nodes/edges. (default: sphere_union_box)
nodesobject[]noCustom RayTK ROP graph nodes. Leave empty to use the selected preset. (default: ``)
edgesobject[]noCustom graph edges. Preset edges are used when nodes are omitted. (default: ``)
output_node_idstringnoNode id to expose through out1. Defaults to the renderer added or inferred by the tool.
add_rendererbooleannoAppend raymarchRender3D when the graph has no output ROP. (default: true)
add_camerabooleannoAppend lookAtCamera and wire it into renderer input 1 when a renderer exists. (default: true)
add_lightbooleannoAppend pointLight and wire it into renderer input 2 when a renderer exists. (default: true)
add_materialbooleannoAppend basicMat between the SDF/combine tail and renderer when absent. (default: true)
library_pathstringnoOptional explicit path to the loaded RayTK library COMP. Omit to probe pathsByOpType and known namespaces live.
capture_preview_imagebooleannoCapture an inline preview from out1. RayTK shader compile may still be asynchronous. (default: true)

detect_tempo mutates

EXPERIMENTAL automatic tempo (BPM) detection WITHOUT manual tapping. Detects beat onsets in live audio (kick band → RMS energy → moving-baseline threshold, reusing detect_onsets' primitive), measures the time between beats, and reduces the recent inter-onset intervals to a stable tempo (median → BPM = 60/interval) exposed as a bpm channel on a Null CHOP — bind a parameter to op('…/detect_tempo/bpm')['bpm']. Complements sync_external_clock (which is tap-tempo) and detect_onsets (which flags hits but derives no tempo). With drive_tempo on, it writes the detected BPM to the global tempo (op('/').time.tempo) so every Beat CHOP — create_tempo_sync, create_autopilot — follows the music automatically. Source defaults to a synthetic gated tone (device capture can hang TD on a macOS permission modal); also accepts a file, an existing CHOP, or the live device. Caveats: time-dependent (reads 0 on a paused timeline), can lock to half/double time, and must be tuned live per source (Threshold + Smoothing knobs).

ParameterTypeRequiredDescription
sourcedevice | file | synthetic | existingnoAudio source. Defaults to 'synthetic' (an internal gated tone at a known rate) because live device capture can hang TouchDesigner on a one-time macOS microphone-permission modal — same default rationale as extract_audio_features / detect_pitch. 'device' = live microphone/line in (creating it may pop that permission dialog — click Allow). 'file' = an audio file. 'existing' = reuse a CHOP you already have. (default: synthetic)
filestringnoAudio file path (source='file').
audio_instringnoPath of an existing audio CHOP to analyze (source='existing').
sensitivitynumbernoOnset-detection sensitivity 0..1. Higher = lower threshold = more beats registered (and a faster, twitchier lock); lower = only strong transients count. It maps to the excess-over-baseline threshold the kick band must clear (band-RMS magnitudes are tiny, so the usable window is small — tune live per source). (default: 0.5)
min_bpmnumbernoLower clamp on the reported tempo. Also rejects implausibly long gaps between beats (an interval longer than 60/min_bpm seconds is ignored, so a missed beat can't halve the tempo). (default: 60)
max_bpmnumbernoUpper clamp on the reported tempo. Also rejects too-short intervals (a double-trigger shorter than 60/max_bpm seconds is ignored, so a stray transient can't double the tempo). (default: 200)
drive_tempobooleannoWhen true, the engine also writes the detected BPM to the project's global tempo (op('/').time.tempo), so every Beat CHOP downstream — create_tempo_sync, create_autopilot — follows the detected beat automatically (same write as sync_external_clock). (default: false)
expose_controlsbooleannoExpose live 'Threshold' (onset sensitivity — lower fires on more beats) and 'Smoothing' (how many recent intervals the median locks over — higher = steadier, slower to react) knobs. (default: true)
namestringnoName for the generated system container. (default: detect_tempo)
parent_pathstringnoParent COMP path the generated system container (see name) is created inside. (default: /project1)

create_pbr_scene mutates

Build a physically-based 3D scene: a Geometry COMP holding the chosen primitive (sphere/torus/box) shaded by a PBR MAT (base colour, metallic, roughness), lit by an Environment Light for image-based lighting (fed a Constant TOP of env_color so it works with no HDRI file) plus a key Light, framed by a Camera and rendered to a Null. Creates a new baseCOMP under parent_path holding the Environment Light + envmap Constant TOP, the PBR MAT, a Geometry COMP, a key Light, a Camera, a Render TOP, and a Null output. Use create_3d_scene instead for basic (non-PBR) shading or GPU instancing. Exposes Metallic, Roughness, BaseColor and Spin controls; set rotate to turn the object so its reflections move. Returns a summary plus a JSON block with the container path, created node paths, the material/lights/geometry/camera/render/output paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
shapesphere | torus | boxnoGeometry to render with the PBR material. (default: sphere)
metallicnumbernoPBR metalness: 0 = dielectric (plastic/clay), 1 = metal. Bound to the Metallic knob. (default: 0.9)
roughnessnumbernoPBR roughness: 0 = mirror-sharp reflections, 1 = fully diffuse/matte. Bound to the Roughness knob. (default: 0.3)
base_colorobject[]noPBR base/albedo colour as [r,g,b] in 0..1 (light gray by default). Also seeds the BaseColor swatch. (default: 0.8,0.8,0.85)
env_colorobject[]noColour of the environment light used for image-based lighting, as [r,g,b] in 0..1 (soft white). With no HDRI this drives a Constant TOP fed into the Environment Light. (default: 0.9,0.95,1)
rotatenumbernoContinuous spin of the whole object around Y in degrees/sec (0 = still). Shows off the PBR reflections as the surface turns. (default: 0)
expose_controlsbooleannoWhen true (default), expose live Metallic, Roughness, BaseColor and Spin controls. (default: true)
parent_pathstringnoParent network where the PBR-scene container is created (default '/project1'). (default: /project1)

create_particle_flock mutates

Build a boids-style GPU particle flock: position and velocity are simulated entirely on the GPU in two RGBA32float feedback-TOP loops, where the velocity shader implements the three classic boids rules — separation, alignment, cohesion — by scanning a stencil of neighbouring texels in the agent texture (each texel is one agent), then renormalising toward a cruise speed. Positions drive TOP-instancing of a tiny dot once per agent. Creates a new baseCOMP under parent_path holding the velocity/position feedback loops, the instanced Geometry COMP, Camera, Light, and Render TOP ending in a Null output. The behavioural complement to create_gpu_particle_field (use that instead for curl-noise/gravity drift rather than flocking); also pick a sibling for other motion: image_to_particles to spring particles onto the pixels of an image/video, create_pop_particle_system for TouchDesigner's native POP particle network, create_particle_system for a simple CPU emitter. Exposes live Separation / Alignment / Cohesion / Speed knobs. Note: the flock only evolves while the TD timeline plays. Returns a summary plus a JSON block with the container path, created node paths, the agent count, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
countintegernoEdge of the square agent buffer; the flock is count×count agents (agents = count², e.g. 64 → 4096). Each agent is one texel of the RGBA32float position/velocity buffers. Capped at 256 (65 536 agents) because the per-agent neighbour scan cost grows with the texture. (default: 64)
separationnumbernoBoids separation weight: steer away from close neighbours (collision avoidance). (default: 1)
alignmentnumbernoBoids alignment weight: steer toward the average heading of nearby neighbours. (default: 1)
cohesionnumbernoBoids cohesion weight: steer toward the centroid (average position) of neighbours. (default: 1)
speednumbernoCruise speed the velocity is renormalised toward each frame, so the school flies at a stable pace. (default: 1)
colorobject[]noRGB colour (0..1) of the instanced dots — the colour of the school. (default: 0.4,0.8,1)
point_sizenumbernoRadius of each instanced dot (the sphere SOP scale). (default: 0.02)
expose_controlsbooleannoWhen true (default), expose live Separation / Alignment / Cohesion / Speed knobs on the system container. (default: true)
parent_pathstringnoParent network where the flock container is created (default '/project1'). (default: /project1)

create_point_cloud mutates

Render a point cloud from a depth/luminance map (or a synthetic source): scatter a resolution×resolution grid of points and push each point's XYZ from the texture — X/Y from its grid position, Z from the map's brightness × depth_scale. Unlike create_depth_displacement (a continuous shaded mesh), this is a cloud of discrete dots. A GLSL TOP packs each point's position into one RGBA32float buffer, then a Geometry COMP TOP-instances a tiny sphere once per texel (reaching resolution², up to 512²≈262k points). Creates a new baseCOMP under parent_path holding the source, a monochrome heightmap, a GLSL position-pack buffer, the instanced Geometry COMP, Camera, Light, and Render TOP ending in a Null output. Source can be an animated synthetic pattern (testable without any device, the default), a movie file, the live camera (may prompt for macOS permission), or an existing TOP (e.g. a real depth map). Use create_depth_displacement instead for a continuous shaded mesh rather than discrete dots. Exposes DepthScale, PointSize, and Spin knobs — bind DepthScale to a tempo ramp or an audio feature to make the cloud heave. Returns a summary plus a JSON block with the container path, created node paths, the effective and requested source, the point count, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourcesynthetic | file | camera | existingnoTexture whose brightness drives each point's depth (Z). 'synthetic' = an animated Noise pattern, so the cloud moves and the chain is testable without any device permission (the default). 'file' = a movie file. 'camera' = live webcam/capture device (creating it may pop a one-time macOS camera-permission dialog — click Allow). 'existing' = sample a TOP you already have (e.g. a real depth map). (default: synthetic)
filestringnoPath to a movie file to play as the source; used only when source='file'.
existingstringnoPath of an existing TOP to sample as the depth map; used only when source='existing' (falls back to synthetic noise with a warning if missing).
resolutionintegernoGrid side: the cloud is resolution×resolution points (count = resolution², e.g. 128 → 16 384). One point per texel of the position buffer. Capped at 512 (262 144 points) to stay GPU-sane. (default: 128)
depth_scalenumbernoHow far bright pixels push each point along +Z. 0 = a flat sheet; higher = a deeper relief. (default: 1)
point_sizenumbernoRadius of each dot (the source sphere SOP scale). TOP-instancing applies translate only, so per-point size lives on the sphere, not on instance scale. (default: 0.02)
rotatenumbernoWhole-cloud spin around Y in degrees/sec (0 = still). (default: 0)
expose_controlsbooleannoWhen true (default), expose live DepthScale, PointSize, and Spin knobs on the system container. (default: true)
parent_pathstringnoParent network where the point-cloud container is created (default '/project1'). (default: /project1)

create_generative_audio mutates

SYNTHESIZE audio — generate sound rather than react to it. Builds an audio synthesis chain ending on a Null CHOP carrying the signal: 'oscillator' (a single tone, choose sine/triangle/sawtooth/square + frequency), 'fm' (two oscillators, one frequency-modulating the other for metallic/bell timbres), or 'noise' (a Noise CHOP shaped by a low-pass filter for textures). A Volume gain sets the level. Playback is opt-in: set to_device=true to route it to an Audio Device Out CHOP (default off, so the build stays silent and never prompts for audio hardware). Creates a new baseCOMP under parent_path holding the synth chain. The output Null feeds create_spectrum/create_waveform, bind_to_channel, or the speakers. Audio CHOPs are time-dependent — the signal is silent while the TD timeline is paused. Returns a summary plus a JSON block with the container path, created node paths, the audio Null path, the synth settings, the device-out path (if any), any node errors, and warnings (no preview image — the output is a CHOP, not a TOP).

ParameterTypeRequiredDescription
synthoscillator | fm | noisenoSynthesis method. 'oscillator' = a single tone-generating Audio Oscillator CHOP. 'fm' = two oscillators where one modulates the other's frequency (classic FM, metallic/bell timbres). 'noise' = a Noise CHOP shaped by a low-pass Audio Filter (wind/hiss/percussive textures). (default: oscillator)
frequencynumbernoCarrier / oscillator base frequency in Hz (e.g. 220 = A3). (default: 220)
waveformsine | triangle | sawtooth | squarenoOscillator wave shape (ignored for the 'noise' synth). (default: sine)
fm_rationumberno(fm) Modulator frequency as a multiple of the carrier (modulator = frequency × ratio). (default: 2)
fm_depthnumberno(fm) Modulation depth — the peak frequency deviation in Hz applied to the carrier. (default: 100)
volumenumbernoOutput level, 0..1 (a gain on the final signal). Start moderate to protect ears/speakers. (default: 0.5)
to_devicebooleannoPlay the synthesized audio out through an Audio Device Out CHOP. Default OFF (opt-in) so the build never opens audio hardware — keeping it silent-safe and avoiding the macOS audio-permission prompt. Turn on only when you actually want sound out the speakers. (default: false)
expose_controlsbooleannoWhen true (default), expose live Frequency / Volume knobs (and FmRatio / FmDepth for the fm synth). (default: true)
parent_pathstringnoParent network where the synth container is created (default '/project1'). (default: /project1)

create_cubemap_dome mutates

Render a true cube-map dome master — the higher-fidelity follow-up to create_dome_output (which only warps a flat equirectangular source). A 3D scene is rendered by a Render TOP in cube-map mode (rendermode 'cubemap', which outputs a real cube-map texture in one render — no separate Cube Map TOP), or an existing cube-map source is pulled in via a Select TOP; then a GLSL TOP samples that cube map by 3D direction (TD's built-in samplerCube sTDCubeInputs[0]) to produce a fisheye fulldome master or a full 360°×180° equirectangular image, ending on a Null ready for setup_output. Creates a new baseCOMP under parent_path (named by name) holding the cube-map source (or the test scene's Geometry/Camera/Light/Render TOP), GLSL remap, and Null output. Sampling a real cube map avoids the equirect pole-pinch/seam. With expose_controls, a live Fov knob sets fisheye coverage and a Rotation knob spins the dome horizon. Returns a summary plus a JSON block with the container path, created node paths, the cube-source/output paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
projectionfisheye | equirectangularnofisheye: sample the cube map into a centred dome disc (planetarium fulldome master). equirectangular: sweep the cube map into a full 360°×180° latlong image. (default: fisheye)
fovnumbernoFisheye coverage in degrees (the angular diameter the disc spans). 180 = full hemisphere (standard fulldome); larger over-fills, smaller zooms in. Exposed as a live Fov knob; ignored for equirectangular. (default: 180)
sourcestringnoOptional path to an existing TOP delivering a cube-map texture (e.g. a Render TOP in cube-map mode) to remap. When omitted, a simple test scene (sphere on a grid + camera + light) is rendered by a Render TOP in cube-map mode so the tool is self-contained.
resolution1024 | 2048 | 4096noSquare dome-master resolution (width = height). (default: 2048)
expose_controlsbooleannoExpose a live Fov knob (and a Rotation knob that spins the dome horizon). (default: true)
namestringnoBase name for the system container. (default: cubemap_dome)
parent_pathstringnoParent network where the dome container is created (default '/project1'). (default: /project1)

scaffold_genre mutates

Create a genre-flavored starting network under parent_path — beyond scaffold_show's blank skeleton. Picks a tempo, look, and palette per genre: 'techno' (fast ~130 BPM clock + a hard strobe-y feedback look + dark palette), 'ambient' (slow ~70 BPM + a soft blurred-feedback look + warm palette), or 'installation' (no clock + a slow generative noise look + muted palette). Each builds a 'master' output Null and a genre look already wired into it, and (when a tempo applies) writes the project's global tempo (op('/').time.tempo). Use scaffold_show instead for an empty skeleton with no look or palette. Returns the container path, the master/tempo/look node paths, the BPM written, and the palette. Then add scenes, a layer mixer into master, cues, and a control surface.

ParameterTypeRequiredDescription
genretechno | ambient | installationnoGenre preset selecting the tempo, look, and palette of the starting network. (default: techno)
bpmnumbernoOverride the preset BPM (written to the global tempo). For 'installation' (no clock by default), supplying a bpm adds a beat clock at that tempo.
namestringnoName of the show container (default: '<genre>_show').
parent_pathstringnoParent COMP path the show container is created inside. (default: /project1)

create_pose_tracking mutates

Set up full-body pose tracking — the foundation for body-reactive visuals (the camera/skeleton counterpart to extract_audio_features). Produces a canonical pose CHOP (33 MediaPipe landmarks as samples, channels tx/ty/tz/confidence) plus a 'keypoints' CHOP of ready-to-bind scalar channels (r_wrist_y, l_wrist_x, hips_x, hand_span, height, …). Source defaults to a self-contained SYNTHETIC animated pose so it builds and previews with no camera and no plugin; switch to 'mediapipe' (the free torinmb/mediapipe-touchdesigner plugin), 'osc', or an existing pose CHOP for the real performer. Smoothing and Mirror included. Feed the output into create_pose_skeleton or create_body_reactive.

ParameterTypeRequiredDescription
sourcesynthetic | mediapipe | osc | existing_chopnoWhere the 33-landmark pose stream comes from. 'synthetic' (default) = a self-contained animated human pose that needs NO camera and NO plugin — use it to build and preview the look instantly. 'mediapipe' = the live CHOP from the free torinmb/mediapipe-touchdesigner plugin (point mediapipe_chop_path at its pose landmarks CHOP). 'osc' = landmarks arriving over OSC (osc_port). 'existing_chop' = a pose CHOP you already built (e.g. the output of create_pose_tracking). (default: synthetic)
mediapipe_chop_pathstringnoPath to the MediaPipe plugin's pose-landmarks CHOP (source='mediapipe'). The plugin emits 33 samples with tx/ty/tz channels.
osc_portintegernoUDP port the OSC In CHOP listens on (source='osc'). (default: 7000)
existing_chop_pathstringnoPath of an existing pose CHOP — 33 samples, tx/ty/tz channels (source='existing_chop').
smoothingnumbernoTemporal smoothing (0..0.95): each landmark is blended with its previous frame so jittery tracking glides instead of snapping. 0 = raw/instant; higher = smoother but laggier. Exposed as a live knob. (default: 0.08)
mirrorbooleannoFlip the pose horizontally (negate tx) so a webcam feed reads like a mirror — the performer's right hand is on the right of the frame. Build-time; off by default. (default: false)
expose_controlsbooleannoExpose a live 'Smoothing' knob (0 = raw). (default: true)
parent_pathstringnoParent COMP path the self-contained 'pose_tracking' container is created inside. (default: /project1)

create_pose_skeleton mutates

Render a live stick-figure skeleton from full-body pose tracking — the classic MediaPipe body-tracking look: glowing lines connecting the 33 landmarks (shoulders, elbows, wrists, hips, knees, ankles) drawn by a Line MAT and rendered to a Null TOP you can composite or post-process. Source defaults to a SYNTHETIC animated pose so it builds and previews instantly with no camera and no plugin; switch to 'mediapipe' (the free torinmb plugin), 'osc', or an existing pose CHOP (e.g. from create_pose_tracking) for the real performer. Creates a new baseCOMP under parent_path holding the pose source, a Geometry COMP (a Script SOP that rebuilds points + bones each cook), a Line MAT, a Camera, a Render TOP, and a Null output. Use create_body_reactive instead for glowing dots/trails at the landmarks rather than a connected stick figure. Exposes LineColor / LineWidth / CamDistance. Returns a summary plus a JSON block with the container path, created node paths, the skeleton SOP and output paths, the bone count, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourcesynthetic | mediapipe | osc | existing_chopnoWhere the 33-landmark pose stream comes from. 'synthetic' (default) = a self-contained animated human pose that needs NO camera and NO plugin — use it to build and preview the look instantly. 'mediapipe' = the live CHOP from the free torinmb/mediapipe-touchdesigner plugin (point mediapipe_chop_path at its pose landmarks CHOP). 'osc' = landmarks arriving over OSC (osc_port). 'existing_chop' = a pose CHOP you already built (e.g. the output of create_pose_tracking). (default: synthetic)
mediapipe_chop_pathstringnoPath to the MediaPipe plugin's pose-landmarks CHOP (source='mediapipe'). The plugin emits 33 samples with tx/ty/tz channels.
osc_portintegernoUDP port the OSC In CHOP listens on (source='osc'). (default: 7000)
existing_chop_pathstringnoPath of an existing pose CHOP — 33 samples, tx/ty/tz channels (source='existing_chop').
line_colorstringnoBone colour as hex ('#rrggbb'). Drives the Line MAT; default is bright cyan. (default: #33ffe6)
line_widthnumbernoBone thickness in pixels (Line MAT near width). Exposed as a live knob. (default: 3)
camera_distancenumbernoCamera distance on Z. Default frames a whole standing figure in 16:9; larger = further/smaller. Exposed as a live knob. (default: 4.6)
expose_controlsbooleannoWhen true (default), expose live LineWidth / CamDistance knobs (+ a LineColor swatch). (default: true)
parent_pathstringnoParent network where the pose-skeleton container is created (default '/project1'). (default: /project1)

create_body_bubbles mutates

Create a MediaPipe-ready interactive bubble installation over the live camera: a detected open palm emits soap-like bubbles, body and hand landmarks act as soft colliders that can bat or lift them, a visible body contour is rendered in the same output so the interaction reads clearly, bubbles stay inside the screen box, settle on the lower floor, and pop/fade after a configurable lifetime (default 30 seconds). By default it keeps the bubble count low and disables pose-wrist emission, so bubbles are created only by an open palm. Builds a self-contained Base COMP with a Script CHOP physics solver, Script SOP bubble outlines, Script SOP body contour, camera-background composite, Geometry/Render/Null TOP output, a frame cooker, and live controls for emission rate, gravity, drag, buoyancy, skeleton impulse, bubble repulsion, tracking smoothing, body radius, body contour, camera opacity, lifetime, and bounce. Provide hand_chop_path from setup_hand_tracking and body_chop_path from setup_body_tracking/create_pose_tracking for full interaction.

ParameterTypeRequiredDescription
namestringnoName for the generated bubble-physics Base COMP. (default: body_bubbles)
parent_pathstringnoParent COMP where the body-bubble system is created. (default: /project1)
hand_chop_pathstringnoOptional hand-tracking CHOP from setup_hand_tracking: 21 samples per hand with tx/ty/tz/confidence. Open palm emits bubbles.
body_chop_pathstringnoOptional body/pose CHOP from setup_body_tracking or create_pose_tracking: 33 samples with tx/ty/tz/confidence. Landmarks collide with bubbles.
camera_top_pathstringnoTOP to use as the visible camera background. The MediaPipe plugin exposes the live camera at /project1/MediaPipe/video. (default: /project1/MediaPipe/video)
show_camera_backgroundbooleannoComposite the camera TOP behind the body contour and bubbles. (default: true)
hide_camera_tracking_overlaysbooleannoWhen camera_top_path belongs to the MediaPipe plugin, turn off its built-in tracking overlays so only the clean camera appears behind this system. (default: true)
camera_opacitynumbernoOpacity for the camera background when show_camera_background is enabled. (default: 1)
bubble_countintegernoMaximum number of live/recyclable bubbles in the simulation. (default: 45)
lifetime_secondsnumbernoSeconds each bubble remains visible before popping and disappearing. (default: 30)
emit_on_open_palmbooleannoWhen true, emit only while an open palm is detected in hand_chop_path. (default: true)
fallback_to_pose_wristsbooleannoOptional fallback: when hand tracking has no landmarks, emit from pose wrist landmarks. Disabled by default so bubbles are created only by an open palm. (default: false)
show_body_contourbooleannoRender the tracked body as a visible contour in the same output as the bubbles, so collisions read as performer interaction. (default: true)
body_contour_widthnumbernoLine width in pixels for the visible body contour overlay. (default: 4)
hand_emit_ratenumbernoBubbles emitted per second while the palm is open. (default: 8)
palm_open_thresholdnumbernoWorld-space average wrist-to-fingertip distance required to treat the hand as an open palm. (default: 0.08)
gravitynumbernoDownward acceleration in screen-space units per second squared. (default: 0.28)
body_radiusnumbernoCollision radius around each tracked body/hand landmark, in screen-space units. (default: 0.11)
wall_bouncenumbernoEnergy retained when bubbles hit the left/right/top screen bounds. (default: 0.68)
floor_bouncenumbernoEnergy retained when bubbles hit the lower screen floor. (default: 0.12)
dragnumbernoAir drag applied to bubble velocity each second; higher settles faster. (default: 0.95)
buoyancynumbernoSmall upward force countering gravity; keep below gravity for weighted bubbles. (default: 0.04)
skeleton_impulsenumbernoHow strongly moving body/hand landmarks transfer motion to bubbles. (default: 0.65)
bubble_repulsionnumbernoSoft collision force between bubbles so they do not collapse into one point. (default: 0.18)
tracking_smoothingnumbernoTemporal smoothing for body/hand colliders inside the bubble solver. (default: 0.55)
output_resolutionobject[]noRender resolution [width, height] for the output TOP. (default: 1280,720)
expose_controlsbooleannoExpose live EmitRate/Gravity/BodyRadius/Lifetime/Bounce controls on the container. (default: true)

create_body_reactive mutates

Build a body-reactive visual driven by full-body pose tracking: glowing marks that follow the 33 landmarks (head, hands, elbows, hips, knees, feet), rendered to a Null TOP. Creates a new baseCOMP under parent_path holding the pose source, a Geometry COMP (dots copied onto the landmark point cloud), a Camera, a Render TOP, and per-style post-processing. Styles: 'points' (crisp dots), 'glow' (bloomed dots), 'trails' (motion smears that follow the body). Source defaults to a SYNTHETIC animated pose so it builds and previews instantly with no camera and no plugin; switch to 'mediapipe' (the free torinmb plugin), 'osc', or an existing pose CHOP (e.g. from create_pose_tracking) for the real performer. The visual counterpart of create_audio_reactive, for the body instead of sound. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourcesynthetic | mediapipe | osc | existing_chopnoWhere the 33-landmark pose stream comes from. 'synthetic' (default) = a self-contained animated human pose that needs NO camera and NO plugin — use it to build and preview the look instantly. 'mediapipe' = the live CHOP from the free torinmb/mediapipe-touchdesigner plugin (point mediapipe_chop_path at its pose landmarks CHOP). 'osc' = landmarks arriving over OSC (osc_port). 'existing_chop' = a pose CHOP you already built (e.g. the output of create_pose_tracking). (default: synthetic)
mediapipe_chop_pathstringnoPath to the MediaPipe plugin's pose-landmarks CHOP (source='mediapipe'). The plugin emits 33 samples with tx/ty/tz channels.
osc_portintegernoUDP port the OSC In CHOP listens on (source='osc'). (default: 7000)
existing_chop_pathstringnoPath of an existing pose CHOP — 33 samples, tx/ty/tz channels (source='existing_chop').
visual_styleglow | points | trailsnoLook of the body-reactive visual: 'points' = crisp dots at each landmark; 'glow' = dots with a bloom halo; 'trails' = dots that smear into motion trails as the body moves. (default: glow)
colorstringnoDot colour as hex ('#rrggbb'). Drives the Constant MAT; default is hot magenta. (default: #ff40cc)
dot_sizenumbernoRadius of each landmark dot (world units). Exposed as a live knob. (default: 0.03)
glow_amountnumbernoBloom blur size for visual_style='glow' (Blur TOP size). Exposed as a live knob. (default: 16)
trail_decaynumbernoHow much of the previous frame survives for visual_style='trails' (feedback opacity). Higher = longer trails. Exposed as a live knob. (default: 0.9)
expose_controlsbooleannoWhen true (default), expose live DotSize (+ style-specific Glow/TrailDecay) knobs and a Color swatch. (default: true)
parent_pathstringnoParent network where the body-reactive container is created (default '/project1'). (default: /project1)

create_hand_hologram mutates

Build a palm-anchored hologram visual driven by create_hand_gesture_bus. Defaults to a synthetic previewable holographic cube; open palm controls visibility, the float anchor keeps it above the palm, and opposite-hand pinch drives scale, glow, and optional futuristic synth/device audio.

ParameterTypeRequiredDescription
sourcesynthetic | mediapipe | existing_chopno(default: synthetic)
parent_pathstringno(default: /project1)
comp_namestringno(default: hand_hologram)
hand_chop_pathstringno
tox_pathstringno
presetholo_cube | energy_orb | wireframe_hud | particle_coreno(default: holo_cube)
colorstringno(default: #54f4ff)
accent_colorstringno(default: #b56cff)
sizenumberno(default: 1)
float_heightnumberno(default: 1.15)
transparencynumberno(default: 0.46)
glownumberno(default: 22)
scanline_amountnumberno(default: 0.35)
rotation_speednumberno(default: 0.42)
pinch_scale_amountnumberno(default: 1.4)
audio_modenone | synth | device_outno(default: none)
audio_device_hintstringno(default: UMC202HD)
input_top_pathstringno
resolutionobject[]no(default: 1280,720)
expose_controlsbooleanno(default: true)
capture_previewbooleanno(default: true)

setup_body_tracking mutates

One-shot body tracking from a webcam: loads the free mediapipe-touchdesigner ENGINE (install it first with tdmcp install mediapipe-touchdesigner) into your project, starts the timeline (the engine captures the webcam through an embedded browser that only runs while playing), reads its pose JSON DAT through an adapter that emits a 33-landmark pose CHOP, and builds a live skeleton so you only need to pick your webcam and enable Pose. If the engine isn't installed yet, it tells you how. Loading the engine will prompt for camera permission on macOS (click Allow).

ParameterTypeRequiredDescription
tox_pathstringnoPath to the MediaPipe ENGINE .tox (MediaPipe.tox — the full tracker that captures the webcam, not the bare pose_tracking.tox processor). Defaults to the package staged by tdmcp install mediapipe-touchdesigner, falling back to the legacy ~/tdmcp-packages path.
parent_pathstringnoCOMP to load the engine into. (default: /project1)
build_skeletonbooleannoAlso build a pose-skeleton visual wired to the tracked body so you see it working. (default: true)

create_transition mutates

Build a parameterized A→B transition over a single 0–1 Progress knob — the executable core of VJ cutting. Creates a new baseCOMP under parent_path holding two sources (brought in via Select TOPs, or built-in contrasting test looks when omitted) and one of five transition styles: 'dissolve' (a Cross TOP crossfade), 'luma_wipe' (a Ramp-gradient-driven moving edge via GLSL), 'slide' (B pushes in from the right over A), 'zoom' (B scales in over A), or 'glitch_cut' (a hard A→B switch at 0.5 with a brief RGB-split tear). Progress 0 = full A, 1 = full B. Exposes live 'Progress' + 'Duration' knobs; drive Progress from manage_cue / bind_to_channel to run the transition on a beat or cue. Output is a Null ready for post-processing or setup_output. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoName for the transition system COMP. (default: transition)
parent_pathstringnoWhere to build it. (default: /project1)
source_astringnoTOP path for the A (outgoing) look. Omitted → a built-in test source (Constant/ramp) so it previews standalone.
source_bstringnoTOP path for the B (incoming) look. Omitted → a contrasting built-in test source.
styledissolve | luma_wipe | slide | zoom | glitch_cutnoTransition style: dissolve (crossfade), luma_wipe (gradient-driven edge), slide (B pushes A), zoom (B scales in), glitch_cut (RGB-shift hard cut). (default: dissolve)
progressnumbernoInitial transition position 0=full A, 1=full B (exposed as a live knob). (default: 0)
durationnumbernoSeconds for an auto Progress sweep when triggered (exposed as a knob; the knob can also be driven by manage_cue/bind_to_channel). (default: 2)
resolutionobject[]noOutput resolution [w,h]. (default: 1280,720)

create_live_source mutates

Build a self-contained source COMP that ingests an external feed — screen grab, NDI, Syphon/Spout, camera, or a video stream (RTSP/SRT/WebRTC) — normalizes it to a target resolution, and exposes a named Null TOP output ready for the mixer, decks, or post-fx chain. The default 'screen_grab' is zero-permission and safe to test anywhere. 'camera' (Video Device In) is opt-in: it can hang TouchDesigner on a macOS permission modal until the user clicks Allow. NDI, Syphon/Spout, and video_stream are platform- and license-gated (NDI requires the NDI Runtime; Syphon is macOS-only, Spout is Windows-only). Par names for the source/sender/URL are probed defensively so a name that differs between TD builds becomes a warning rather than a hard failure.

ParameterTypeRequiredDescription
namestringnoName for the source system COMP. (default: live_source)
parent_pathstringnoWhere to build it. (default: /project1)
kindscreen_grab | ndi | syphon_spout | camera | video_streamnoSource kind. DEFAULT screen_grab — zero-permission, safe to test. 'camera' (Video Device In) can hang TD on a macOS permission modal, so it is opt-in. (default: screen_grab)
source_namestringno(ndi/syphon_spout) The sender/stream name to receive. (video_stream) the URL (RTSP/SRT/WebRTC). (camera) the device name. Omit for the first available / a sensible default.
resolutionobject[]noTarget resolution [w,h] (a Fit/Resolution stage normalizes the feed). (default: 1280,720)

create_layer_stack mutates

Build a VJ-style N-layer compositor: stack 2–8 source TOPs and composite them bottom-up, each layer with its own blend mode (over/add/multiply/screen/difference/lighten/darken) and opacity. Each layer is a Select TOP (or a built-in test source when omitted) → a Level TOP carrying opacity; layers above the base each get their own 2-input Composite TOP so blend modes are per-layer. Exposes a live control strip — per layer: Opacity (0–1), Blend (menu), Mute, Solo — and ends on a Null ready for post-processing or setup_output. Pass layers (bottom-first) for an explicit stack, or omit it to build count empty test layers. Returns a summary plus a JSON block with the container path, per-layer node paths, the output Null, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoName for the compositor COMP. (default: layer_stack)
parent_pathstringnoWhere to build it. (default: /project1)
layersobject[]noExplicit layer stack (bottom-first). Omit to build count empty test layers.
countintegernoNumber of layers when layers is omitted. (default: 4)
resolutionobject[]noOutput resolution [w,h]. (default: 1280,720)

create_media_bin mutates

Point at a folder on the TouchDesigner machine and build a clip BIN inside a new bin COMP: it scans the folder (filtered to the given extensions, capped at max_clips), creates one Movie File In TOP per file, feeds them through a Switch TOP, and ends on a Null TOP. Exposes Index (current clip), Next / Prev (pulse, wrapping), and Crossfade (seconds) controls — switching clips crossfades by ramping the Switch's fractional index (0s = hard cut). The folder is read inside TD (not the MCP server). If the folder is empty or missing you get an empty, pointable bin instead of an error. Use create_video_player for a hand-listed playlist; use create_media_bin to ingest a whole folder for clip-based VJing.

ParameterTypeRequiredDescription
namestringnoName for the bin COMP. (default: media_bin)
parent_pathstringnoWhere to build it. (default: /project1)
folderstringyesFolder on the TD machine to scan for clips/stills.
extensionsstring[]noFile extensions to include (lower-case, no dot). (default: mov,mp4,png,jpg,jpeg,tif,exr)
max_clipsintegernoCap how many files become Movie File In TOPs. (default: 16)
crossfadenumbernoCrossfade seconds when switching clips (0 = hard cut). (default: 0.5)
resolutionobject[]noOutput resolution [w,h]. (default: 1280,720)

create_keyer mutates

Composite a keyed performer, logo, or any source over a background visual — the green-screen / chroma-key / matte tool for installations and live camera work. Creates a self-contained baseCOMP under parent_path that holds the full chain: source (Select TOP or test card) → key stage → composite → Null TOP output. Three key_type modes: 'chroma' (Chroma Key TOP, keys on Hue/Sat/Val range — best for green/blue-screen), 'luma' (Level TOP threshold + Matte TOP — keys by brightness), 'rgb' (RGB Key TOP, keys on R/G/B channel ranges — best for a solid background colour). key_color sets the target colour to remove (chroma/rgb modes); tolerance widens the key range; softness feathers the edge. With a source the footage is pulled in via a Select TOP (so it can live in another container); without one, a constant green test card is used so the chain builds and previews standalone. With a background the composited result is placed over it; without one, a diagonal ramp is used. Tolerance/Softness/KeyColor controls are exposed on the container. Output is a Null TOP. Returns a summary with the container path, created node paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoName for the keyer COMP. (default: keyer)
parent_pathstringnoWhere to build it. (default: /project1)
sourcestringnoTOP to pull the key FROM (e.g. a camera/live source). Omit → a built-in test source.
backgroundstringnoTOP to composite the keyed result OVER. Omit → a built-in test background.
key_typechroma | luma | rgbnochroma: green/blue-screen (Chroma Key TOP, keys on Hue+Sat+Val range); luma: brightness key (Level TOP + Matte TOP, keys on luminance); rgb: key a specific RGB color (RGB Key TOP, keys on R/G/B channel ranges). (default: chroma)
key_colorstringno(chroma/rgb) Hex color to key out. (default: #00ff00)
tolerancenumbernoKey tolerance/range. (default: 0.3)
softnessnumbernoEdge softness/feather. (default: 0.1)
resolutionobject[]noOutput resolution [w,h]. (default: 1280,720)

create_datamosh mutates

Build a datamosh (broken-codec / time-echo / ghost-trail) visual effect network in one call. Three modes: 'feedback_echo' (classic datamosh — a Feedback TOP loop decays and re-composites each frame, creating ghost trails); 'frame_blend' (blends current and previous frames for a motion-blur smear); 'time_echo' (Time Machine TOP samples different time offsets per pixel for per-pixel delayed ghosting). All modes expose a Decay knob; set source to an existing TOP path or omit it for a built-in animated test source. Returns a container with a Null TOP output, exposed controls, and a live preview.

ParameterTypeRequiredDescription
namestringnoName for the generated container COMP (default 'datamosh'). (default: datamosh)
parent_pathstringnoParent COMP path where the datamosh container is created (default '/project1'). (default: /project1)
sourcestringnoPath to an existing TOP to use as the mosh source. Omit to use a built-in animated Noise TOP so the loop cooks and previews even with the timeline paused.
modefeedback_echo | frame_blend | time_echonoWhich smear algorithm to build. 'feedback_echo': classic datamosh — the Feedback TOP layers the decayed previous frame over the new source, creating ghost trails. 'frame_blend': blends the current frame with a cached previous frame via a Level TOP opacity, creating a motion-blur smear. 'time_echo': delayed-frame ghosting via a Time Machine TOP driven by a displacement map (UNVERIFIED — falls back to feedback-delay if Time Machine is unavailable). (default: feedback_echo)
decaynumbernoHow slowly the trail fades (0–1). Higher values = longer smear / more persistent ghost. Applied via levelTOP brightness1. Default 0.9. (default: 0.9)
displacenumbernoPixel displacement of the fed-back frame each cycle (the 'mosh wobble'). Applied via displaceTOP displaceweight1 (falls back to displaceweight on older builds). 0 = no wobble. Default 0.0. (default: 0)
resolutionobject[]noOutput resolution [width, height] in pixels. Forced on the feedback loop to prevent flickering. Default [1280, 720]. (default: 1280,720)

create_displacement_warp mutates

Build a displacement-warp stage over a source — the 'heat-haze, liquid, audio-pushed pixels' tool for VJ sets. A Displace TOP warps the source image using a second image as a displacement map; the map is driven by one of three modulators: 'noise' (animated Perlin noise — smooth, continuous warp), 'second_top' (your own displacement map via a Select TOP), or 'audio' (audio FFT spectrum converted to a texture via CHOP-to-TOP, so the warp reacts to the music). Without a source the chain builds over a Ramp TOP test gradient and previews standalone. The Displace TOP's weight (displaceweight1) maps to the amount parameter; the Noise TOP translate speed maps to speed. Amount and Speed are exposed as live knobs. Output is a Null TOP. Returns a summary plus JSON with the container path, created node paths, controls, errors, warnings, and an inline preview image. Pairs with extract_audio_features for reactive warp and apply_post_processing to chain with other effects.

ParameterTypeRequiredDescription
namestringnoName of the container COMP created under parent_path. (default: displacement_warp)
parent_pathstringnoParent COMP path the self-contained displacement warp container is created inside. (default: /project1)
sourcestringnoAbsolute path of a TOP to warp (pulled in via a Select TOP so it can live anywhere in the network). Omit to use a built-in Ramp TOP test source so the chain builds and previews standalone.
modulatornoise | second_top | audionoWhat drives the displacement map. 'noise' (default): an animated Noise TOP whose translate and period are driven by time — produces smooth heat-haze / liquid warp. 'second_top': a Select TOP pointing at modulator_top (your own displacement map). 'audio': a CHOP-to-TOP conversion of audio FFT energy — pixels push in proportion to the audio spectrum. The audio modulator requires an audio device or audio file to be active in the project; without one it runs silently at zero energy. (default: noise)
modulator_topstringno(second_top mode only) Absolute path of a TOP to use as the displacement map. Required when modulator is 'second_top'; ignored otherwise.
amountnumbernoDisplacement strength — maps to the Displace TOP's displaceweight1 parameter. 0 = no warp; 1 = full-range warp (can tear); 0.05–0.3 are typical VJ values. (default: 0.1)
speednumberno(noise mode) Animation speed of the noise modulator. Scales the time-driven translate on the Noise TOP — higher values produce faster, more turbulent warp. (default: 0.5)
resolutionobject[]noOutput resolution [width, height] in pixels. (default: 1280,720)

create_halftone mutates

Build a print/comic print-look effect: halftone dots, CMYK colour separation, ordered dithering, or posterized stepped colour — classic retro aesthetics in one GLSL pass. Creates a new baseCOMP under parent_path holding the source (or a self-contained noise source), a GLSL TOP with an inline shader implementing the chosen style, and a Null output. With source it stylises an existing TOP (pulled in via a Select TOP); without it uses a self-contained animated colour-noise source (no device permissions). Exposes Mix (blend original vs stylised), DotSize, and Angle knobs. Returns a summary plus a JSON block with the container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoBase name for the created container. (default: halftone)
parent_pathstringnoParent COMP path the halftone container is created inside. (default: /project1)
sourcestringnoAbsolute path of an existing TOP to stylise (e.g. '/project1/render1'). Pulled in via a Select TOP. If omitted, a self-contained animated colour-noise source is used (no device permissions).
styledots | cmyk | dither | posterizenoPrint look to apply. dots: monochrome halftone dot grid; cmyk: 4-colour print separation with staggered screen angles; dither: 4×4 Bayer ordered dithering; posterize: stepped colour + luminance outline. (default: dots)
dot_sizenumbernoHalftone cell size in pixels — sets the dot spacing for 'dots' and 'cmyk' styles. Larger = coarser, more visible dots. (default: 6)
anglenumbernoScreen angle in degrees for the dot grid ('dots'/'cmyk'). Classic print uses 15–45°. (default: 15)
mixnumbernoBlend between the original image (0) and the fully stylised output (1). Exposed as a knob for live tweaking. (default: 1)
resolutionobject[]noOutput resolution [width, height] in pixels. (default: 1280,720)

create_vector_lines mutates

Build a pulse-driven image-to-vector-lines system: capture a still frame from a synthetic, camera, file, or existing TOP source, prepare a monochrome mask, freeze it to a snapshot, trace it through a Trace SOP for editable vector geometry, generate a clean TOP line-art overlay, and composite it over the source. Phase 1 is intentionally not realtime: the artist presses the Vectorize pulse to update trace1/frozen_frame, keeping cook cost bounded. Source defaults to a static synthetic contour card so it previews without camera permissions or moving noise; camera is opt-in. Exposes Vectorize, Threshold, PreBlur, StepSize, Smooth/Fit/Border toggles, line color/width, opacity, overlay mode, and calibration knobs. Returns the container, source/prep/frozen/trace/vector/output paths, warnings for unverified Trace/snapshot details, and a preview.

ParameterTypeRequiredDescription
namestringnoName for the vector-line system COMP. (default: vector_lines)
parent_pathstringnoParent COMP where the system container is created. (default: /project1)
sourcesynthetic | camera | file | existing_topnoImage source. 'synthetic' is the safe default; 'camera' is opt-in; 'file' reads movie_file_path; 'existing_top' pulls existing_top_path through a Select TOP. (default: synthetic)
existing_top_pathstringnoExisting TOP path used when source='existing_top'.
movie_file_pathstringnoMovie/image path used when source='file'.
camera_devicestringnoOptional camera device name for source='camera'.
modehybrid_foreground | foreground_mask | full_framenoPrep mode: foreground-oriented mask, mask-only, or full_frame edge/detail tracing. (default: hybrid_foreground)
analysis_resolutionobject[]noCapture/trace resolution [width, height] that bounds vectorization cost. (default: 640,360)
thresholdnumbernoBrightness/mask cutoff for the prep image and Trace SOP. (default: 0.45)
pre_blurnumbernoBlur amount before thresholding/tracing to remove camera noise. (default: 2)
invertbooleannoInvert the prepared mask before tracing. (default: false)
remove_bordersbooleannoRemove dirty image borders in Trace SOP when supported. (default: true)
resamplebooleannoResample Trace SOP shapes to reduce excessive point density. (default: true)
step_sizenumbernoTrace SOP resample step / simplification amount. (default: 4)
smooth_shapesbooleannoSmooth traced shapes to reduce sharp camera-noise corners. (default: true)
fit_curvesbooleannoFit Trace SOP output to Bezier curves; off by default until live-probed. (default: false)
line_colorstringnoVector material color as '#rrggbb'. (default: #49dcb2)
line_widthnumbernoWireframe line width where supported by the material. (default: 2)
opacitynumbernoOpacity of the rendered vector overlay. (default: 0.9)
overlay_modeover | add | screen | multiplynoComposite TOP operand when show_source=true. (default: over)
show_sourcebooleannoComposite the source image under the vector layer when true. (default: true)
expose_controlsbooleannoExpose the Vectorize pulse plus prep/look/calibration controls. (default: true)

create_feedback_tunnel mutates

Build a parameterized infinite-zoom/rotate feedback tunnel: a seed TOP is composited with its own fed-back, zoomed, rotated, and decayed frame each cook to produce a hypnotic inward-spiral tunnel. Four audio-bind-ready controls (Zoom, Rotate, HueShift, Decay) are exposed on the container for live performance. A built-in animated noise seed is used when no source TOP is given. The recipe-validated topology (noiseTOP → feedbackTOP + compositeTOP-maximum → transformTOP sx/sy → blurTOP → levelTOP brightness1/huerotate → nullTOP, loop closed by feedbackTOP.par.top) is created inside a new baseCOMP under parent_path. Returns a summary, the container + node paths, exposed controls, any node errors, and an inline preview image. This is the fixed zoom-and-rotate spiral preset; for a general feedback loop with a choice of seed type and an arbitrary ordered chain of effects (blur/displace/edge/…) use create_feedback_network instead.

ParameterTypeRequiredDescription
namestringno(default: feedback_tunnel)
parent_pathstringnoParent COMP path inside which the 'feedback_tunnel' container is created. (default: /project1)
sourcestringnoPath to an existing TOP to use as the tunnel seed. Omit to generate a built-in animated noise seed.
zoomnumbernoPer-frame zoom factor applied to the fed-back frame (>1 = inward tunnel, e.g. 1.02). (default: 1.02)
rotatenumbernoPer-frame rotation in degrees added to the fed-back frame (positive = clockwise). (default: 2)
hue_shiftnumbernoPer-frame hue rotation (0–1, wrapping). Applied via levelTOP huerotate. 0 = no shift. (default: 0)
decaynumbernoTrail persistence (0–1). Applied via levelTOP brightness1 each frame. Higher = longer-lived tunnel; default 0.95. (default: 0.95)
resolutionobject[]noOutput resolution [width, height] in pixels. Fixed resolution prevents feedback runaway. (default: 1280,720)

multipass_3d_depth mutates

Build a renderable 3D scene with depth cues that read on stage: a Geometry COMP holding the chosen primitive (sphere/box/torus/grid), a Camera, a Light, and a Render TOP beauty pass, output as a Null — like create_3d_scene but with an optional Screen-Space Ambient Occlusion (SSAO) pass for contact shadows, and an optional Depth TOP output. The SSAO TOP is wired directly after the Render TOP (it needs the depth buffer — no TOP between them) and combined with the color. When expose_depth is on, a Depth TOP resolves the same render into a depth map exposed as a second Null ('depth_out'); feed that path into create_depth_displacement or create_depth_silhouette with source='existing_top' for a synthetic depth-driven effect — no depth camera needed. Optionally GPU-instanced into a grid, with spin over time. Exposes Spin, Zoom, and (with SSAO) an Ssao toggle. Returns a summary plus a JSON block with the container path, created node paths, the render/output/depth paths, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoName of the self-contained container created under parent_path. (default: multipass_3d)
parent_pathstringnoParent COMP path the multipass 3D container is created inside (default '/project1'). (default: /project1)
geometrysphere | box | torus | gridnoPrimitive to render. (default: torus)
instancesintegernoGPU-instanced copies scattered over a grid (1 = single). (default: 1)
ssaobooleannoAdd a Screen-Space Ambient Occlusion pass for contact shadows/depth. (default: true)
expose_depthbooleannoExpose a Depth TOP output (feeds create_depth_displacement/silhouette synthetically). (default: true)
spinnumbernoDegrees/sec rotation. (default: 10)
resolutionobject[]noRender resolution [width, height] in pixels. (default: 1280,720)

create_set_navigator mutates

Build a hands-light stage navigator (the QLab model) for stepping through an ordered scene/cue list: Next / Prev to move the pointer, Go to fire the current scene's cue on the target COMP, and an Index knob to jump directly. Optionally quantizes GO to the next beat. The navigator drives manage_cue recall on the target so cue morphs and beat-quantized changes all work. Use after building a control panel with manage_cue cues stored; then perform the show by hitting Next + Go instead of recalling by name.

ParameterTypeRequiredDescription
namestringnoName of the navigator COMP to create. (default: set_navigator)
parent_pathstringnoParent COMP path the navigator container is created inside. (default: /project1)
targetstringyesThe COMP whose cues this navigator steps through. Cues are recalled on it via manage_cue.
scenesstring[]noOrdered cue names to navigate. Omit or leave empty to read the target's existing cues. (default: ``)
go_on_beatbooleannoQuantize GO to the next beat (needs a tempo/beat source). (default: false)
resolutionobject[]noPanel resolution [width, height] in pixels. (default: 1280,720)

create_pop_field mutates

Build a GPU point field using TouchDesigner's POP (Point OPerator) family — a generator POP (chosen by pattern: 'noise' scatters count points and displaces them with a Noise POP for a moving cloud, 'grid' a flat lattice, 'sphere' a shell), a Transform POP that spins the whole field over time, then a render path (POP to SOP → Geometry COMP → Render TOP) output as a Null TOP. Creates a new baseCOMP under parent_path holding all of these and exposes PointSize and Spin knobs. NOTE: POPs are flagged Experimental in this TD build and the POP render path is uncertain, so this tool is built fail-forward and probe-first — the POP chain and render wiring are best-effort (failures become warnings) while the output Null is always created, and the result's extra.unverified lists every POP op type and the render path attempted so you can live-validate. Returns a summary plus a JSON block with the container path, created node paths, generator/transform/render/output paths, exposed controls, node errors, warnings, the unverified probe record, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoName for the self-contained POP-field container created under parent_path. (default: pop_field)
parent_pathstringnoParent COMP path the POP-field container is created inside (default '/project1'). (default: /project1)
countintegernoApproximate point count. Used directly for the 'noise' pattern; 'grid'/'sphere' approximate it via a rows×cols layout near this total. (default: 10000)
patterngrid | noise | spherenoPoint layout/source. 'noise' (default) = a Point Generator POP scatters count points which a Noise POP displaces into a moving cloud. 'grid' = a flat Grid POP lattice. 'sphere' = points on a Sphere POP shell. (default: noise)
point_sizenumbernoRendered point size (Render TOP point size), exposed as the live PointSize knob. (default: 2)
spinnumbernoDegrees/sec rotation of the whole field around Y (a Transform POP animates it over time), exposed as the live Spin knob. (default: 10)
resolutionobject[]noRender resolution [width, height] of the Render TOP and the output Null TOP. (default: 1280,720)

create_pop_geometry mutates

Procedural Op Pattern (POP) geometry generator: build a SOP chain inside a Geometry COMP — primitive (box/sphere/tube/torus/grid/line/text) → Transform SOP (translate/rotate/scale) → optional Subdivide SOP → optional per-point Noise SOP displacement → Material SOP (Constant MAT) → Null SOP — then render through a Camera + Light + Render TOP to a Null TOP. Creates a new baseCOMP under parent_path. Exposes a RotateY control; NoiseAmount + NoisePeriod are exposed only when noise_amount > 0 (otherwise the Noise SOP is omitted and those knobs would be inert). Use build_sop_geometry for a fully declarative SOP chain without a render rig; use create_3d_scene for instanced primitives, create_pbr_scene for PBR shading.

ParameterTypeRequiredDescription
primitivebox | sphere | tube | torus | grid | line | …noBase geometry primitive. Each maps to its stock SOP (boxSOP/sphereSOP/tubeSOP/torusSOP/gridSOP/lineSOP/textSOP). (default: box)
translateobject[]noTranslation [tx,ty,tz] applied via a Transform SOP after the primitive. (default: 0,0,0)
rotateobject[]noRotation [rx,ry,rz] in degrees applied via the same Transform SOP. (default: 0,0,0)
scaleobject[]noPer-axis scale [sx,sy,sz] applied via the same Transform SOP. [1,1,1] = unchanged. (default: 1,1,1)
subdivisionsintegernoOptional subdivision count. When > 0 a Subdivide SOP runs after the Transform SOP at this depth, then a per-point Noise SOP works on the denser mesh. (default: 0)
noise_amountnumbernoDisplacement amount of the per-point Noise SOP (0 = bypassed; ~0.1..1 typical for organic warp). (default: 0)
noise_periodnumbernoSpatial period of the displacement noise. Larger = wider/softer ripples; smaller = tighter detail. (default: 1)
text_stringstringnoWhen primitive is 'text', the string fed into the textSOP. Ignored for other primitives. (default: tdmcp)
expose_controlsbooleannoWhen true (default), expose live knobs on the container: RotateY always, plus NoiseAmount + NoisePeriod only when noise_amount > 0 (otherwise the Noise SOP is omitted and exposing the knobs would be inert). (default: true)
base_namestringnoOptional base name for the container (defaults to 'pop_geometry'). Final container path is &lt;parent_path&gt;/&lt;base_name&gt; with TD's auto-suffix.
parent_pathstringnoParent network where the POP geometry container is created (default '/project1'). (default: /project1)

create_text_3d mutates

Build a self-contained 3D text scene: a Text SOP generates the glyph outlines, an Extrude SOP gives them depth (the depth parameter controls depthscale), and a Geometry COMP holds the pipeline with a Constant MAT for colour. A Camera, a Light, and a Render TOP complete the 3D render, output as a Null TOP. Optional continuous Y-axis spin (spin degrees/sec) is driven by a time expression on the Geometry COMP's ry parameter. Exposes Spin and Depth as live knobs. The classic signature look for title cards, lyric reveals, and 3D text drops — use create_kinetic_text instead for flat 2D animated text. Returns a summary plus a JSON block with the container path, created node paths, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoBase name for the self-contained container COMP (default 'text_3d'). (default: text_3d)
parent_pathstringnoParent COMP path where the text-3D container is created (default '/project1'). (default: /project1)
textstringnoThe text to render in 3D. Use \n for multiple lines. (default: HELLO)
depthnumbernoExtrusion depth in geometry units (controls the Extrude SOP's depthscale). 0 = flat polygons, 0.2 = typical title-card look. (default: 0.2)
spinnumbernoContinuous Y-axis rotation in degrees per second (0 = static). Driven by an expression on the Geometry COMP's ry parameter. (default: 20)
colorstringnoText material colour as a hex string ('#ffffff' = white). Sets the Constant MAT's colorr/g/b. (default: #ffffff)
resolutionobject[]noRender TOP output resolution as [width, height] in pixels (default [1280, 720]). (default: 1280,720)

create_midi_note_reactive mutates

Build a MIDI note → per-note trigger/velocity chain that exposes bindable channels on a Null CHOP (note0…noteN-1). Unlike learn_control (which binds one CC), this creates a full note-event chain: midiinCHOP → eventCHOP (ADSR envelopes per note) → Null CHOP. Bind any parameter to op('…/notes_out')['note0'] and it pulses with each keypress. source='synthetic' (default) previews without hardware by generating a procedural note pattern — switch to source='device' when a MIDI keyboard is connected. The device path is HARDWARE-GATED (HELD FROM RELEASE until validated with real MIDI gear).

ParameterTypeRequiredDescription
namestringnoName for the container COMP created inside parent_path. Must be a valid TD identifier. (default: midi_note_reactive)
parent_pathstringnoParent COMP path the self-contained container is created inside. (default: /project1)
sourcedevice | syntheticnodevice: a real MIDI In CHOP (hardware-gated; needs a MIDI keyboard/controller — HELD FROM RELEASE until validated with gear). synthetic: a Noise CHOP driving an Event CHOP so it previews without any hardware. Default is synthetic so the chain is immediately visible. (default: synthetic)
device_namestringno(device) MIDI device name to filter (e.g. 'Arturia MiniLab mkII'). When omitted the MIDI In CHOP listens on all devices.
notesintegernoHow many note channels to expose (e.g. 12 = one octave, 128 = full keyboard). Each channel is named note0…noteN-1 on the output Null CHOP. (default: 12)

create_test_pattern mutates

Generate a projector calibration / alignment source — a standalone test-pattern network that every media server ships and tdmcp was missing. Builds a baseCOMP containing a GLSL TOP with a baked-in static pattern (grid, crosshair, SMPTE-ish color bars, horizontal ramp, or circle-grid), optional text/number overlay (for per-projector ID), and a Null TOP as the stable output handle. The shader is generated per pattern and baked into the payload — no custom uniforms or live bindings needed. Use the output as a routing source during projector alignment, LED mapping calibration, or camera registration. Pattern, resolution, divisions, overlay number/label, and colours are all configurable.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path to build inside (e.g. '/project1'). The container is created here. (default: /project1)
namestringnoBase name for the container COMP that wraps the pattern network. (default: test_pattern)
patterngrid | crosshair | color_bars | ramp | circle_gridnoPattern type: grid = even line grid; crosshair = centred cross + corner marks; color_bars = vertical SMPTE-ish colour columns; ramp = smooth horizontal grey ramp; circle_grid = repeated concentric ring tiles. (default: grid)
widthintegernoOutput width in pixels (must be > 0; e.g. 1920, 2560, 3840). (default: 1920)
heightintegernoOutput height in pixels (must be > 0; e.g. 1080, 1440, 2160). (default: 1080)
divisionsintegernoNumber of grid cells across the frame for grid and circle_grid patterns (must be >= 1). Ignored by other patterns. (default: 16)
output_numberintegernoProjector / output ID drawn as a large label in the lower-right corner (must be >= 0). 0 = no number. (default: 0)
labelstringnoOptional extra caption text overlaid bottom-right (e.g. 'LEFT', 'CAM 2'). Empty = none. (default: ``)
line_colornumber[]noPattern line colour as [R, G, B] in 0–1 range. Default is green [0, 1, 0]. (default: 0,1,0)
bg_colornumber[]noBackground colour as [R, G, B] in 0–1 range. Default is black [0, 0, 0]. (default: 0,0,0)

create_text_crawl mutates

Build a multi-line animated text crawl / ticker / credits roll / typewriter reveal inside a self-contained baseCOMP. Three modes: 'crawl_horizontal' = continuous left-scrolling ticker tape (news-ticker style); 'roll_vertical' = upward credits roll (use \n to separate lines); 'typewriter' = text is revealed character-by-character from left to right (EXPERIMENTAL — the substring expression on a textTOP text par is unverified across TD builds). A textTOP renders the content; a transformTOP animates position via an EXPRESSION parameter (crawl/roll modes) or the textTOP text par is set to a time-sliced substring expression (typewriter mode). The scroll wraps continuously (loop=true, default) so the text re-enters from the opposite edge. Outputs a nullTOP 'out' as a stable handle. Differs from create_kinetic_text (single-string flash/pulse/slide) and create_text_overlay (a static, non-moving caption/title); this tool handles multi-line copy, continuous scrolling, and character-reveal. Returns a JSON block with container path, output_top, text_top, transform_top, mode, line count, and any per-step warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP where the text-crawl container is created (default '/project1'). (default: /project1)
namestringnoName for the baseCOMP container that holds the crawl network. (default: text_crawl)
textstringyesThe text content to display. Use \n to separate multiple lines (e.g. for a ticker or credits roll). All lines are fed to a single Text TOP.
modecrawl_horizontal | roll_vertical | typewriternoAnimation style: 'crawl_horizontal' = text scrolls continuously left across the frame (ticker-tape); 'roll_vertical' = text rolls upward (credits roll); 'typewriter' = text is revealed one character at a time from left to right — EXPERIMENTAL (the substring expression on a textTOP par is UNVERIFIED across TD builds). (default: crawl_horizontal)
speednumbernoScroll speed as a fraction of the output resolution per second. 0.1 = the text travels one full screen-width per 10 s. Drives the Transform TOP position expression. (default: 0.1)
font_sizenumbernoFont size in pixels (maps to the Text TOP's fontsizex parameter; fontsizey is set to the same value). (default: 48)
colornumber[]noRGB text colour as three 0–1 floats, e.g. [1,1,1] = white. Sets fontcolorr/g/b on the Text TOP. (default: 1,1,1)
bg_alphanumbernoBackground alpha [0–1]. 0 = fully transparent background (text over black/transparent). The par name is probed: 'alphabg' is tried first, then 'bgalpha' — UNVERIFIED across TD builds. (default: 0)
widthintegernoOutput resolution width in pixels (sets resolutionw on the Text TOP). (default: 1920)
heightintegernoOutput resolution height in pixels (sets resolutionh on the Text TOP). (default: 1080)
loopbooleannoWhen true (default), the scroll position wraps so the text crawls/rolls continuously. When false, it plays once and stops at the end. (default: true)

create_blob_reactive mutates

Build a blob-position-tracking chain that drives parameters from the POSITIONS of multiple objects/hands in a camera (or a TOP) — the per-blob counterpart to create_motion_reactive's single aggregate motion value. Creates a container under parent_path with a Video Device In TOP (or a Select TOP pulling an existing TOP), a Monochrome + Threshold TOP to isolate bright blobs, a Blob Track operator assigning each blob a persistent slot, and a Script CHOP that normalizes the tracker's per-blob output into a deterministic 'blobs' Null CHOP with channels blob0_x, blob0_y, blob0_size, blob1_x, … Bind any parameter to op('…/blob_reactive/blobs')['blob0_x'] (or pass targets to bind by expression as value*scale+offset). Camera source may prompt for (and briefly hang on) a macOS camera-permission dialog. The Blob Track operator is a palette/CV op whose optype and channel naming vary by TD build — the chain is built fail-forward and warns (rather than failing) if it is unavailable, and the Script CHOP normalizes whatever channels the tracker emits. Returns a summary plus a JSON block with the container path, the blobs CHOP path, the tracked output TOP, the tracker type used, channel names, bound targets, and warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent network where the blob-reactive container is created (default '/project1'). (default: /project1)
namestringnoBase name for the container COMP that holds the chain. (default: blob_reactive)
sourcecamera | topnoBlob source. 'camera' = live webcam/capture device (the real-world default; creating it may pop a one-time macOS camera-permission dialog — click Allow, and note it can briefly hang TD at the modal). 'top' = analyze an existing TOP you name in source_top. (default: camera)
source_topstringnoPath of an existing TOP to track blobs in; used only when source='top' (a Select TOP pulls it in so no cross-container wire is needed). (default: ``)
camera_indexintegernoWhich capture device to use when source='camera' (0 = the first/default camera). Maps to the Video Device In TOP's device index. (default: 0)
thresholdnumbernoLuma threshold [0–1] for isolating blobs: pixels brighter than this are considered part of a blob. Lower catches dim/large blobs, higher only bright ones. Drives both the Threshold TOP mask and the blob tracker's own threshold. (default: 0.3)
max_blobsintegernoMaximum number of blobs to track simultaneously, each given a persistent slot/ID. (default: 5)
targetsobject[]noPer-blob parameter bindings. Each entry binds one node parameter by expression to op('…/blobs')['blob<blob>_<axis>'] * scale + offset. Omit to just build the tracking chain and bind later. (default: ``)

compose_cue_list mutates

Turn a natural-language show description into a validated cue list (SetlistSchema, scenes[] variant). Uses the local LLM when configured, falls back to a deterministic grammar parser otherwise. Optionally chains into create_cue_sequencer.

ParameterTypeRequiredDescription
descriptionstringyesNatural-language show plan.
bpmnumbernoShow tempo. Defaults to 120 if neither bpm nor a parsed cue overrides.
barsintegernoHint at total length in bars; LLM/grammar fits cues within.
styletechno | ambient | dnb | house | experimental | genericnoStylistic prior — biases default cue names + morph times. (default: generic)
titlestringnoOptional show/setlist title for the output title field.
applybooleannoIf true, also build a cue_sequencer rig from the produced setlist. (default: false)
containerNamestringnoWhen apply=true, passed through to create_cue_sequencer as name.
preferLlmbooleannoIf false, skip the LLM and use the grammar parser directly. (default: true)

enhance_build mutates

Run score_build, ask the configured LLM for up to N allowlisted tool calls that would raise the weakest sub-scores, and optionally auto-apply them. autoApply mutates the project and is NOT idempotent (re-runs can stack effects). Allowlist: create_color_grade, apply_post_processing, create_feedback_network, create_feedback_tunnel, bind_to_channel, arrange_network. Returns before/after scores and a dispatch log.

ParameterTypeRequiredDescription
scopePathstringnoNetwork root to enhance. Forwarded to score_build. (default: /project1)
focusCriterionpalette | motion | complexitynoWhen set, the planner targets only this axis. errors/perf are excluded (use summarize_td_errors / optimize_performance).
autoApplybooleannoWhen true, dispatches each proposed call against the allowlisted tools. Default is preview-only because dispatch mutates the TD project. (default: false)
maxProposalsintegernoCap on proposed (and applied) tool calls. Keeps blast radius small. (default: 3)
targetFpsnumbernoForwarded to score_build. (default: 60)
rescorebooleannoWhen autoApply=true, re-run score_build after dispatch and include after + delta. Ignored when autoApply=false. (default: true)

create_prob_sequencer mutates

Build a Markov-chain step sequencer. On each beat boundary the COMP transitions from the current state to a next state sampled from the per-state weighted-transition table. Outputs two CHOP channels: 'state' (current state index) and 'trigger' (pulse on state change). Generative sibling of create_euclidean_sequencer and create_beat_grid_sequencer — great for evolving, probabilistic rhythms and generative state machines. NOTE: beat-callback timing requires a live TD session with time.play=1.

ParameterTypeRequiredDescription
namestringnoContainer COMP name. (default: prob_seq)
parent_pathstringnoParent COMP path. (default: /project1)
bpmnumbernoTempo written to Beat CHOP when no bpm_source is provided. (default: 120)
division1/4 | 1/8 | 1/16noBeat subdivision (1/4→1, 1/8→2, 1/16→4 beats-per-measure). (default: 1/8)
statesobject[]yesMarkov states. Each state has a unique id, a weight (initial distribution), and a transitions map (keys = state ids, values ≥ 0).
startStatestringnoInitial state id. If omitted, sampled from state weights.
bpm_sourcestringnoPath to an existing Beat CHOP / tempo source. Omit to build a new one.
seedintegernoIf set, seeds Python random for reproducible runs.

create_two_way_surface mutates

Build a bidirectional OSC or MIDI control surface that drives TouchDesigner params from a controller AND echoes outgoing changes back to it (motor faders, RGB pads), with an oscillation guard so the device's own echo doesn't ping-pong. Each mapping pairs a device address with a TD parameter; a Script CHOP gates outbound sends by epsilon delta, rate limit, and a last_in cache. Exposes Bypass, Globaleps, Ratehz, Reseccache custom pars on the container.

ParameterTypeRequiredDescription
namestringnoContainer name. (default: two_way_surface)
parentstringnoParent COMP path. (default: /)
protocolosc | midinoTransport: 'osc' uses OSC In/Out CHOPs; 'midi' uses MIDI In/Out CHOPs. (default: osc)
hoststringnoOSC remote host (device IP) for outgoing messages. Ignored for MIDI. (default: 127.0.0.1)
portintegernoOSC remote port for outgoing messages. Ignored for MIDI. (default: 9000)
listenPortintegernoOSC local port for incoming messages. Ignored for MIDI. (default: 9001)
midiDevicestringnoMIDI device name (required when protocol='midi').
mappingsobject[]yesPer-control routing + guard config.
rateLimitHznumbernoOutgoing send-rate cap (Hz). Outbound channels are throttled below this rate. (default: 60)

create_automation_lane mutates

Build a per-parameter automation lane that records a live parameter sweep into a circular buffer over N bars, then loops the recording back into the parameter on a bar-phase clock. Two modes: record (sample the target param every cook into a ring buffer) or loop (read the buffer back via Lookup CHOP bound to the target param). Re-calling with the same name and a different mode flips the state without rebuilding the network. Uses Beat CHOP → Select CHOP (rampbar) → Lookup CHOP playback, with COMP storage tracking mode/write_head/armed state. Returns a summary plus a JSON block with container path, mode, samples count, target, and any warnings.

ParameterTypeRequiredDescription
namestringyesSystem container name, e.g. 'auto_lane_filter'
parentstringnoParent COMP path, defaults to '/'
targetParamstringyesOP path + param tuple, e.g. '/project1/filter1:cutoff'
bars1 | 2 | 4 | 8no(default: 4)
bpmnumberno(default: 120)
moderecord | loopno(default: record)

create_chroma_reactive mutates

[experimental] Builds a 12-channel pitch-class chroma vector (chroma_0..chroma_11) from an audio bus via FFT bin → pitch-class fold. Outputs a Null CHOP ready for bind_to_channel. Shares audioSource convention with create_transient_reactive / create_energy_reactive.

ParameterTypeRequiredDescription
namestringno(default: chroma_reactive)
parentstringno(default: /)
audioSourcestringnoOptional path to an existing CHOP to use as audio input. If omitted, an internal Audio Device In CHOP is created (may prompt for macOS microphone permission).
fftSize1024 | 2048 | 4096noFFT size for the Audio Spectrum CHOP. (default: 2048)
smoothingnumbernoTemporal smoothing on chroma vector (0 = raw, 1 = frozen). Maps to Filter CHOP width. (default: 0.7)

create_transient_reactive mutates

Layer-1 audio splitter: differences a fast and a slow envelope follower to expose two normalized 0..1 channels — 'transient' (percussive onsets) and 'sustain' (tonal floor) — on a Null CHOP at {comp}/out. Pair with bind_to_channel to drive visuals from percussion vs sustain independently. Custom-par page 'Tune' on the parent COMP exposes Sensitivity + per-envelope attack/release for live tweaking.

ParameterTypeRequiredDescription
namestringyesContainer COMP name (required).
parentstringnoParent path of the container COMP (must exist). (default: /)
audioSourcestringnoOptional CHOP path or shared audioBus Null CHOP path. When empty, an internal audioDeviceIn CHOP is used. (default: ``)
fastAttackMsnumbernoFast envelope attack in ms — captures clicks/onsets. (default: 1)
fastReleaseMsnumbernoFast envelope release in ms. (default: 20)
slowAttackMsnumbernoSlow envelope attack in ms — tonal floor. (default: 50)
slowReleaseMsnumbernoSlow envelope release in ms. (default: 200)
sensitivitynumbernoGain applied to transient before clamp to 0..1. (default: 1)

create_energy_structure mutates

[experimental] Build a song-structure (build / drop / breakdown) edge detector COMP with adaptive thresholds. Listens to an existing audio CHOP (audioSource) or a freshly created Audio Device In, follows a long-window envelope, and runs a Script CHOP that maintains a rolling buffer (last windowSec seconds) to derive an adaptive mean (mu) and std (sigma). Emits a 5-channel Null CHOP out with: energy (smoothed RMS 0..1), state (0=breakdown, 1=build, 2=drop), and three 1-sample edge pulses build_edge / drop_edge / breakdown_edge. buildThreshold and dropThreshold are k-multipliers of sigma above mu (NOT absolute amplitudes), so the detector self-calibrates to the current mix loudness. Hysteresis (4 cooks above to step up, 30 below to fall back) stops chattering at thresholds. windowSec/Buildthreshold/Dropthreshold are exposed as custom params on the parent COMP so artists can tweak live. Default audio source builds an Audio Device In CHOP (may pop the macOS mic-permission dialog once — click Allow); pass audioSource to skip the device.

ParameterTypeRequiredDescription
namestringyesParent COMP name to create under parent.
parentstringnoParent path (default project root). (default: /)
audioSourcestringnoOptional existing CHOP path producing audio (e.g. an Audio Device In or Audio File In). If omitted, an Audio Device In is created inside the COMP as 'audioin'.
windowSecnumbernoLength of the rolling energy buffer (sec) used to compute adaptive mean/std. (default: 20)
buildThresholdnumbernok_build: state becomes BUILD when energy > mu + k_build*sigma. (default: 0.7)
dropThresholdnumbernok_drop: state becomes DROP when energy > mu + k_drop*sigma (must be > buildThreshold). (default: 0.85)

create_phone_gesture mutates

Stream a phone's IMU (tilt + gyro + shake) and multitouch into TouchDesigner as CHOP channels you can bind to anything. Builds a Web Server DAT page the phone opens (any browser, no app) and a Null CHOP exposing tilt_x/y/z, gyro_x/y/z, shake, touch0..3_x/y/active, clients. Composable with create_phone_remote on the same COMP (different port). SECURITY: listens on all interfaces with no auth — trusted networks only. iOS Safari needs HTTPS for motion permission; falls back to touch-only on plain HTTP.

ParameterTypeRequiredDescription
namestringnoChild operator base name inside parent. (default: phone_gesture)
parentstringnoCOMP that will host the Web Server DAT + Script CHOP. (default: /project1)
portintegernoTCP port for the gesture web server (distinct from bridge:9980 and phone_remote:9981). (default: 9982)
enableImubooleannoEnable tilt_, gyro_, shake channels (iOS Safari requires HTTPS + permission tap). (default: true)
enableMultitouchbooleannoEnable touch0..3_x/y/active channels. (default: true)
shakeThresholdnumbernoAcceleration magnitude (m/s^2) above which shake fires. (default: 15)

moodboard_to_system mutates

Ingest 1..6 moodboard images and build a matching generative system in TouchDesigner. Uses the vision-capable local LLM when configured to extract palette + motion + generator pick (palette hint, generator from {audio_reactive, generative_art, particle_flock, feedback_tunnel, gpu_particle_field}, optional post-FX). Falls back to a deterministic style→generator grammar otherwise. Note: preview may read 0 on a paused timeline — press Play.

ParameterTypeRequiredDescription
imagesstring[]yesImage paths (absolute or cwd-relative). Vault refs allowed when TDMCP_VAULT_PATH is set: e.g. 'Moodboards/foo.png'.
parent_pathstringnoCOMP to build the generated subsystem in. (default: /project1)
styleauto | cinematic | minimal | glitch | organic | retro | …noHint that biases generator + post-FX choice. (default: auto)
intensitynumbernoDrives evolution_speed / particle counts / feedback gain on the chosen generator. (default: 0.6)
includePostFxbooleannoChain apply_post_processing with picked effects after the generator builds. (default: true)
generatorauto | audio_reactive | generative_art | particle_flock | feedback_tunnel | gpu_particle_fieldnoForce a generator. 'auto' lets the LLM/grammar pick. (default: auto)
preferLlmbooleannoWhen false, skip the LLM entirely and use the deterministic grammar. (default: true)

audio_fingerprint_to_visual mutates

Sample a few seconds of audio inside TouchDesigner, compute a 4-feature fingerprint (tempo, spectral centroid, onset density, dynamic range), run a deterministic heuristic mapping to pick a matching Layer 1 generator (create_glitch / create_audio_reactive / create_kaleidoscope / create_feedback_tunnel / create_feedback_network / create_gpu_particle_field), and dispatch it with parameters tuned to the fingerprint. Default audio_source='synthetic' to avoid macOS mic-permission hangs. dry_run=true returns the chosen mapping without building. apply_top_op composites the result over an existing TOP.

ParameterTypeRequiredDescription
audio_sourcesynthetic | file | device | existing_chopnoAudio source for fingerprinting. Defaults to 'synthetic' (a gated tone at the global tempo) because 'device' can hang TD on a macOS mic-permission modal — same rationale as detect_tempo. (default: synthetic)
audio_file_pathstringnoAudio file path. Required when audio_source='file'.
existing_chop_pathstringnoPath of an existing audio CHOP. Required when audio_source='existing_chop'. Pulled in via Select CHOP (cross-container wires fail).
sample_secnumbernoSample window length in seconds the fingerprint is averaged over. (default: 4)
apply_top_opstringnoOptional path of a TOP to composite the chosen generator's output over (via a compositeTOP('over') built in apply_top_op's parent).
parent_pathstringnoParent COMP for the transient sampler and the dispatched generator. (default: /project1)
dry_runbooleannoWhen true: sample the audio, classify, and return the chosen mapping + params without instantiating the generator. (default: false)
force_familyauto | strobe_glitch | tunnel | kaleido | particle | ambient | …noOverride the heuristic and force a family; params still tuned from the fingerprint. (default: auto)
expose_controlsbooleannoForwarded to the dispatched generator's expose_controls flag. (default: true)

create_engine_comp mutates

Drop a TouchDesigner Engine COMP that loads an external .tox in a separate TD subprocess — an independent crash domain with its own cook + (optionally) a second GPU thread, ideal for hosting heavy or unstable subgraphs. Sets the .tox file, optional reload pulse (re-pulls the .tox once), perform-mode override, and color-map toggle. The .tox's own outTOP/outCHOP/outSOP/outDAT operators surface as connectors on the Engine COMP for downstream wiring. Complements make_portable_tox (which produces the shippable .tox). Note: sub-process spin-up forks a TD process — the first cook can be multi-second on slow disks; that is not a hang. par.reload / par.usecolormap / par.performmode are guarded with hasattr so unverified par names degrade to warnings rather than throwing.

ParameterTypeRequiredDescription
namestringnoNode name for the new Engine COMP. (default: engine1)
parent_pathstringnoParent COMP path the Engine COMP is created inside (default '/project1'). (default: /project1)
tox_pathstringyesPath to the .tox file the sub-engine loads. Forward-slash recommended; absolute or project-relative.
reloadbooleannoWhen true, pulse the Engine COMP's reload par so the .tox is re-pulled once at creation. (default: false)
use_color_mapbooleannoMirror the Engine COMP's color-map toggle (UNVERIFIED par name 'usecolormap' — guarded with hasattr). (default: false)
perform_modeauto | on | offno'on' forces the sub-engine to cook in perform mode; 'off' forces it off; 'auto' leaves the par at its default. (UNVERIFIED par name 'performmode' — guarded with hasattr). (default: auto)

create_dmx_fixture_pipeline mutates

Build a DMX/Art-Net (or sACN) output chain from a fixture list. For each fixture (rgb, rgbw, par64, movingHead8, movingHead16) creates a Constant CHOP with one named, default-valued channel per DMX slot (prefixed '<id>/<channel>'), inserts pad Constant CHOPs to keep DMX-slot alignment, merges them all into one stream, and drives a dmxoutCHOP (interface, universe, netaddress, rate). Returns the container + a JSON report with paths, fixtures, total channels, exposed controls (Universe / Rate / Net Address), and warnings. Per-fixture sliders are NOT auto-exposed — bind individual channels later with bind_to_channel / animate_parameter on op('rig_out')['fix1/r'] etc.

ParameterTypeRequiredDescription
namestringnoBase name for the container COMP. (default: dmx_rig)
parent_pathstringnoCOMP to create the DMX rig container in (default '/project1'). (default: /project1)
hoststring | nullnoTarget IP for Art-Net / sACN (maps to dmxoutCHOP netaddress). Null = leave default. (default: null)
universeintegernoDMX universe written to the dmxoutCHOP. (default: 1)
netartnet | sacnnoNetwork protocol — written to the dmxoutCHOP interface par. (default: artnet)
fpsnumbernoDMX refresh rate (dmxoutCHOP rate). (default: 40)
fixturesobject[]yesOrdered list of fixtures (sorted by startChannel at build time).

create_growth_system mutates

Build an L-system / vine-growth generator: a Script SOP iterates a context-free rewriting grammar from axiom for generations steps, then walks the resulting string as a 3D turtle to draw a polyline tree. Recognised symbols: F (forward draw), f (forward no draw), + - (yaw ± branchAngle), & ^ (pitch), \ / (roll), [ ] (push/pop state). Other symbols are no-op constants (use X/A/B as grammar variables that expand but don't draw). Multiple rules sharing a from symbol trigger weighted-random stochastic selection (weight defaults to 1; seed controls the RNG). The polyline tree is thickened with a Tube SOP, recentred, and rendered. Complements create_particle_flock (boids) and create_gpu_particle_field (curl-noise) as the deterministic CPU-geometry idiom. Returns a summary plus a JSON block with the container path, output path, rules DAT path, exposed controls, errors, warnings, and an inline preview.

ParameterTypeRequiredDescription
namestringnoContainer baseCOMP name. (default: growth_system)
parentstringnoParent network where the container is created. (default: /project1)
rulesobject[]noContext-free rewriting rules. Multiple rules sharing the same from symbol trigger weighted-random stochastic choice (weight defaults to 1). (default: [object Object])
generationsintegernoRewrite iterations. Capped at 7 because string length grows ~k^n and freezes the SOP cook. (default: 4)
axiomstringnoInitial string before rewriting. (default: F)
branchAnglenumbernoTurtle turn angle (degrees) for + / - / & / ^ / \ / / symbols. (default: 22.5)
step_lengthnumbernoWorld units per F stroke. (default: 0.15)
thicknessnumbernoTube SOP radius for the rendered branches. (default: 0.01)
colorobject[]noConstant MAT colour (RGB, 0..1). (default: 0.5,0.9,0.4)
seedintegernoRNG seed for stochastic rule selection. (default: 1)
expose_controlsbooleannoExpose Generations / BranchAngle / StepLength / Thickness on the container. (default: true)

import_shadertoy mutates

Build a GLSL TOP from a Shadertoy URL, ID, or pasted source. Wires iChannels (defaulting to noise placeholders), exposes Speed (and optional Mouse) controls, and captures a preview. First fetch on macOS may trigger an outgoing-connection permission prompt. Set TDMCP_SHADERTOY_KEY for reliable fetches; paste into raw_source to stay offline.

ParameterTypeRequiredDescription
shader_idstringnoShadertoy 6-char ID, e.g. 'XsXXDn'.
urlstringnoFull Shadertoy URL: https://www.shadertoy.com/view/<id>.
raw_sourcestringnoPasted Shadertoy-style fragment (must contain mainImage). Offline-safe.
parent_pathstringno(default: /project1)
namestringno(default: shadertoy)
resolutionobject[]no(default: 1280,720)
pixel_formatrgba8 | rgba16 | rgba32no(default: rgba8)
channelsobject[]no(default: ``)
expose_mouse_controlbooleanno(default: false)
expose_speed_controlbooleanno(default: true)
capture_previewbooleanno(default: true)
provenance_overrideobjectno

import_isf_shader mutates

Create a new TouchDesigner system container containing an ISF (.fs) shader as a GLSL TOP, companion DATs, and optional live controls. Accepts raw source, a local file path, or an http(s) URL; URL fetches are bounded by fetch_timeout_ms. Returns the container/GLSL/output paths, generated controls, provenance, warnings for inputs that need manual wiring, and an inline preview when capture_preview=true. Use create_glsl_shader for hand-written GLSL or import_shadertoy for Shadertoy sources.

ParameterTypeRequiredDescription
sourcestringyesISF (.fs) source: raw shader text, a local file path, or an http(s) URL.
source_kindauto | raw | file | urlnoOverride the source sniffer; 'raw' skips IO. (default: auto)
parent_pathstringnoContainer parent COMP path. (default: /project1)
namestringnoSystem container name (sanitized). Defaults to ISF DESCRIPTION or 'isf_shader'.
resolutionobject[]noGLSL TOP output resolution [width, height]. (default: 1280,720)
pixel_formatrgba8 | rgba16 | rgba32noPixel format for the generated GLSL TOP. (default: rgba8)
channel_overridesobject[]noOverride default placeholder noise for ISF image/audio inputs. (default: ``)
control_defaultsobjectnoOverride the ISF DEFAULT for any input at build time. (default: [object Object])
expose_controlsbooleannoExpose ISF inputs as live custom controls on the generated system container. (default: true)
capture_previewbooleannoCapture an inline preview after the shader is built; disable for faster headless runs. (default: true)
fetch_timeout_msintegernoTimeout in milliseconds for URL sources; local files and raw source do not need network access. (default: 8000)

create_fluid_sim mutates

Build a real-time 2D fluid/ink/dye simulation (stable-fluids style: semi-Lagrangian advection + Jacobi pressure solve + gradient-subtract projection + dye advection) as a stack of GLSL TOPs in feedback loops inside a new baseCOMP under parent_path. Exposes artist-facing controls (dye color, injection radius/strength, viscosity, dissipation, pressure iterations, inject U/V) and optionally binds a CHOP at audio_path so audio drives the dye injection strength. With injection_mode='auto', a slow LFO drives the splat point so the sim shows life with no input. Returns a summary plus a JSON block with the container path, created node paths, the dye_out output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
resolution256 | 512 | 1024noSim grid resolution (square). 512 is safe on integrated GPUs. (default: 512)
dye_colorstringnoInjected dye color as a '#rrggbb' hex string. (default: #ff3a8c)
injection_radiusnumbernoRadius of the dye/force splat in UV units (0.01–0.5). (default: 0.08)
injection_strengthnumbernoMultiplier on dye + velocity splat per frame (0–2). (default: 1)
viscositynumbernoVelocity dissipation per frame (0–1). Higher = thicker fluid. (default: 0)
dissipationnumbernoDye decay per frame (0.9–1.0). <1 fades trails. (default: 0.995)
pressure_iterationsintegernoJacobi iterations per frame (1–60). Higher = more incompressible. (default: 20)
injection_modeauto | mouse | audio | staticnoHow the splat point/strength is driven. (default: auto)
audio_pathstringnoOptional CHOP path; channel 0 multiplies injection strength when set.
expose_controlsbooleannoAuto-expose an artist-facing control panel on the container. (default: true)
parent_pathstringnoParent network where the fluid_sim container is created. (default: /project1)

image_to_particles mutates

Turn any image (a file path or an existing TOP) into a GPU particle field: each particle's rest position is its pixel in the source and (by default) its colour is sampled from that pixel. A spring force pulls particles toward their rest pixel; an optional audio chain scatters them away and lets them spring back, producing the iconic 'image dissolves into points on the drop, then re-forms' VJ look. Builds a new baseCOMP holding a downsampled source TOP, a one-shot rest-position GLSL TOP, velocity + position feedback loops (RGBA32float), an instanced Geometry COMP, Render, and a Null output. This is the only particle tool seeded by image/video pixels (rest positions + per-pixel colour); pick a sibling instead when particles are NOT driven by an image: create_gpu_particle_field for a free noise/curl/gravity drift field, create_particle_flock for boids/flocking, create_pop_particle_system for TouchDesigner's native POP particle network, create_particle_system for a simple CPU emitter. Default source is TD's stock Banana.tif; default audio source is 'none' (image idles statically) — 'file' and 'device' are opt-in (the latter may pop the macOS mic-permission dialog). Returns a summary plus a JSON block with the container path, particle count, output path, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourceobjectnoImage source: { kind:'file', path } loads a moviefileinTOP, { kind:'top', path } references an existing TOP. Default uses TD's stock Banana.tif from app.samplesFolder. (default: [object Object])
sideintegernoParticle grid edge; count = side². 192 → 36 864 particles. The source TOP is resampled to side×side so each texel maps 1:1 to one particle. (default: 192)
particle_sizenumbernoRadius of each instanced dot (TOP instancing applies translate only, so size lives on the source sphere SOP). (default: 0.015)
scatter_strengthnumbernoAudio impulse magnitude. 0 = particles sit perfectly on the image. (default: 6)
spring_stiffnessnumbernoForce pulling each particle toward its rest pixel. Higher snaps back faster. (default: 4)
dampnumbernoPer-frame velocity damping. (default: 0.92)
audio_sourcenone | file | devicenoDrives the scatter impulse. 'none' = image idles statically. 'file' = audiofileinCHOP (set audio_file). 'device' = audiodeviceinCHOP (opt-in; may pop the macOS mic-permission dialog). (default: none)
audio_filestringnoAudio file path when audio_source='file'. (default: ``)
color_modeimage | mono | tintno'image' = particle colours sampled from source pixels (via instancecolorop). 'mono' = white points. 'tint' = single colour multiplied by luminance. (default: image)
tint_colorobject[]noRGB used when color_mode='tint'. (default: 1,1,1)
expose_controlsbooleannoWhen true, expose live PointSize / SpringStiff / ScatterStr / Damp / Zoom knobs. (default: true)
parent_pathstringnoParent network where the container is created. (default: /project1)

create_dither mutates

Build a retro dither effect: ordered Bayer (2×2/4×4/8×8), checker, noise, or single-pass error-diffusion — quantising to a 2/4/16-colour palette. Supports mono, duotone (Game-Boy-green default), or RGB quantisation mode. Creates a new baseCOMP under parent_path holding the source (or a self-contained noise source), a GLSL TOP with an inline shader, and a Null output. Exposes Mix, Threshold, and Scale knobs for live tweaking. Returns a summary, node paths, exposed controls, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoBase name for the created container. (default: dither)
parent_pathstringnoParent COMP path the dither container is created inside. (default: /project1)
sourcestringnoAbsolute path of an existing TOP to dither (e.g. '/project1/movie1'). Pulled in via a Select TOP. If omitted, a self-contained animated colour-noise source is used (no device permissions).
patternbayer2 | bayer4 | bayer8 | checker | noise | error_diffusionnoThreshold pattern. bayer2/4/8: ordered Bayer matrices (2×2/4×4/8×8); checker: alternating grid; noise: pseudo-random hash; error_diffusion: single-pass 3×3 neighbourhood approximation. (default: bayer4)
bits1 | 2 | 4noBit depth per channel: 1=2 levels, 2=4 levels, 4=16 levels. (default: 1)
palette_modemono | duotone | rgbnomono: luminance → low/high colour. duotone: same with hue tint. rgb: quantise each channel independently using bits. (default: duotone)
low_colorobject[]noOff/dark palette colour [r,g,b] 0–1. Used in mono and duotone modes. (default: 0.05,0.06,0.1)
high_colorobject[]noOn/light palette colour [r,g,b] 0–1. Game-Boy-green default. (default: 0.85,0.95,0.8)
thresholdnumbernoThreshold bias applied on top of the pattern. (default: 0.5)
scalenumbernoPattern scale in pixels — larger = chunkier dither. (default: 1)
mixnumbernoBlend between original (0) and dithered output (1). Live-tweakable. (default: 1)
resolutionobject[]noOutput resolution [width, height] in pixels. (default: 1280,720)

create_jfa_voronoi mutates

Instantiate a self-contained Jump-Flooding-Algorithm Voronoi generator (stained-glass / cell pattern) as GLSL TOPs — seeds → jfa_init → K halving passes → color_pass → null. Exposes live PaletteMode / SeedCount / Speed / Jitter / EdgeThickness / EdgeColor / ColorA / ColorB controls and previews the output TOP. Pass count auto-derives from resolution (log2(max(w,h))); override with step_count.

ParameterTypeRequiredDescription
seed_countintegernoNumber of Voronoi seeds (4..512). Drives the seed TOP width (next pow-2). (default: 48)
speednumbernoAnimation speed multiplier driving uTime drift of seeds. Live 'Speed' control. (default: 0.25)
palette_moderandom | from_image | duotonenorandom = HSV per seed; duotone = mix(ColorA, ColorB); from_image = sample image. (default: random)
palette_imagestringnoOp path to a TOP sampled at seed UVs when palette_mode='from_image'. (default: ``)
edge_thicknessnumbernoCell border width in UV units (0..0.05). Live 'EdgeThickness' control. (default: 0.004)
edge_colorstringnoBorder colour as hex (e.g. '#000000'). Live 'EdgeColor' RGB swatch. (default: #000000)
jitternumbernoPer-seed drift amplitude (0 = static lattice). Live 'Jitter' control. (default: 0.6)
color_astringnoDuotone primary hex. Live 'ColorA' swatch. (default: #ff3366)
color_bstringnoDuotone secondary hex. Live 'ColorB' swatch. (default: #33ccff)
resolutionobject[]noOutput resolution [width, height]; JFA pass count auto-derived from max axis. (default: 1280,720)
step_countintegernoManual JFA pass count (0 = auto = ceil(log2(max(w,h)))). (default: 0)
expose_controlsbooleannoExpose live PaletteMode/SeedCount/Speed/Jitter/EdgeThickness/EdgeColor/ColorA/ColorB. (default: true)
parent_pathstringnoParent COMP path; container 'jfa_voronoi' is created inside. (default: /project1)

setup_tdableton mutates

Wire up an Ableton Live bridge inside a tdmcp-managed container. Auto mode probes for the official TDAbleton Palette COMP; if found, clones it and surfaces tempo/beat/track/device channels as binding-ready Null CHOPs. Falls back to a full OSC fabric (oscinCHOP + selectCHOP fan-out) if the Palette isn't available. Either branch exposes the same Null CHOP names at the container boundary so downstream bind_to_channel calls work regardless of which path was taken.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to host the container (default '/project1'). (default: /project1)
namestringnoContainer baseCOMP name. (default: tdableton)
modeauto | palette | oscnoBridge mode. 'auto' = probe palette then fall back to OSC. 'palette' = require Palette (warn on miss, still builds OSC fallback). 'osc' = skip palette probe entirely. (default: auto)
hoststringnoAbleton host IP for the OSC Out CHOP. (default: 127.0.0.1)
port_inintegernoUDP port TD listens on (Live → TD). (default: 9001)
port_outintegernoUDP port TD sends to (TD → Live). (default: 9000)
track_countintegernoNumber of /live/track/<i>/volume channels to materialise as bind-ready Nulls. (default: 8)
expose_devicesbooleannoIf true, generate /live/track/<i>/device/<j>/parameter/<k> listener rows up to device_param_count. (default: false)
device_param_countintegernoPer-track device-param count to materialise (used only when expose_devices). (default: 0)
include_masterbooleannoAdd Null CHOPs for /live/master/volume and /live/master/crossfader. (default: true)
include_tempobooleannoAdd Null CHOPs for tempo, beat, and bar. (default: true)

create_chop_recorder mutates

Build a CHOP recorder/player container that captures a source CHOP's channels over a fixed window using a Trail CHOP, snapshots the trail into a Table DAT on Stop, and plays the take back via a Datto CHOP indexed by a Timer CHOP–driven Lookup CHOP, terminating on a Null CHOP ready for bind_to_channel. Re-entrant: re-running with the same name updates controls without rebuilding. The last take is persisted in comp.store so it survives a .toe reload. Large takes (nchan × samples > 250k) are saved to disk instead of stored in the .toe. Note: time-dependent playback reads 0 when the TD timeline is paused — that is expected behavior.

ParameterTypeRequiredDescription
namestringyesContainer name, e.g. 'chop_rec_hand'
parentstringnoParent COMP path, defaults to '/'
sourceChopstringyesPath to source CHOP, e.g. '/project1/null_audio'
lengthSecondsnumbernoTrail window + take duration in seconds (0.25–120) (default: 8)
takeNamestringnoStorage key for persisted take (default: take1)
loopbooleannoWhen true, timer cycles; when false, plays once then holds (default: true)
recordOnCreatebooleannoIf true, sets Record=1 on creation so the trail begins filling immediately (default: false)
autoBindstringnoOptional 'opPath:parName' to auto-bind the Null CHOP output channel

create_video_scopes mutates

Build a broadcast-style video engineering monitor with multiple scope panels: waveform (luma trace), RGB parade (per-channel traces), and vectorscope (UV chrominance scatter). Each panel renders as a CHOP-to-SOP scope line through an orthographic camera and Render TOP, composited into a single output TOP via layoutTOP. Companion to create_waveform (audio) and create_spectrum (audio frequency). Default source is a synthetic test pattern (no device permission needed); 'device' is opt-in for live camera. The histogram panel here is unsupported in TD 099 and silently skipped — for a working luminance/RGB histogram use the standalone create_histogram_scope instead.

ParameterTypeRequiredDescription
sourceexisting_top | test_pattern | file | devicenoVideo source. 'test_pattern' = synthetic Banana.tif (no permission needed). 'existing_top' = reuse a TOP you already have (provide existing_top_path). 'file' = a video/image file. 'device' = live camera (videodeviceinTOP) — may hang TD on a macOS permission modal. (default: test_pattern)
existing_top_pathstringnoPath of an existing TOP to scope (source='existing_top').
video_file_pathstringnoVideo/image file path (source='file').
enable_waveformbooleannoShow the luminance waveform panel. (default: true)
enable_paradebooleannoShow the RGB parade panel. (default: true)
enable_vectorscopebooleannoShow the UV vectorscope panel. (default: true)
enable_histogrambooleannoShow the luma histogram panel. Currently unsupported — TD 099 has no histogramCHOP (only histogramPOP). Pass true is accepted but the panel is silently skipped; re-enable once analyzeTOP histogram mode is confirmed. (default: false)
layoutgrid_2x2 | row | columnnoHow enabled panels arrange in the output composite. (default: grid_2x2)
panel_resolutionintegernoEach scope panel's square side in pixels. (default: 512)
output_resolutionobject[]noFinal composited TOP [width, height]. (default: 1024,1024)
trace_colorstringnoPhosphor colour for scope lines as a hex string. (default: #00ff88)
expose_controlsbooleannoBind live controls: Gain, TraceColor, panel-enable toggles. (default: true)
gainnumbernoPre-scope luma gain — zooms the trace vertically (Level TOP brightness1). (default: 1)
parent_pathstringnoParent COMP path; the scopes container is created as 'video_scopes' inside it. (default: /project1)

create_sdf_field mutates

Build a programmable signed-distance-field (SDF) raymarcher in TouchDesigner as a self-contained GLSL TOP. Compose a CSG tree of sphere / box / torus primitives with union / intersect / subtract boolean ops and optional smooth blending. Exposes live CameraZ / Speed / StepCount / Intensity / Rotate / ColorA / ColorB / Background controls and previews the output.

ParameterTypeRequiredDescription
primitivesobject[]noCSG tree of SDF primitives (max 16). First prim is always union (root). Each subsequent prim is combined with the running fold via its op. (default: [object Object])
camera_znumbernoCamera distance from origin (uCameraZ). Live 'CameraZ' control. (default: 4)
camera_targetobject[]noLook-at point baked as GLSL constant (not a live control). (default: 0,0,0)
speednumbernoAnimation speed multiplier (drives uTime). Live 'Speed' control. (default: 1)
step_countintegernoRaymarch iterations (uSteps); SDF CSG benefits from more steps. Live 'StepCount'. (default: 96)
intensitynumbernoOutput brightness multiplier (uIntensity). Live 'Intensity' control. (default: 1)
light_directionobject[]noLight direction normalised in shader — baked as GLSL constant. (default: 0.6,0.8,0.4)
color_astringnoNear colour hex (e.g. '#33ccff'). Live RGB swatch 'ColorA'. (default: #33ccff)
color_bstringnoFar colour hex (e.g. '#ff2266'). Live RGB swatch 'ColorB'. (default: #ff2266)
backgroundstringnoBackground / miss colour hex. Live RGB swatch 'Background'. (default: #06080c)
rotate_scenenumbernoY-axis rotation speed (radians/s applied to SDF space via uRotate * uTime). Live 'Rotate'. Reads 0 when TD timeline is paused. (default: 0)
resolutionobject[]noOutput resolution [width, height] of the GLSL TOP. (default: 1280,720)
expose_controlsbooleannoExpose live CameraZ/Speed/StepCount/Intensity/Rotate/ColorA/ColorB/Background controls. (default: true)
parent_pathstringnoParent COMP path the self-contained 'sdf_field' container is created inside. (default: /project1)

create_strange_attractor mutates

Build a strange-attractor deferred geometry generator: a Script CHOP integrates a chosen ODE system (Lorenz / Aizawa / Halvorsen) with configurable sub-steps and maintains a rolling ring buffer of trail_length points. A Script SOP converts the channels into one open polyline; an optional Tube SOP thickens it for shaded render inside a Geometry COMP + Camera + Light + Render TOP pipeline. Closing Roadmap Milestone 4. Complements create_growth_system (L-systems) and create_particle_flock (boids) as the deterministic CPU-geometry idiom. With TD timeline paused the integrator pauses too (time-dependent) — resume playback to continue. Returns a summary plus a JSON block with the container path, output path, exposed controls, errors, warnings, and an inline preview.

ParameterTypeRequiredDescription
namestringnoContainer baseCOMP name. (default: strange_attractor)
parentstringnoParent network where the container is created. (default: /project1)
attractorlorenz | aizawa | halvorsennoODE system to integrate: lorenz (classic butterfly), aizawa, or halvorsen. (default: lorenz)
trail_lengthintegernoPoints retained in the rolling ring buffer. Higher = longer ribbon, costlier SOP cook. (default: 4000)
steps_per_frameintegernoRK-style integration sub-steps per cook frame (controls speed and smoothness). (default: 6)
dtnumbernoIntegrator time step. Smaller = smoother but slower trajectory. (default: 0.005)
seedobject[]noInitial state [x, y, z]. A tiny non-zero offset avoids the Lorenz fixed-point stall at the origin. (default: 0.1,0,0)
paramsobjectnoOverride ODE constants. Lorenz: sigma, rho, beta. Aizawa: a, b, c, d, e, f. Halvorsen: a. Unknown keys are ignored.
thicknessnumbernoTube SOP radius. Set to 0 to render the raw polyline (no Tube SOP — lighter on GPU). (default: 0.015)
colorobject[]noConstant MAT colour (RGB, 0..1). (default: 0.6,0.9,1)
bg_colorobject[]noRender TOP background colour (RGB, 0..1). (default: 0.02,0.02,0.04)
auto_framebooleannoAuto-position camera based on attractor bounding radius (deterministic; no live bound query). (default: true)
expose_controlsbooleannoExpose StepsPerFrame / Dt / TrailLength / Thickness as custom parameters on the container. (default: true)

create_optical_flow mutates

Build a CPU motion-energy field from a video source (cheap drop-in for displacement / particle chains; NOT a real dense optical-flow solver). Output is a single-channel TOP: bright = motion, mid-grey = still, computed as gain × (current − previous luminance) + 0.5. In direction_from='edges' mode the result is multiplied by a Sobel edge map for a coarse where-is-motion-relative-to-edges estimate — still not a true dx/dy gradient flow. No CUDA, no external models — built entirely from stock TD TOPs: blurTOP (pre-blur), monochromeTOP, cacheTOP (previous-frame delay), compositeTOP subtract (frame diff), optional edgeTOP cross-multiply, mathTOP (sensitivity gain + 0.5 recenter), feedbackTOP+levelTOP (temporal smoothing). Defaults to TD's bundled Mosaic.mp4 test clip so the chain builds and previews standalone without a live camera (avoids macOS permission modal). Output is a nullTOP. Reads 0 when TD timeline is paused and the source is static — that is correct behavior. Returns a summary plus JSON with node paths, controls, warnings, and an inline preview image.

ParameterTypeRequiredDescription
namestringnoName of the container COMP created under parent_path. (default: optical_flow)
parent_pathstringnoParent COMP path the optical flow container is created inside. (default: /project1)
sourcestringnoAbsolute path of a TOP to analyze for motion (pulled in via selectTOP so it can live anywhere). Omit to use TD's bundled Mosaic.mp4 test clip so the chain previews standalone without a live camera (avoids macOS permission hang).
resolutionobject[]noOutput resolution [width, height] in pixels. Default is half-HD — CPU optical flow is bandwidth-bound; larger resolutions are slower. (default: 640,360)
sensitivitynumbernoMultiplier on the raw frame difference (before the 0.5 recenter). Higher values pick up subtler motion (and more noise). Maps to mathTOP gain. (default: 4)
smoothingnumbernoTemporal smoothing on the flow output (feedbackTOP cross-fade). 0 = raw per-frame flow (jittery); 1 = ghosted/laggy. (default: 0.6)
blurnumbernoSpatial pre-blur (pixels) on source before differencing — suppresses high-frequency camera noise. Maps to blurTOP size. (default: 2)
direction_fromdiff | edgesno'diff' (default, cheapest): scalar frame-difference luminance (temporal motion energy). 'edges': cross frame-diff with Sobel edgeTOP for a coarse where-is-motion-relative-to-edges estimate — more flow-like but still a scalar, not a dx/dy vector, and ~2× cost. (default: diff)

create_histogram_scope mutates

Build a luminance (and optional per-channel RGB) histogram video scope for any TOP. Computes the histogram on the GPU using a GLSL TOP (bins×1 output), samples into a CHOP, normalises, and renders through choptoSOP → renderTOP. Output is a single Null TOP ready for previews or bind_to_channel. Implements the roadmap Milestone 2 histogram scope panel as a standalone focused tool. This is the single-scope, working histogram (the one create_video_scopes can't render in TD 099); for a combined waveform/parade/vectorscope monitor use create_video_scopes.

ParameterTypeRequiredDescription
sourceexisting_top | test_pattern | file | devicenoVideo source. 'test_pattern' = synthetic Banana.tif (no permission needed). 'existing_top' = reuse a TOP you already have (provide existing_top_path). 'file' = a video/image file. 'device' = live camera — may hang TD on a macOS permission modal. (default: test_pattern)
existing_top_pathstringnoPath of an existing TOP to scope (source='existing_top').
video_file_pathstringnoVideo/image file path (source='file').
modeluma | rgbnoHistogram mode. 'luma' = single luminance trace. 'rgb' = three overlaid per-channel traces. Note: rgb mode is informational only in v1 — ships as luma with rgb flag in extra. (default: luma)
binsintegernoNumber of histogram bins (16..512). Drives the GLSL TOP output width. Changing after build requires a rebuild. (default: 64)
gainnumbernoPre-scope brightness (Level TOP brightness1 parameter). (default: 1)
log_scalebooleannoCompress tall peaks with log(1+x) in the normalisation Math CHOP. Changing after build requires a rebuild. (default: false)
trace_colorstringnoPhosphor tint colour for luma mode as a hex string. Ignored when mode='rgb'. (default: #00ff88)
bar_stylebars | linenoReserved — informational only in v1. Both values currently emit the same choptoSOP-fed render (a thin vertical strip per bin); a true polyline 'line' mode is planned. Setting this changes the value recorded in extra but does not yet change the SOP topology. (default: bars)
resolutionobject[]noOutput Null TOP size [width, height]. (default: 1024,512)
expose_controlsbooleannoBind live controls: Gain, TraceColor (luma mode), LogScale (informational). (default: true)
parent_pathstringnoParent COMP path; the histogram scope container is created as 'histogram_scope' inside it. (default: /project1)

create_safety_blackout_chain destructive

Build a live-show safety primitive at the very end of the master output chain: deterministic fade-to-black over a configurable time, optional emergency single-frame hard-cut, optional hotkey + external watchdog trigger, and symmetric fade-in recovery. All reactivity is parameter-driven (Speed + Lookup CHOP + Math/Logic CHOPs) — no Python runs at cook time, so the chain is ALLOW_EXEC=0-safe. Complements create_panic (per-source kill+freeze) by being the master-output dimmer with grace, recovery, and a watchdog hook. Returns the container, source, dim, emergency-gate, composite, and output node paths plus the trigger merge/target/speed/lookup nodes.

ParameterTypeRequiredDescription
input_pathstringnoAbsolute path of the master TOP to protect. Pulled in via a Select TOP (TD wires can't cross COMPs). If omitted, a Ramp TOP test source is used so the chain still builds + previews.
parent_pathstringnoParent COMP the safety chain is built inside (default '/project1'). (default: /project1)
fade_secondsnumbernoTime the soft fade-to-black (and symmetric fade-in) takes. 0 = instant. (default: 1.5)
fade_curvelinear | ease_in | ease_out | ease_in_out | s_curvenoInterpolation shape for the fade ramp, applied via a Lookup CHOP curve so the ramp is deterministic and Python-free at cook time. (default: ease_in_out)
initial_statelive | black | heldnoBoot state. 'live' = pass-through, 'black' = Blackout toggle on at load, 'held' = Hold toggle on (good for show open before first cue). (default: live)
arm_emergency_snapbooleannoExpose an Emergency momentary pulse that bypasses the fade and hard-cuts to black. (default: true)
hotkeystring | nullnoKeyboard In CHOP key spec that toggles Blackout (e.g. 'ctrl.b'). null/empty disables — hotkey is opt-in safe, requires a modifier. (default: ctrl.b)
watchdog_channelstringnoOptional absolute CHOP path + channel ('node:channel') — when non-zero, forces Blackout on. Lets external monitors trigger blackout deterministically without Python.
recovery_modemanual | auto_on_clearnoWhen the watchdog returns to 0: 'manual' keeps it black until the artist clears it; 'auto_on_clear' fades back in. (default: manual)
show_safe_labelstring | nullnoOptional caption baked into the black frame (Text TOP composited over the dimmed output). Empty/null = no caption. (default: SHOW SAFE)
expose_controlsbooleannoBuild the control panel with Blackout / Emergency / Fade Seconds / State LED. (default: true)

create_setlist_runner mutates

Layer-1 wall-clock setlist player for rehearsed VJ shows. Pass rows[] of (source TOP, duration_seconds, transition_seconds) and the tool builds a baseCOMP containing N Select TOPs (one per row), a Switch TOP, a Cross TOP for crossfaded boundaries (hard cut when transition_seconds=0), an optional NOW/NEXT/remaining Text TOP HUD composited over the program, a Timer CHOP + CHOP Execute engine that auto-advances rows on wall-clock time, and live custom params Play/Row/Skip/Prev/Loop/Defaulttransition for stage overrides. Output is a Null TOP at &lt;parent&gt;/&lt;name&gt;/out. Fills the gap between create_clip_launcher (manual grid) and create_cue_sequencer (musical bars).

ParameterTypeRequiredDescription
rowsobject[]yesOrdered setlist rows. Each row: { source, duration_seconds, transition_seconds }.
sources_mapobjectnoOptional { logical → TOP path } to allow human-readable row sources like 'actA' instead of an absolute path. (default: [object Object])
default_transitionnumbernoFallback transition_seconds (in seconds) for rows that omit it. (default: 0.5)
loopbooleannoWhen the last row ends: wrap to row 0 (true) or stop (false). (default: true)
autostartbooleannoStart playing immediately on build. (default: true)
show_hudbooleannoBuild the NOW/NEXT/remaining Text TOP HUD as a child output. (default: true)
namestringnoEngine container name. (default: setlist)
parent_pathstringnoParent COMP path where the engine COMP is created (e.g. '/project1'). (default: /project1)

create_show_failover mutates

Build a live-show watchdog: a Switch TOP (blend=1 cross-dissolve) between a primary source TOP (NDI/camera/Spout/Syphon path, or a synthetic noiseTOP when none is given) and an MP4 fallback (or a constantTOP when no file is given), driven by an Info CHOP + watchdog CHOP-Execute DAT that trips on cook stall (total_cooks delta stays flat for stall_ms) and, optionally, primary cook errors. A Filter CHOP smooths the integer Switch index into a fade_ms crossfade. Sticky-recover auto-returns to primary after recover_ms healthy; otherwise stays on fallback until Reset. Exposes Active / Stall_Ms / Fade_Ms / Sticky_Recover / Reset / Force_Fallback controls and a Null CHOP of status channels for bind_to_channel. Returns the container, output TOP, status CHOP, control names, and the operator paths.

ParameterTypeRequiredDescription
primary_pathstringnoAbsolute TD path to the primary source TOP (NDI/camera/Spout/Syphon/any TOP). Empty → builds a synthetic noiseTOP so the network is offline-safe. (default: ``)
fallback_filestringnoFilesystem path to the fallback MP4 / still. Empty → a constantTOP (dark grey) is used as a safe fallback. (default: ``)
stall_msintegernoConsecutive ms of zero cook progress before failover trips. (default: 500)
fade_msintegernoCrossfade duration in ms (0 = hard cut). Drives the Filter CHOP that smooths the Switch TOP index. (default: 250)
sticky_recoverbooleannoWhen true, auto-switch back to primary after recover_ms of healthy cooking. When false, stays on fallback until Reset is pressed. (default: false)
recover_msintegernoHealthy duration before auto-recover (only used when sticky_recover=true). (default: 2000)
watch_errorsbooleannoAlso trip on primary cook errors (errors &gt; 0), not just on stall. (default: true)
status_overlaybooleannoComposite a small LIVE/FALLBACK badge (textTOP + compTOP) into the output. (default: true)
parent_pathstringnoWhere to create the show_failover system container. (default: /project1)

create_pose_reactive mutates

Body-pose binder parallel to bind_audio_reactive: take the 33-sample MediaPipe pose CHOP produced by setup_body_tracking and derive scalar reactive channels (right-hand height, arms openness, elbow angle, hand velocity, …) on a Null CHOP ready for bind_to_channel. Each channel is a Select→Math→Hold→Filter→Limit→Rename chain inside a fresh baseCOMP, all merged into one null_out. Supported metrics: y/x/z (1 landmark), distance/openness (2 landmarks), angle (3 — vertex middle), velocity (1, time-derivative). Optional bindings[] writes expression-mode binds directly onto target parameters (same shape as bind_to_channel; failures collected as warnings, not throws). Exposes a Reactive custom page with Smoothing/Intensity/Bypass/Gate_<name> knobs. Heads-up: MediaPipe's landmarks are 2D (z near-zero) — z/distance/angle/velocity are unreliable unless the adapter exposes worldLandmarks; the tool emits a warning when it detects a constant tz. Run setup_body_tracking first.

ParameterTypeRequiredDescription
source_chopstringyesPath to the 33-sample MediaPipe pose CHOP (tx/ty/tz/confidence channels) — typically the Null produced by setup_body_tracking.
channelsobject[]yesReactive channels to derive. Landmark IDs cheat-sheet — 0 nose, 11 L-shoulder, 12 R-shoulder, 13 L-elbow, 14 R-elbow, 15 L-wrist, 16 R-wrist, 23 L-hip, 24 R-hip, 25 L-knee, 26 R-knee, 27 L-ankle, 28 R-ankle.
parent_pathstringnoParent COMP path. (default: /project1)
container_namestringnoContainer baseCOMP name (created under parent_path). (default: pose_reactive)
bindingsobject[]noOptional list of parameter paths to bind to the derived channels (expression-mode bind, like bind_audio_reactive).
smoothingnumberno0=raw, 1=very smoothed (drives filter width). (default: 0.25)
intensitynumbernoMaster reactivity scaler (0=off, 1=normal, 2=strong). (default: 1)
expose_controlsbooleannoAppend Smoothing/Intensity/Bypass/Gate_<name> knobs to the container. (default: true)

create_pose_controlnet_driver mutates

Render a canonical OpenPose-colored stick figure TOP (per-limb RGB lines + per-joint colored discs on a black background, default 512×512) from an existing pose CHOP produced by create_pose_tracking. The render is GPU-rasterized in a single GLSL TOP that samples the pose CHOP via a CHOP-to-TOP. Optionally auto-wires the output to a Syphon/Spout or NDI sender for a downstream Stable Diffusion / ComfyUI / StreamDiffusion ControlNet node. No model inference — this tool produces the driver conditioning image that ControlNet consumes.

ParameterTypeRequiredDescription
sourceexisting_tracker | syntheticnoWhere the pose stream comes from. 'existing_tracker' reads a 33-sample pose CHOP at pose_chop_path. 'synthetic' auto-spins-up a synthetic Script CHOP inside this container for device-free preview. (default: existing_tracker)
pose_chop_pathstringnoRequired when source='existing_tracker'. Absolute TD path to the canonical 33-sample pose CHOP (tx/ty/tz/confidence).
resolution512 | 768 | 1024noSquare render size. ControlNet SD1.5 wants 512; SDXL wants 768/1024. (default: 512)
joint_radiusnumbernoFilled-disc radius (px) for each keypoint joint. Exposed as live JointRadius knob. (default: 6)
limb_thicknessnumbernoLine thickness (px) for each limb. Exposed as live LimbThickness knob. (default: 8)
coordinate_spacenormalized | worldnoHow to map landmark tx/ty to pixel space. 'normalized' maps [-1,+1] to full square. 'world' recenters using hip_midpoint and auto-scales to body height. (default: normalized)
mirrorbooleannoFlip horizontally (selfie cam vs. ControlNet expectation). (default: false)
confidence_gatenumbernoSkip drawing landmarks/limbs whose endpoint confidence falls below this. Exposed as live knob. (default: 0.3)
color_presetopenpose_coco | openpose_body25 | customnoCanonical OpenPose 18-keypoint COCO palette by default. (default: openpose_coco)
custom_limb_colorsobject[][]noWhen color_preset='custom'. Length must equal 17 (limb count).
custom_joint_colorsobject[][]noWhen color_preset='custom'. Length must equal 18 (joint count).
output_modeinternal | syphon_spout | ndinoWhen 'internal' stops at a Null TOP. When 'syphon_spout'/'ndi' adds an FM-01 external sender. (default: internal)
sender_namestringnoSender/source name advertised on the network when output_mode != 'internal'. (default: tdmcp_controlnet_pose)
expose_controlsbooleannoExpose live JointRadius, LimbThickness, ConfidenceGate, Mirror knobs. (default: true)
parent_pathstringnoParent network for the pose_controlnet_driver baseCOMP. (default: /project1)

create_ascii_render mutates

Turn any TOP into a character-grid ASCII render: quantise input luminance into a (W/cell × H/cell) grid, then look up each glyph from a monospace character atlas. Supports mono, source-color (per-cell tint), and two-color (lerp by luminance) modes. Phosphor-green default for the Severance / CRT terminal look. Creates a resolutionTOP (cells), textTOP (atlas), glslTOP, and nullTOP output inside a new baseCOMP. Exposes Mix, CellSize, and Charset controls.

ParameterTypeRequiredDescription
namestringnoBase name for the created container. (default: ascii)
parent_pathstringnoParent COMP path the ASCII render container is created inside. (default: /project1)
sourcestringnoAbsolute path of an existing TOP to render as ASCII (e.g. '/project1/movie1'). If omitted, a self-contained animated colour-noise source is used (no device permissions).
charsetstringnoDark→light glyph ramp. Min 2 chars, max 32. Leading spaces add more 'black' room. (default: .:-=+*#%@)
cell_sizeintegernoPixel size of each character cell. min 4, max 64. (default: 16)
color_modemono | source-color | two-colornomono: fixed fg on bg; source-color: per-cell average tint; two-color: lerp(bg,fg) by luminance. (default: source-color)
fg_colorobject[]noForeground glyph colour [r,g,b] 0–1. Phosphor-green default. Used in mono/two-color. (default: 0.85,0.95,0.8)
bg_colorobject[]noBackground colour [r,g,b] 0–1. Used in all modes. (default: 0.02,0.03,0.04)
fontstringnoMonospace font fed to the atlas textTOP. (default: Courier New)
mixnumbernoBlend between original (0) and ASCII output (1). Live-tweakable. (default: 1)
resolutionobject[]noOutput resolution [width, height] in pixels. (default: 1280,720)

create_phrase_locked_cue_engine mutates

Build a DJ/VJ phrase-quantized cue-lock engine. Any incoming pulse CHOP (Button, MIDI In, OSC In, composeCueList trigger) is queued FIFO and fired on the next 1/2/4/8/16/32/64-bar phrase boundary derived from the global project tempo. Live controls: Active (on/off gate), PhraseLength (live retune), Flush (clear queue), QueueDepth (display). Mode 'next' fires on the first upcoming boundary; 'aligned' locks to the project-start phrase grid. Pairs with create_tempo_sync upstream and bind_to_channel / manage_cue downstream. Output is a 0/1 trigger Null CHOP at <container>/out.

ParameterTypeRequiredDescription
pending_chop_pathstringyesPath to a CHOP whose first channel is the 'pending cue' pulse. Every time it rises 0→1 a cue is enqueued; the gated trigger fires it on the next phrase boundary. Wire a Button COMP, OSC In CHOP, MIDI In CHOP, or composeCueList trigger into this channel.
phrase_length_bars1 | 2 | 4 | 8 | 16 | 32 | 64noPhrase length in bars. 16 is the DJ/VJ standard for builds/drops. Restricted to powers of 2 (1/2/4/8/16/32/64) — the canonical phrase grid; arbitrary values break the modulo lock. (default: 16)
quantize_modenext | alignedno'next' (default): fire on the NEXT bar where (bar % phrase_length == 0), which is the upcoming phrase downbeat. 'aligned': only fire at a phrase downbeat that is also bar 1 of the bar-1-anchored phrase grid (bar % phrase_length == 0 AND bar >= phrase_length) — strict alignment from project start. For most live use, 'next' is what you want. (default: next)
queue_capacityintegernoMax queued pending cues. Extra pulses while at capacity are dropped (warning logged in storage). (default: 8)
expose_controlsbooleannoExpose live PhraseLength / Active / Flush / QueueDepth controls on the engine container. (default: true)
namestringnoEngine container name. (default: phrase_lock)
parent_pathstringnoParent COMP. Self-contained engine container is created here. (default: /project1)

create_pop_particle_system mutates

Build a complete POP particle simulation (particle_pop → feedback_pop → lookup_texture_pop → field_pop → null_pop) inside a new baseCOMP, wire a render rig (poptoSOP → geometryCOMP → renderTOP → nullTOP), and expose EmissionRate, Lifetime, FeedbackGain, and ForceTexture live controls. When force_texture_path is omitted, a noiseTOP is created inside the container as the default force source so the chain always cooks. Supports three output modes: 'particles' (particle render), 'field' (field_pop visualization), and 'composite' (compositeTOP add of both). POP chain creation is delegated to build_pop_chain (Layer 2); this tool adds only the render rig and control exposure. This is the only particle tool built on TouchDesigner's native POP operators (force-texture driven, with field/composite output modes); pick a sibling instead for non-POP paths: create_gpu_particle_field for a GPU noise/curl/gravity drift field, create_particle_flock for GPU boids/flocking, image_to_particles to reconstruct an image/video as points, create_particle_system for a simple CPU emitter. NOTE: POPs are Experimental — the result carries an unverified marker; live-validate.

ParameterTypeRequiredDescription
namestringnoContainer basename created under parent_path. (default: pop_particle_system)
parent_pathstringnoParent COMP path (default '/project1'). (default: /project1)
emission_rateintegernoParticle birth rate per second; mapped to particle_pop birthrate and exposed as EmissionRate knob. (default: 5000)
lifetimenumbernoParticle lifetime in seconds; mapped to particle_pop life/lifeexpect. Exposed as Lifetime knob. (default: 4)
force_texture_pathstringnoExisting TOP path to drive the force field via lookup_texture_pop.par.top. If omitted, a noiseTOP is created inside the container as the default force source.
feedback_gainnumbernoFeedback strength on feedback_pop (mapped to inputmul). Exposed as FeedbackGain knob. (default: 0.92)
outputparticles | field | compositenoWhich TOP the output nullTOP mirrors. 'particles' = render of particle_pop chain; 'field' = rendered field_pop visualization; 'composite' = compositeTOP (add) of both. (default: particles)
resolutionobject[]noRender TOP resolution [width, height]. (default: 1280,720)

create_pop_growth mutates

Build a POP-native reaction-diffusion / growth system inside a fresh baseCOMP. Three mode presets: 'dendritic' (sparse fibrous tendrils, low decay), 'coral' (dense outward accretion, mid decay, strong force), 'lichen' (patchy crust, high threshold emission clusters). A particle_pop emits points gated by a noise threshold; a noise_pop drives a force_pop vector field that biases their motion; a feedback_pop loop carries point state forward one cook so accumulation simulates organic growth. Output is a Null TOP via poptoSOP → geometryCOMP → renderTOP. POP chain delegated to buildPopChainScript. POPs are Experimental — par writes are fail-forward; result reports unverified op/par set. Warns when feedback_gain × (1 − decay) ≥ 1.0 (divergence risk).

ParameterTypeRequiredDescription
modedendritic | coral | lichennoPreset selector — picks the default param bundle. 'dendritic': sparse fibrous tendrils; 'coral': dense outward accretion; 'lichen': patchy emission clusters. (default: dendritic)
namestringnoContainer baseCOMP name. (default: pop_growth)
parent_pathstringnoParent COMP where the container is built. (default: /project1)
growth_ratenumbernoParticle birth rate per cook (drives particle_pop birth/rate par defensively). Overrides preset.
decaynumbernoPer-frame multiplier applied through the feedback loop (1 − decay retained). Overrides preset.
thresholdnumbernoEmission gate: noise sample below threshold suppresses new births. Overrides preset.
feedback_gainnumbernoScale of the feedback contribution mixed back into the active POP each frame; >1 risks divergence. Overrides preset.
force_scalenumbernoAmplitude of the noise-driven force_pop vector field. Overrides preset.
noise_freqnumbernoSpatial frequency of the noise_pop. Overrides preset.
seedintegernoRNG seed for the noise. (default: 1)
max_pointsintegernoSafety cap on particle count (passed defensively as numpoints/maxparticles). (default: 50000)
resolutionobject[]noRender TOP + Null TOP resolution [width, height]. (default: 1280,720)
expose_controlsbooleannoExpose GrowthRate / Decay / Threshold / FeedbackGain knobs on the container. (default: true)

create_pop_lines_pointcloud mutates

Plexus-style line-web visual built on the POP family. A POP point cloud (auto-generated or sourced) is fed to a Neighbor POP that fills a per-point Nebr array attribute with closest-neighbor indices. A Script SOP converts that index list into deduplicated line primitives, rendered as a Geometry COMP through a Render TOP to a Null TOP — the classic Plexus look without third-party plugins. auto_pattern: 'noise' (default) = pointgeneratorPOP + noisePOP; 'sphere' = spherePOP; 'grid' = gridPOP. count is hard-capped at 8192 (CPU O(N·k) line emission). color_mode: flat | by_distance (warm→cool gradient) | by_neighbor_count (isolation ramp). Exposes live controls: MaxDistance, MaxNeighbors, Spin, PointSize, LineAlpha. POPs are Experimental — par names and Nebr array-attribute survival through poptoSOP are probe-first unverified; result carries extra.unverified.

ParameterTypeRequiredDescription
namestringnoContainer base name; final path uses TD auto-suffix. (default: pop_lines)
parent_pathstringnoParent network for the system container. (default: /project1)
source_pathstringnoIf set, must point to an existing POP/SOP that produces a point cloud. When omitted, a point cloud is auto-generated per auto_pattern.
auto_patternnoise | sphere | gridnoUsed only when source_path is undefined. noise = pointgeneratorPOP + noisePOP; sphere = spherePOP; grid = gridPOP. (default: noise)
countintegernoApprox point count when auto-generating. Hard-capped at 8192 (line emission is O(N·k) on CPU). (default: 512)
max_distancenumbernoRadius (POP world units) the Neighbor POP searches for neighbors. Drives Plexus density. (default: 0.5)
max_neighborsintegernoPer-point neighbor cap (neighborPOP.maxneighbors). Higher = denser web. (default: 4)
max_linesintegernoHard cap on emitted line primitives in the Script SOP (after dedupe). (default: 5000)
color_modeflat | by_distance | by_neighbor_countnoDrives Cd attribute on the SOP. flat = single color; by_distance = per-line gradient; by_neighbor_count = per-point ramp on isolation. (default: flat)
colorobject[]noLine color used directly in flat mode, as warm endpoint in by_distance, as dense endpoint in by_neighbor_count. (default: 1,1,1)
line_alphanumbernoConstant MAT alpha; < 1 lets lines additively glow. (default: 0.7)
spinnumbernoY-axis degrees/sec spin of the whole field via Transform POP ry expression. (default: 10)
point_sizenumbernoOptional point overlay size rendered in addition to lines. 0 hides points. (default: 1.5)
resolutionobject[]noRender TOP resolution [width, height]. (default: 1280,720)
expose_controlsbooleannoSkip control panel exposure when false. (default: true)

create_depth_pop_field mutates

Build a depth-driven GPU POP scatter field: consumes a depth/mask TOP and uses lookup_texture_pop to sample depth for displacement/scatter proxies (and optionally color). When depth_top_path is omitted, auto-spins-up a setup_segmentation MediaPipe chain inside the container and uses its mask Null TOP as the depth source. Scatter modes: 'displace' applies a uniform depth-scale proxy, 'emit' adds an emission-like jitter scatter proxy, 'both' does both. Forward-compatible: pass create_depth_from_2d (Depth Anything, W4) output as depth_top_path. NOTE: POPs are Experimental — op types and par names are fail-forward, probe on a live TD. Returns a JSON block with container path, depth source info, controls, warnings, and unverified probe record.

ParameterTypeRequiredDescription
namestringnoName for the self-contained container created under parent_path. (default: depth_pop_field)
parent_pathstringnoParent COMP path where the depth-pop-field container is created. (default: /project1)
depth_top_pathstringnoAbsolute path of an existing depth/mask TOP (luminance = depth, bright = near by default). When omitted, the tool auto-spins-up a setup_segmentation chain inside the container and uses its mask Null TOP as the depth source. Future W4: pass create_depth_from_2d output here.
particle_densityintegernoApproximate point count fed to pointgeneratorPOP.numpoints (100–500 000). (default: 20000)
scatter_modedisplace | emit | bothno'displace' = uniform depth-scale proxy on the point cloud; 'emit' = emission-like scatter jitter around the sampled depth field; 'both' = depth-scale proxy + scatter jitter. True depth-weighted birth is unverified. (default: displace)
depth_scalenumbernoMultiplier on the depth-driven displacement amount along +Z for displace/both scatter modes. Exposed as DepthScale knob when that displacement proxy is active. (default: 1)
color_by_depthbooleannoWhen true, copies sampled RGBA into POP Color attribute via a second lookup_texture_pop (near = bright / far = dark). (default: true)
invert_depthbooleannoTreat dark as near instead of bright. Implemented via Level TOP invert on a proxy feed. (default: false)
point_sizenumbernoRender TOP point size, exposed as PointSize knob. (default: 2)
spinnumbernoY-rotation of the field in deg/sec, animated via transformPOP ry expression. Exposed as Spin knob. (default: 8)
resolutionobject[]noRender TOP resolution [width, height]. (default: 1280,720)
expose_controlsbooleannoBuild the live artist knobs panel for the active depth field controls. (default: true)

create_stipple_pointcloud mutates

Density-weighted particle scatter rendered as discrete points — a stippled / halftone-engraving point cloud whose dot distribution follows the luminance of a source TOP. Brighter regions yield denser clusters. Three visual modes: bw_dots (constant colour stipple), colored_dots (sample source RGB at each point), random_jitter (adds noisePOP for organic hand-engraved scatter). Outputs a Render TOP through a Geometry COMP in points render mode. Sibling to create_pop_geometry (procedural SOP geo) and the rasterised create_dither / create_halftone tools (which stay in TOP space).

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to create the container under. (default: /project1)
namestringnoBase name for the system container (TD auto-suffixes). (default: stipple_pointcloud)
source_top_pathstringnoAbsolute path of an existing TOP whose luminance drives density. When omitted, a rampTOP radial gradient is built as the source.
dot_sizenumbernoPoint primitive size in pixels (0.5..8, default 2). (default: 2)
densityintegernoTotal particle count (100..200000, default 20000). Drives maxparticles + birthrate. (default: 20000)
modebw_dots | colored_dots | random_jitternoVisual treatment: bw_dots (constant colour), colored_dots (sample source RGB per-point), random_jitter (adds noisePOP for organic scatter). (default: bw_dots)
color_modewhite_on_black | black_on_white | palettenoBackground/foreground choice for bw_dots and random_jitter. Ignored by colored_dots. (default: white_on_black)
palette_colorobject[]noForeground RGB tuple when color_mode=palette. Default warm parchment [0.95, 0.9, 0.7]. (default: 0.95,0.9,0.7)
jitter_amountnumbernoPer-point position noise scale for random_jitter mode (0..1, default 0.25). (default: 0.25)
resolutionobject[]noOutput Render TOP resolution [w, h]. Default [1280, 720]. (default: 1280,720)
expose_controlsbooleannoWhen true, expose live DotSize, JitterAmount (random_jitter only), and CameraRotate controls. (default: true)

drive_streamdiffusion mutates

Wraps the community StreamDiffusionTD.tox (by dotsimulate) into a one-shot Layer 1 setup: locate the .tox via candidate-path discovery, drop it into a fresh baseCOMP, wire a camera/source TOP into its input, set the prompt/strength/cfg/seed custom pars, and optionally re-broadcast the output via Syphon/Spout or NDI. Returns a friendly error when the .tox is not installed. The result envelope includes validated_pars so downstream tools (create_ai_mirror) know which SD pars to bind a control panel to.

ParameterTypeRequiredDescription
tox_pathstringnoOptional explicit absolute or project-relative override. When set, becomes the only candidate; standard discovery is skipped.
source_top_pathstringnoFile system path to a video/image file to feed into the StreamDiffusionTD container (creates a moviefileinTOP). When omitted, a synthetic noise TOP is created for device-free preview.
promptstringnoSets the Prompt custom par on the tox. (default: a vibrant neon cyberpunk portrait, ultra detailed)
strengthnumbernoimg2img denoising strength — sets Strength par. (default: 0.6)
cfgnumbernoClassifier-free guidance scale. Low CFG (1–2) is normal for StreamDiffusion/LCM. (default: 1.2)
seedintegernoRandom seed. -1 = random per tox convention. (default: -1)
controlnet_weightnumbernoSets Controlnetweight when the par is present in the tox build.
t_indexintegernoSets Tindex (denoise step list index) when present; omitted = tox default.
output_modeinternal | syphon_spout | ndinointernal = Null TOP only. syphon_spout / ndi = adds an FM-01 sender wired from out1. (default: internal)
output_namestringnoSender/source name when output_mode != 'internal'. (default: tdmcp_streamdiffusion)
parent_pathstringnoParent network for the fresh streamdiffusion_driver baseCOMP. (default: /project1)
expose_controlsbooleannoReserved for v2 — the tox already surfaces its own UI; this field is accepted but not acted on in v1. (default: true)

setup_mediapipe_plugin mutates

Drop the torinmb mediapipe-touchdesigner ENGINE in one shot and enable any combination of face, hand, body, and segmentation pipelines. Use this instead of running setup_face_tracking + setup_hand_tracking + setup_body_tracking + setup_segmentation separately — those tools each re-load the engine, resulting in multiple competing MediaPipe COMPs fighting for the webcam. This tool loads the engine ONCE and toggles its Face/Hand/Body/Segmentation pars. IMPORTANT: there is NO stock TouchDesigner MediaPipe; all five mediapipe tools (this one + the four setup_*_tracking tools) rely on the free torinmb plugin — install it first with tdmcp install mediapipe-touchdesigner. Output paths for face/hand/body are DATs (JSON landmark streams from the plugin), not CHOPs — use a Script CHOP adapter to convert to numeric channels. The engine requires the TD timeline to be PLAYING (uses an embedded browser for webcam capture).

ParameterTypeRequiredDescription
tox_pathstringnoOverride path to the torinmb mediapipe-touchdesigner ENGINE .tox (MediaPipe.tox — the full tracker with webcam capture, NOT the bare pose_tracking.tox or hand_tracking.tox processors). Defaults to the package staged by tdmcp install mediapipe-touchdesigner.
parent_pathstringnoExisting COMP to load the engine into. (default: /project1)
enable_facebooleannoEnable the Face detection pipeline inside the engine. (default: false)
enable_handbooleannoEnable the Hand tracking pipeline inside the engine. (default: true)
enable_bodybooleannoEnable the Body/Pose tracking pipeline inside the engine. (default: true)
enable_segmentationbooleannoEnable the Segmentation pipeline (outputs a matte TOP; heavier GPU cost than the landmark pipelines). (default: false)
source_video_pathstringnoOptional path to a video file to use as input instead of the live webcam. The engine's Camera/Source/Videofile/File par is probed in that order and the first match is set.
container_namestringnoInner baseCOMP name. Matches the default used by setup_body_tracking / setup_hand_tracking so re-running is idempotent (the engine is reused, not duplicated). (default: MediaPipe)

create_depth_from_2d mutates

Wraps TDDepthAnything v2 (community TOX by IntentDev) to convert any 2D image/video TOP into a depth map TOP using Depth Anything v2 via NVIDIA TensorRT/ONNX — no Kinect or RealSense required. Given a source TOP path, drops the TOX into a fresh container, wires the source, exposes a depth Null TOP whose path can be fed directly into create_depth_displacement, create_depth_pop_field, or create_depth_silhouette. Requires the user to have installed TDDepthAnything.tox from https://github.com/IntentDev/TDDepthAnything and an NVIDIA GPU with CUDA + TensorRT pre-built weights (.engine/.onnx). NOT supported on macOS. First cook may take 30–60 s for engine compile. Returns container_path, dropped_tox_path, depth_top_path (the key output), source_top_path, output_resolution, model_variant, and warnings.

ParameterTypeRequiredDescription
source_top_pathstringyesAbsolute TD path of the 2D source TOP (movieFileInTOP / videoDeviceInTOP / NDI-in / any cooked TOP). Required.
tox_pathstringnoOverride path to TDDepthAnything.tox. When omitted, candidates are tried in order. Set this when the TOX lives outside ~/Documents/Derivative.
output_resolution256 | 384 | 512 | 768 | 1024noSquare inference resolution. Lower = faster, higher = sharper depth edges. Default 512 matches Depth Anything v2 sweet spot on a 30-series GPU. (default: 512)
model_variantsmall | base | largenoDepth Anything v2 model size. small = ~25 ms/frame on RTX 3070, large = ~80 ms but cleaner edges. The TOX must have the matching .engine/.onnx weight on disk. (default: small)
parent_pathstringnoParent network for the depth_from_2d baseCOMP. (default: /project1)

create_gaussian_splat_scene mutates

Drops the community TDGS .tox by Anglerfish-graphics into a fresh baseCOMP, loads a .ply or .splat Gaussian Splat asset, optionally binds an existing cameraCOMP, and exposes a clean output renderTOP at 720p–2160p. Assets can be exported from Polycam, Postshot, Luma, or Nerfstudio. The wrapper connects to any existing tdmcp camera rig (create_camera_orbit, XY pads, MIDI). REQUIREMENTS: TDGS by Anglerfish-graphics installed (https://github.com/Anglerfish-Graphics/TDGS); TouchDesigner build ≥2023.30000; CUDA-capable NVIDIA GPU on Windows. macOS and AMD GPUs are not supported by TDGS — the tool returns a friendly error. VRAM: 720p≈2GB, 1080p≈4-6GB, 1440p≈12GB+, 2160p≈16GB+ (OOM crashes TD — no friendly error, start at 720p on a laptop). Returns container_path, dropped_tox_path, output_top_path, camera_path, warnings, and a preview image.

ParameterTypeRequiredDescription
splat_asset_pathstringyesAbsolute path to a .ply or .splat Gaussian Splat asset. Export from Polycam, Postshot, Luma, or Nerfstudio.
tox_pathstringnoOptional explicit absolute path to TDGS.tox. When set, skips the standard candidate walk. Useful when TDGS lives in a non-standard packages directory.
camera_pathstringnoAbsolute TD path to an existing cameraCOMP (e.g. one built by create_camera_orbit). When set, TDGS's camera reference par is bound to it. When unset, TDGS uses its internal default camera.
output_res720p | 1080p | 1440p | 2160pnoOutput renderTOP resolution. 720p=1280×720, 1080p=1920×1080, 1440p=2560×1440, 2160p=3840×2160. WARNING: 1440p+ requires a discrete GPU with ≥12GB VRAM; 2160p will crash TD on OOM. Default 1080p. (default: 1080p)
container_namestringnoName of the outer baseCOMP created by createSystemContainer. (default: gaussian_splat_scene)
parent_pathstringnoParent network for the baseCOMP (default '/project1'). (default: /project1)
expose_controlsbooleannoWhen true (default), promotes SplatAssetPath, CameraRef, and OutputRes to the wrapper container as live knobs. (default: true)

create_ai_mirror mutates

Layer 1 COMBO: wires the canonical 2026 AI-mirror installation in one MCP call — camera (or synthetic / existing TOP) → StreamDiffusion (img2img live, delegated to drive_streamdiffusion) → Syphon/Spout/NDI/internal output → a prompt+strength+cfg control panel whose sliders and textDATs drive SD pars via .expr expressions. Panel only binds pars present in drive_streamdiffusion's validated_pars; missing pars are warned, not errored. Camera source on macOS triggers the OS permission dialog on first cook; fallback_to_synthetic keeps the rig alive when the camera is unavailable.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP. (default: /project1)
namestringnoContainer name. (default: ai_mirror)
sourcecamera | synthetic | existing_topnoInput source: USB camera (hype default), self-animated synthetic TOP, or an existing TOP routed through a Select. (default: camera)
existing_top_pathstringnoRequired when source='existing_top'.
camera_device_idxintegernoUSB camera device index when source='camera'. (default: 0)
fallback_to_syntheticbooleannoIf camera creation fails, build a synthetic noise source instead of aborting. (default: true)
promptstringnoInitial StreamDiffusion prompt. (default: ethereal water)
negative_promptstringnoInitial StreamDiffusion negative prompt. (default: blurry, low quality, deformed)
strengthnumbernoimg2img mix; surfaced in the panel. (default: 0.65)
cfgnumbernoClassifier-free guidance scale; SD sweet spot 1–2. (default: 1.4)
stepsintegernoStreamDiffusion 1–4 step LCM. (default: 2)
seedintegerno-1 = random per frame. (default: -1)
output_modesyphon_spout | ndi | internalnoOutput: syphon_spout (macOS/Windows showcase form), ndi (cross-host), or internal (no sender). (default: syphon_spout)
output_sender_namestringnoSender / NDI name. (default: ai_mirror)
expose_control_panelbooleannoBuild the prompt+sliders panel and wire .expr expressions to SD pars. (default: true)
show_camera_previewbooleannoAdd a small selectTOP preview of the camera inside the panel. (default: true)

create_slit_scan mutates

Build a slit-scan visual system: each row (or column) of the output samples a different past frame from a Cache TOP ring buffer, producing the classic 'time-as-space' stretched-time look (Floris Kaayk / Adam Magyar style). Creates a new baseCOMP under parent_path holding a source TOP, a Cache TOP ring buffer, a slit GLSL shader, and a Null output. When no source_top_path is given, a synthetic Noise TOP is used so the tool works headless / on CI without camera permission. Exposes a live 'Depth' knob. Note: GLSL compile is UNVERIFIED offline; cacheTOP 2D-array binding must be validated live in TouchDesigner. Memory cost at 1080p RGBA16 is ~depth × 32 MB; depth 600 ≈ 5 GB VRAM. Output freezes when the timeline is paused (cacheTOP stops recording — expected behaviour). Returns a summary plus a JSON block with the container path, created node paths, output path, exposed controls, warnings, and an inline preview image.

ParameterTypeRequiredDescription
parent_pathstringnoParent network where the slit-scan container is created (default '/project1'). (default: /project1)
namestringnoContainer name for the slit-scan system (default 'slit_scan'). (default: slit_scan)
source_top_pathstringnoOptional path to an existing TOP to scan (e.g. '/project1/videodevicein1'). When omitted a synthetic noiseTOP seed is created inside the container so the tool runs headless / on CI without camera permission.
cache_depthintegernoNumber of frames stored in the Cache TOP ring buffer (1–600, default 60). Memory cost: ~depth × W × H × 16 B at RGBA16. At 1080p, 600 frames ≈ 5 GB VRAM. (default: 60)
axisx | ynoScreen axis that carries time. 'y' = each row is a different past frame; 'x' = each column (default 'y'). (default: y)
direction+y | -y | +x | -xnoWhich end of the axis is 'now'. '+y' = bottom row is the latest frame, top is oldest; '-y' reverses it. Must be compatible with axis (default '+y'). (default: +y)
expose_controlsbooleannoWhen true (default), expose a live 'Depth' knob on the container bound to cache.cachesize. (default: true)

create_chrome_blobs mutates

Builds a liquid-chrome / Y2K metaball generator: an animated Noise TOP (or external source) is blurred, thresholded into soft blobs, then a GLSL TOP renders a procedural environment-map chrome look (greyscale ramp + moving specular highlight) with 5 metal tints and 4 background modes. Creates a self-contained baseCOMP with Speed, Blob_Count, Metal_Color, and Background controls exposed on the container.

ParameterTypeRequiredDescription
parent_pathstringnoParent network where the chrome-blobs COMP is created (default '/project1'). (default: /project1)
namestringnoName for the system container COMP (default 'chrome_blobs'). (default: chrome_blobs)
source_top_pathstringnoOptional external TOP to use as the blob field (pulls in via Select TOP). When omitted, an animated Noise TOP generates the blobs.
countintegernoLogical blob count — drives noise harmonics + blur/threshold params (1–32, default 8). (default: 8)
speednumbernoNoise animation speed — controls the absTime.seconds multiplier on noise TX/TZ (0–4, default 0.5). (default: 0.5)
metal_colorsilver | gold | copper | chrome_blue | gunmetalnoChrome tint palette for the GLSL environment-map shader (default 'silver'). (default: silver)
backgroundblack | white | studio | gradientnoBackground behind the chrome blobs — black, white, studio (soft radial), or gradient (vertical chrome studio) (default 'black'). (default: black)

create_vintage_lens mutates

Drape a vintage analog-film aesthetic over any TOP in one call. Chains barrel/pincushion lens distortion → chromatic aberration → vignette → film grain as four inline GLSL passes inside a new baseCOMP. Era presets (super8, vhs, 16mm, 80s_camcorder) load era-correct strength defaults; any per-param override wins. Returns a standard Layer 1 envelope with container path, node paths, output path, preview image, warnings, and the resolved strength values.

ParameterTypeRequiredDescription
parent_pathstringnoParent network where the vintage-lens container is created (default '/project1'). (default: /project1)
namestringnoName suffix for the baseCOMP (default 'vintage_lens'). (default: vintage_lens)
source_top_pathstringyesPath of the existing TOP to grade (e.g. '/project1/render1').
erasuper8 | vhs | 16mm | 80s_camcordernoEra preset that sets default strength values; per-param overrides win. (default: super8)
distortion_strengthnumbernoBarrel-distortion coefficient (UV warped from center). Overrides preset.
ca_strengthnumbernoRGB-split offset magnitude (radial from center). Overrides preset.
vignette_strengthnumbernoEdge darkening amount; 0 disables. Overrides preset.
grain_amountnumbernoPer-pixel noise amplitude. Overrides preset.

create_reaction_diffusion mutates

Build a Gray-Scott reaction-diffusion GPU simulation as a ready-to-use visual system. Delegates to the built-in 'reaction_diffusion' recipe (seed GLSL TOP → feedbackTOP → simulation GLSL TOP → null output), then overlays caller-provided Gray-Scott parameters (Feed rate F, Kill rate K, diffusion coefficients Da/Db) as GLSL uniforms, patches the shader so da/db use the uniforms instead of hard-coded constants, and optionally chains a rampTOP + lookupTOP for a color LUT (coral / spots / stripes / mitosis presets). Exposes a control panel with sliders for F, K, Da, Db, resolution, and a palette menu. Output node is a nullTOP ready for downstream wiring. 'iterations>1' is unverified — effective value is 1 with a warning.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path the reaction-diffusion container is created inside. (default: /project1)
namestringnoBase name for the created container. (default: reaction_diffusion)
FnumbernoGray-Scott feed rate (uniform uFeed). Controls how fast chemical A is replenished. Lower = sparser, more open patterns; higher = denser maze-like structures. (default: 0.055)
KnumbernoGray-Scott kill rate (uniform uKill). Controls how fast chemical B is removed. Tune alongside F to shift between spots, stripes, and maze regimes. (default: 0.062)
DanumbernoDiffusion rate of chemical A (uniform uDa). Default 1.0. Increasing slows pattern growth; the recipe default is 1.0. (default: 1)
DbnumbernoDiffusion rate of chemical B (uniform uDb). Default 0.5. Tuning relative to Da changes pattern sharpness. (default: 0.5)
iterationsintegernoSimulation steps per rendered frame. UNVERIFIED — feedbackTOP has no native cookrate param; effective value is 1 with a warning if >1 is requested. Field retained for forward-compatibility. (default: 5)
palettecoral | spots | stripes | mitosis | nonenoPost-sim color LUT applied via a rampTOP + lookupTOP downstream of the GLSL simulation. 'coral' = deep-purple→magenta→cream→white; 'spots' = black→cyan→white; 'stripes' = indigo→green→yellow; 'mitosis' = blood-red→orange→bone-white; 'none' = raw simulation state (R=A, G=B). (default: coral)
resolutionintegernoSquare simulation grid size in pixels. Overrides seed1.resolutionw/h. Higher values produce finer detail at higher GPU cost. (default: 256)

create_pixel_sort mutates

Build a glitch-art pixel-sort effect that sorts pixels along rows or columns within luminance-thresholded regions, creating the signature Kim Asendorf–style horizontal/vertical streak aesthetic. Uses a multi-pass odd-even transposition sort over a glslTOP feedback chain. Sort key: luminance, hue, or saturation. Exposes Mix, Threshold, Iterations, Direction, and Reset for live tweaking. Defaults to a self-contained noiseTOP source when no input TOP is provided.

ParameterTypeRequiredDescription
namestringnoBase name for the created baseCOMP. (default: pixel_sort)
parent_pathstringnoParent COMP path. The pixel-sort container is created inside this path. (default: /project1)
source_top_pathstringnoAbsolute path to an existing TOP (e.g. '/project1/movie1'). Pulled in via a Select TOP. If omitted, a self-contained animated noiseTOP source is used (no device permissions).
thresholdnumbernoLuminance gate [0..1]. Pixels with luminance >= threshold are sortable; others are locked in place. Live-tweakable. (default: 0.5)
axisx | ynox = sort along rows (horizontal streaks), y = along columns (vertical streaks). (default: x)
sort_byluminance | hue | saturationnoSort key: the channel the odd-even transposition sort compares on. (default: luminance)
directionascending | descendingnodescending puts bright/saturated pixels first — the canonical Asendorf look. Live-tweakable. (default: descending)
iterationsintegernoNumber of odd-even sort passes to run via the Feedback TOP. Higher = closer to fully sorted but heavier cook. Live-tweakable. (default: 64)
mixnumbernoBlend between original (0) and sorted output (1). Live-tweakable. (default: 1)
resolutionobject[]noOutput resolution [width, height] in pixels. (default: 1280,720)

create_volumetric_field mutates

Build a stacked-slice fake-volumetric noise field: smoke, nebula, ember, ice, toxic or mono palettes. Architecture: Simplex 3D noiseTOP → optional displace+blur → cacheTOP (depth = slice_count) → viewer glslTOP (Beer-Lambert accumulation across slices, baked palette) → nullTOP output. NOTE: this is a stacked-2D-slice approximation, NOT a raymarched volume. There is no per-pixel ray traversal or SDF. For a true raymarcher see the planned create_volumetric_raymarch (L-effort follow-up). Cook cost scales roughly linearly with slice_count × resolution. Default 16 slices is the safe sweet spot; drop to 4–8 on integrated GPUs. Returns a summary JSON with container path, created node paths, the output path, exposed controls, any node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
parent_pathstringnoParent network where the volumetric_field baseCOMP is created. (default: /project1)
namestringnoContainer name (must start with a letter, alphanumeric + underscore). (default: volumetric_field)
densitynumbernoHow opaque/milky the field reads (0 = transparent, 1 = fully opaque). Maps to uDensity in the viewer shader. (default: 0.5)
turbulencenumbernoNoise evolution speed and swirl amplitude. Drives the displacement weight and noise period. 0 = flat/still field; skips the displace TOP. (default: 0.4)
color_mapsmoke | nebula | ember | ice | toxic | mononoPalette baked into the viewer GLSL shader: smoke (grey haze), nebula (purple/magenta), ember (orange/red), ice (blue/cyan), toxic (green), mono (black→white). (default: smoke)
slice_countintegernoNumber of 2D z-slices stacked into the pseudo-volume. Build-time only — changing it rewires the cache stack. Higher = smoother depth but heavier cook (linear cost). Default 16 is the safe sweet spot. (default: 16)
expose_controlsbooleannoExpose Density, Turbulence and ColorMap knobs on the container. (default: true)

create_voxel_stack mutates

Isometric voxel-stack renderer driven by any TOP. Builds a single instanced Geometry COMP (boxSOP, N=cols·rows instances up to 256×256) with a CHOP chain sampling luminance for column height and per-instance color. Color modes: source_color (sample TOP directly), palette (Monument-Valley pastel ramp), height_ramp (same palette, height-based). Isometric ortho cam (rx=-35.264°, ry=45°) by default; perspective available. Exposes HeightScale, VoxelSize, and RotateY controls. If source_top_path is omitted, an animated noiseTOP drives the stack.

ParameterTypeRequiredDescription
parent_pathstringnoParent network where the voxel stack container is created. (default: /project1)
namestringnoBase name for the container (defaults to 'voxel_stack').
source_top_pathstringnoPath to an existing TOP that drives heights and colors. If omitted, a built-in animated noiseTOP feeds the stack.
grid_sizeobject[]noVoxel grid cols × rows. Hard-capped at 256×256 (65k instances). (default: 32,32)
voxel_sizenumbernoCube edge length in world units; also the XZ spacing between voxels. (default: 0.5)
height_scalenumbernoMultiplier on luminance → Y translate. 0 = flat slab. (default: 8)
color_modesource_color | palette | height_rampnoPer-instance color: sample source TOP directly (source_color), look up into a palette ramp (palette), or use a default pastel height ramp (height_ramp). (default: source_color)
paletteobject[][]noRamp endpoints as [r,g,b] tuples (2–8 stops). Used only when color_mode='palette'. Defaults to a Monument-Valley pastel 5-stop ramp.
output_resolutionobject[]noRender TOP resolution [width, height]. (default: 1280,720)
camera_modeisometric | perspectivenoIsometric uses ortho camera at rx=-35.264°, ry=45° (classic iso). Perspective uses a standard 35mm orbit cam. (default: isometric)
expose_controlsbooleannoWhen true, expose HeightScale, RotateY, and VoxelSize knobs on the container. (default: true)

create_facade_mapping mutates

Build a multi-projector architectural facade rig: one source TOP fanned into N per-projector branches, each with Crop → Corner Pin keystone → edge-blend Ramp/Composite mask → Level brightness, plus per-projector Null outputs and a summary preview composite. Ships as a calibration skeleton; per-projector corners, color match, and (when 3D) camera transforms are left to live install alignment.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP where the facade mapping system is created. (default: /project1)
namestringnoName of the generated Base COMP. (default: facade_mapping)
source_top_pathstringnoAbsolute TOP path to fan out; required when source_mode='existing_top'.
source_modeexisting_top | syntheticnoSynthetic builds a self-animated noiseTOP so the rig previews without an upstream feed. (default: synthetic)
projector_countintegernoNumber of projectors. Each projector gets its own branch and Null output. (default: 2)
blend_widthintegernoEdge-blend overlap region in pixels (alpha gradient width on inner edges). (default: 192)
blend_layouthorizontal | vertical | gridnoHow projectors tile: horizontal row, vertical column, or near-square grid. (default: horizontal)
output_widthintegernoPer-projector pixel width. (default: 1920)
output_heightintegernoPer-projector pixel height. (default: 1080)
facade_geometry_pathstringnoOptional absolute SOP/COMP path to a 3D facade model. PARTIAL/UNVERIFIED: when provided, builds a per-projector cameraCOMP + renderTOP + geometryCOMP stub.
blend_curvelinear | gamma22 | smoothstepnoCurve applied to the alpha gradient via Level gamma. (default: smoothstep)
expose_controlsbooleannoBuild a Control Panel with per-projector brightness + global blend width/curve. (default: true)
background_colorstringnoBackground color as #rrggbb. (default: #000000)

create_step_repeat mutates

Tile a source TOP into a rows×cols brick/grid pattern with per-cell gap, position jitter, rotation jitter, and an optional brick/masonry half-tile row offset — all computed per-cell in a single GLSL TOP shader (stock TOPs only, no external files besides the optional source). Defaults to a built-in synthetic Noise TOP so the grid previews standalone on any install without a source (no external asset). Output is a nullTOP. Returns a summary plus JSON with node paths, live controls, warnings, and an inline preview image.

ParameterTypeRequiredDescription
source_pathstringnoAbsolute path of a TOP to tile (pulled in via selectTOP so it can live anywhere). Omit to use a built-in synthetic Noise TOP so the grid previews standalone on any install (no external asset needed).
rowsintegernoNumber of tile rows (vertical repeats). (default: 4)
colsintegernoNumber of tile columns (horizontal repeats). (default: 4)
gapnumbernoFractional inset per cell (0 = tiles touch, 0.5 = half the cell is gap). (default: 0.05)
jitter_posnumbernoPer-cell random position offset, fraction of a cell. (default: 0)
jitter_rotnumbernoPer-cell random rotation, max radians. (default: 0)
brick_offsetbooleannoShift alternating rows by half a tile (brick/masonry layout). (default: false)
resolutionobject[]noOutput resolution [width, height] in pixels. (default: 1280,720)
parent_pathstringnoParent COMP path the self-contained 'step_repeat' container is created inside. (default: /project1)

create_pointer_reactive mutates

Turn mouse/pointer position and click into a first-class creative seed. Builds a Mouse In CHOP → normalized u/v (0..1) + velocity (vu/vv) + button, exposed on a 'pointer' Null CHOP ready for binding: op('…/pointer_reactive/pointer')['u'] / ['v'] / ['button'] / ['vu'] / ['vv']. A Sensitivity knob gains every channel. By default also builds a small visible demo — a bright dot that follows the pointer and leaves a decaying trail over a feedback field — so you immediately see it working; set demo=false to build only the CHOP chain (no image, no preview). multitouch is reserved for a future Panel-COMP touch source; this build always uses Mouse In and reports the limitation as a warning when requested. Creates a new baseCOMP under parent_path. Returns a summary plus a JSON block with the container path, created node paths, the pointer Null path, channel names, exposed controls, any node errors, and warnings.

ParameterTypeRequiredDescription
multitouchbooleannoWhen true, note that true multitouch needs a Panel COMP touch source; this build always uses Mouse In (single pointer) and reports the limitation as a warning. Kept for forward-compat — it does not change what gets built. (default: false)
demobooleannoAlso build a visible feedback-field demo the pointer pushes, so you see it working immediately (a bright dot that trails behind the mouse over a decaying feedback field). (default: true)
sensitivitynumbernoGain applied to every pointer channel (u, v, velocity, button) before the output. (default: 1)
resolutionobject[]noOutput resolution [width, height] in pixels for the demo feedback field. (default: 1280,720)
parent_pathstringnoParent network where the pointer-reactive container is created (default '/project1'). (default: /project1)

create_interaction_zones mutates

Define N rectangular zones over a camera / motion input; each zone fires when motion in that region crosses a threshold. Builds a stock-TOP chain — a motion-energy TOP (monochrome → previous-frame cache → difference), then per zone a cropTOP (region isolate) + analyzeTOP average + toptoCHOP, merged into one level CHOP, then a scriptCHOP that emits per zone a *_state channel (0/1 active) and a *_dwell channel (seconds continuously active). Ends on a 'zones' Null CHOP as the bind point — wire cues via bind_to_channel to op('…/interaction_zones/zones')['zone0_state']. Camera-only (no depth cam). Source is a TOP pulled via selectTOP, or a built-in synthetic animated Noise TOP when omitted (offline-safe, cooks clean on any install with no external asset). A live Threshold knob tunes sensitivity. Zones are normalized rects (x,y = top-left corner, w,h = size); the top-left image convention is mapped to TD's bottom-left uv origin. Returns a summary plus JSON with the container path, created node paths, the zones Null path, per-zone state/dwell channel names, the zone definitions, threshold, and warnings (no preview image — the output is a CHOP, not a TOP).

ParameterTypeRequiredDescription
source_pathstringnoTOP to watch for motion (pulled via selectTOP). Omit for a built-in synthetic animated Noise TOP that cooks clean on any install (offline-safe, no external asset).
zonesobject[]noRectangular zones (normalized 0..1) to watch. (default: [object Object],[object Object])
thresholdnumbernoMotion level above which a zone counts as active. (default: 0.05)
resolutionobject[]noAnalysis resolution [width, height] in pixels (cheap; motion detection is bandwidth-bound). (default: 640,360)
parent_pathstringnoParent COMP the interaction-zones container is created inside (default '/project1'). (default: /project1)
namestringnoName of the container COMP created under parent_path. (default: interaction_zones)

lidar_floor_tracker mutates

Build a floor-occupancy tracker scaffold for synthetic rehearsal, Ouster TOP, Leuze ROD4 CHOP, or UDP point input. Produces a tracked_points CHOP plus a floor preview TOP; hardware modes default inactive and remain explicitly unverified until a real sensor is connected.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path to build inside. (default: /project1)
namestringnoGenerated container name. (default: lidar_floor_tracker)
sensorsynthetic | ouster | leuze_rod4 | udp_pointsnoSensor scaffold to create. Hardware modes stay inactive by default. (default: synthetic)
sensor_addressstringnoIP address for Ouster/Leuze hardware modes.
portintegernoUDP/network input port. (default: 7502)
floor_width_mnumbernoTracked floor width in meters. (default: 6)
floor_depth_mnumbernoTracked floor depth in meters. (default: 4)
thresholdnumbernoOccupancy threshold. (default: 0.35)
activebooleannoEnable live hardware input immediately. Defaults false for rehearsal safety. (default: false)
expose_controlsbooleannoExpose Threshold and Scale controls. (default: true)

create_terrain mutates

Build a procedural heightmap landscape: an animated Noise TOP height field displaces a subdivided Grid SOP along Z in a GLSL vertex-displacement MAT (real 2.5D geometry, elevation-shaded from a low→high colour ramp), lit by a key Light, framed by a raised angled Camera, and rendered. Optionally adds a flat translucent water plane at water_level and a camera-distance fog fade into the sky/background colour. Distinct from create_visual_system's 'terrain' keyword (which only maps to a noise_landscape recipe) — this is a dedicated, fully parameterized terrain pipeline with its own displacement material, water, and fog. Creates a new baseCOMP under parent_path. Exposes Height, Drift, WaterLevel, and Zoom controls. Returns a summary plus a JSON block with the container path, created node paths, output path, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
subdivisionsintegernoGrid resolution (rows = cols). Higher = finer relief and smoother displacement, but more vertices to push. 160 gives a 160×160 plane. (default: 160)
heightnumbernoDisplacement amount along Z: how far bright pixels push the surface up. 0 = flat. (default: 0.6)
noise_periodnumbernoNoise TOP period — larger = broader, smoother hills; smaller = tighter, rockier. (default: 2.4)
driftnumbernoScroll speed of the noise height field along Z per second so the landscape slowly evolves. 0 = static terrain. Reads 0 when the TD timeline is paused. (default: 0.15)
low_colorobject[]noColour of the valleys / lowest elevation (RGB 0..1). (default: 0.06,0.12,0.05)
high_colorobject[]noColour of the peaks / highest elevation (RGB 0..1). (default: 0.85,0.82,0.7)
waterbooleannoAdd a flat translucent water plane at water_level cutting through the terrain. (default: true)
water_levelnumbernoZ elevation of the water plane, in the same units as height. (default: 0.12)
water_colorobject[]noWater plane colour (RGB 0..1). Rendered semi-transparent. (default: 0.05,0.22,0.35)
fogbooleannoFade the far terrain into background by camera distance (volumetric-ish haze). (default: true)
backgroundobject[]noSky / background + fog colour (RGB 0..1). (default: 0.5,0.6,0.72)
expose_controlsbooleannoWhen true (default), expose live Height / Drift / WaterLevel / Zoom controls. (default: true)
parent_pathstringnoParent network where the terrain container is created (default '/project1'). (default: /project1)

create_asemic_writing mutates

Generate a page of procedural asemic writing — random-but-writing-like glyph strokes that flow left-to-right along stacked baselines but spell nothing. A Script SOP lays out rows × glyphs cells; each glyph is a short chain of strokes control points walking a noise-perturbed pen, with italic slant, per-stroke jitter, and occasional pen-lifts (lift_chance) that break marks apart. The polylines are thickened into tube ink strokes and rendered with an orthographic camera as calligraphic line art on a coloured page. Deterministic per seed. Genuinely distinct from create_growth_system (L-system branches) and create_vector_lines (image-traced contours). Creates a new baseCOMP under parent_path. Exposes Jitter, Slant, Thickness, and Seed controls. Returns a summary plus a JSON block with the container path, created node paths, output path, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
rowsintegernoNumber of baselines (lines of writing) stacked top to bottom. (default: 8)
glyphsintegernoGlyphs per row, laid left to right along the baseline. (default: 14)
strokesintegernoControl points per glyph — more strokes = more elaborate, script-like marks. (default: 5)
jitternumbernoHow far the pen wanders vertically per stroke (fraction of the line height). 0 = flat dashes, 1 = wild scrawl. (default: 0.55)
slantnumbernoItalic slant applied to every glyph (x-shear per unit height). 0 = upright. (default: 0.12)
lift_chancenumbernoProbability the pen lifts (breaks the polyline) between adjacent strokes, giving disconnected marks. (default: 0.25)
thicknessnumbernoTube SOP radius for the rendered ink strokes. (default: 0.004)
ink_colorobject[]noStroke (ink) colour (RGB 0..1). (default: 0.9,0.9,0.92)
backgroundobject[]noPage / background colour (RGB 0..1). (default: 0.06,0.05,0.07)
seedintegernoRNG seed — same seed reproduces the same page of writing. (default: 1)
parent_pathstringnoParent network where the asemic-writing container is created (default '/project1'). (default: /project1)

create_sdf_text mutates

Raymarch a text string as a signed-distance-field 3D slab: a Text TOP renders the glyphs to a mask, and a GLSL TOP treats that mask as an extruded distance field (glyph coverage in XY, closed by two Z planes at ±depth/2) so the letters read as solid, lit, rim-highlit 3D volumes that can spin. Distinct from create_sdf_field (primitive CSG only, no text) and create_text_3d (mesh-extruded text SOP) — this is the raymarched distance-field text look. The mask→SDF is approximate (coverage-derived, no external font SDF atlas required) and eased by smoothing. Creates a new baseCOMP under parent_path. Exposes CameraZ/Speed/StepCount/Intensity/Rotate/Fill/Edge/Background controls and previews the output. Returns a summary plus a JSON block with node paths, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
textstringnoThe string to raymarch as SDF text. (default: HELLO)
fontstringnoFont family for the Text TOP that seeds the glyph mask (must be installed in TD). (default: Arial)
boldbooleannoRender the seed text bold (thicker glyph coverage). (default: true)
depthnumbernoExtrusion thickness of the raymarched text slab along Z (uDepth). (default: 0.25)
smoothingnumbernoHow sharply the mask coverage maps to the XY distance field. Lower = crisper edges, higher = softer/rounder. (default: 0.6)
camera_znumbernoCamera distance from the text (uCameraZ). Live 'CameraZ' control. (default: 2.2)
rotatenumbernoY-axis rotation speed of the text (radians/s via uRotate * uTime). Live 'Rotate'. Reads 0 when the TD timeline is paused. (default: 0)
speednumbernoAnimation time multiplier (drives uTime). Live 'Speed' control. (default: 1)
step_countintegernoRaymarch iterations (uSteps). Live 'StepCount'. (default: 80)
intensitynumbernoOutput brightness multiplier (uIntensity). Live 'Intensity'. (default: 1)
fill_colorstringnoLetter body colour hex (e.g. '#ffd34d'). Live RGB swatch 'Fill'. (default: #ffd34d)
edge_colorstringnoRim/edge highlight colour hex. Live RGB swatch 'Edge'. (default: #ff5c8a)
backgroundstringnoBackground / miss colour hex. Live RGB swatch 'Background'. (default: #0a0a12)
light_directionobject[]noLight direction, normalised in shader — baked as GLSL constant. (default: 0.4,0.6,0.8)
resolutionobject[]noOutput resolution [width, height] of the GLSL TOP. (default: 1280,720)
expose_controlsbooleannoExpose live CameraZ/Speed/StepCount/Intensity/Rotate/Fill/Edge/Background controls. (default: true)
parent_pathstringnoParent COMP path the self-contained 'sdf_text' container is created inside. (default: /project1)

create_vertex_displacement_mat mutates

Build a true vertex-shader displacement material: a GLSL MAT whose vertex stage offsets each vertex along its normal by procedural 3D noise (uTime-animated) or by the luminance of a sampled TOP (texture_path), so the mesh is physically deformed on the GPU. Distinct from the TOP-space image warps create_depth_displacement / create_displacement_warp — those push 2D pixels; this pushes mesh vertices. Assign it to your own Geometry COMP via target_geo, or omit it to build a self-contained demo (subdivided sphere + camera + light + render + Null) so the material previews standalone. Creates a new baseCOMP under parent_path. Exposes Amount, Frequency, and Speed controls bound to the MAT. Returns a summary plus a JSON block with the container path, created node paths, the material path, the output path (demo only), exposed controls, node errors, warnings, and (demo only) an inline preview image.

ParameterTypeRequiredDescription
target_geostringnoAbsolute path of an existing Geometry COMP to assign the displacement MAT to. Omit to build a self-contained demo (subdivided sphere + camera + light + render) so the material previews standalone.
texture_pathstringnoAbsolute path of a TOP whose luminance drives the displacement instead of procedural noise. Omit to use built-in 3D noise.
amountnumbernoDisplacement distance along each vertex normal (uAmount). 0 = undeformed. (default: 0.25)
frequencynumbernoSpatial frequency of the procedural noise (ignored when texture_path is set). (default: 2.5)
speednumbernoAnimation speed of the noise field (uTime scroll, cycles/s). 0 = static. Reads 0 when the TD timeline is paused. (default: 0.3)
demo_subdivisionsintegernoDemo sphere mesh resolution (only used when target_geo is omitted). (default: 140)
demo_colorobject[]noDemo surface tint (RGB 0..1); shaded by facing + displacement. Demo only. (default: 0.6,0.75,0.95)
expose_controlsbooleannoWhen true (default), expose live Amount / Frequency / Speed controls bound to the MAT. (default: true)
parent_pathstringnoParent network where the container (holding the MAT and, for the demo, the render chain) is created. (default: /project1)

controlled_disorder_grid mutates

Generate a rows×cols grid of quads (or outlined cells) with a single order↔chaos disorder knob: 0 = a perfect grid, 1 = full chaos. The one knob scales per-cell position, rotation, and scale jitter together — each hashed from the cell index in a single GLSL TOP so the pattern is stable and reproducible (the classic generative-design 'controlled randomness' / Schotter study, no external source). Set outline: true for line cells. Creates a new baseCOMP under parent_path. Exposes the live Disorder knob plus CellColor/Background swatches. Returns a summary plus a JSON block with node paths, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
rowsintegernoNumber of grid rows (top to bottom). (default: 20)
colsintegernoNumber of grid columns (left to right). (default: 20)
disordernumbernoThe single order↔chaos knob. 0 = a perfect grid; 1 = full chaos. Scales all per-cell position/rotation/scale jitter together. (default: 0.35)
pos_jitternumbernoMax per-cell position offset at disorder=1 (fraction of a cell). (default: 0.5)
rot_jitternumbernoMax per-cell rotation at disorder=1 (radians). (default: 1.2)
scale_jitternumbernoMax per-cell scale variation at disorder=1 (fraction). (default: 0.3)
fillnumbernoCell size within its slot (0..1); leaves gutters between cells. (default: 0.7)
outlinebooleannoDraw outlined cells instead of filled quads (classic Schotter look). (default: false)
line_widthnumbernoOutline thickness (fraction of a cell); used only when outline=true. (default: 0.04)
cell_colorstringnoCell / line colour hex (e.g. '#f2f2f2'). Live RGB swatch 'CellColor'. (default: #f2f2f2)
backgroundstringnoBackground colour hex. Live RGB swatch 'Background'. (default: #101014)
resolutionobject[]noOutput resolution [width, height] of the GLSL TOP (square suits a grid). (default: 1080,1080)
expose_controlsbooleannoExpose the live Disorder knob (and CellColor/Background swatches). (default: true)
parent_pathstringnoParent COMP path the self-contained 'disorder_grid' container is created inside. (default: /project1)

create_blob_trace mutates

Trace the contour/outline of a blob or silhouette into vector line art: source → monochrome → blur → threshold (the blob mask, optionally inverted) → optional Edge (boundary-band only) → Trace SOP (mask-to-polyline) → wireframe render. This is the CONTOUR-TRACE complement to create_vector_lines (full image vectoriser) and export_sop_to_svg, and is distinct from create_blob_reactive (which tracks blob position/reactivity — it does not draw the outline). Source can be the live camera (may prompt for macOS permission), a movie file, an animated synthetic blob (testable without a camera), or an existing TOP. Creates a new baseCOMP under parent_path. Exposes Threshold, Blur, and LineWidth controls. Returns a summary plus a JSON block with the container path, created node paths, output path, exposed controls, node errors, warnings, and an inline preview image.

ParameterTypeRequiredDescription
sourcecamera | file | synthetic | existing_topnoBlob source. 'camera' = live webcam (may prompt for macOS camera permission). 'file' = a movie file (movie_file_path). 'synthetic' = an animated noise blob so the trace is testable with no device (the default). 'existing_top' = trace a TOP you already have (existing_top_path). (default: synthetic)
movie_file_pathstringnoPath to a movie file to trace; used only when source='file'.
existing_top_pathstringnoPath of an existing TOP to trace; used only when source='existing_top'.
thresholdnumbernoLuminance cutoff that separates blob (foreground) from background. Live 'Threshold'. (default: 0.45)
invertbooleannoInvert the mask so dark regions become the traced blob instead of bright ones. (default: false)
pre_blurnumbernoGaussian blur (pixels) before thresholding — smooths noisy edges into clean contours. Live 'Blur'. (default: 4)
edge_onlybooleannoRun an Edge TOP before tracing so only the blob's boundary band is traced (hollow outline). (default: false)
line_widthnumbernoContour line width for the wireframe material. (default: 2)
line_colorobject[]noContour line colour (RGB 0..1). (default: 0.1,1,0.6)
backgroundobject[]noBackground colour behind the traced contour (RGB 0..1). (default: 0.02,0.02,0.03)
resolutionobject[]noOutput resolution [width, height]. (default: 1280,720)
expose_controlsbooleannoWhen true (default), expose live Threshold, Blur, and LineWidth controls. (default: true)
parent_pathstringnoParent network where the blob-trace container is created (default '/project1'). (default: /project1)

Building blocks & live control (Layer 2)

Mid-level tools for assembling, wiring, controlling, animating and storing networks — the pieces the Layer 1 generators are built from, exposed for fine control.

focus_network_editor mutates

Pan/zoom TouchDesigner's Network Editor to frame the given operators — a 'follow' move so the artist sees what the agent just built instead of hunting for it. UI-only: it points a Network Editor pane at the operators' parent, selects them, and homes on the selection with zoom. Changes nothing in the project graph.

ParameterTypeRequiredDescription
pathsstring[]yesOperator paths to frame in the Network Editor, e.g. the nodes you just created.
animatebooleannoLet TouchDesigner animate the pan/zoom to the operators (a 'follow' move). (default: true)

create_node_chain mutates

Create multiple nodes and (optionally) connect them in sequence. Returns all created paths; on failure it stops and reports partial progress without deleting anything.

ParameterTypeRequiredDescription
parent_pathstringyesParent COMP to create the chain inside.
nodesobject[]yesOrdered list of nodes to create.
connect_sequentiallybooleannoWire output[0] → input[0] for each consecutive pair. (default: true)

connect_nodes mutates

Wire one node's output connector into another node's input connector inside TouchDesigner, creating a single link between two existing nodes. Uses the bridge's batch endpoint when available and falls back to a Python connect otherwise. Use create_node_chain instead when you are creating several new nodes and want them auto-wired in sequence. Returns the source and target paths, the connector indices used, and which method made the connection.

ParameterTypeRequiredDescription
source_pathstringyesPath of the source node (output side).
target_pathstringyesPath of the target node (input side).
source_outputintegernoWhich output connector of the source node to wire from (0-based; default 0). (default: 0)
target_inputintegernoWhich input connector of the target node to wire into (0-based; default 0). (default: 0)

create_glsl_shader mutates

Create a GLSL TOP under parent_path that renders a custom fragment shader (and optional vertex shader). The shader source is placed in companion Text DATs (&lt;name&gt;_frag and, if given, &lt;name&gt;_vert) and wired to the GLSL TOP's pixel/vertex parameters; numeric uniforms are best-effort bound on the Vectors page and the output resolution is set. Returns the GLSL TOP path, the fragment/vertex DAT paths, and any warnings (e.g. sampler2D uniforms or uniform binds that need manual wiring).

ParameterTypeRequiredDescription
parent_pathstringyesParent COMP to create the GLSL TOP inside.
namestringnoName for the GLSL TOP (default 'glsl1').
fragment_shaderstringyesGLSL fragment (pixel) shader source.
vertex_shaderstringnoOptional GLSL vertex shader source.
uniformsobject[]noOptional uniform declarations to best-effort bind on the GLSL TOP.
resolution720p | 1080p | 4K | inputnoOutput resolution: '720p' (1280x720), '1080p' (1920x1080), '4K' (3840x2160), or 'input' (default — inherit from the input TOP). (default: input)

create_python_script destructive

Create one DAT under parent_path preloaded with your Python code. dat_type chooses a Text DAT (plain code), an Execute DAT (event hooks like onFrameStart), or a Script DAT (table builder); for a Script DAT the code is written to its auto-created companion callbacks DAT, since the Script DAT's own text is read-only. Returns the created DAT's path. This only stores code as a node; use execute_python_script instead to run Python immediately against the live project.

ParameterTypeRequiredDescription
parent_pathstringyesParent COMP to create the DAT inside.
namestringnoName for the new DAT; auto-generated when omitted.
codestringyesPython source to place in the DAT.
dat_typetext | execute | scriptnoKind of DAT: 'text' (plain), 'execute' (event hooks), or 'script' (table builder). (default: text)

set_parameters_batch mutates

Update parameters on multiple nodes in a single batch request. Each update reports its own success; a failure does not roll back the others.

ParameterTypeRequiredDescription
updatesobject[]yesList of { path, parameters } updates sent in one batch request (per-update results; not transactional — a failed update does not roll back the others).

create_container mutates

Create one empty COMP under parent_path to hold a visual system, then tile it into the parent's network grid clear of existing siblings. comp_type picks a Container COMP (a 2D panel) or a generic Base COMP. Returns the created node's path, type, and name. Use a higher-level Layer 1 tool instead when you want a fully built, wired network rather than an empty shell.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to create the container in. (default: /project1)
namestringnoName for the new COMP; TouchDesigner auto-generates one when omitted.
comp_typecontainer | baseno'container' (2D panel COMP) or 'base' (generic COMP). (default: container)

create_control_panel mutates

Expose live controls on a COMP: append custom parameters (sliders, toggles, menus, RGB, pulse) and bind them to node parameters so the artist can drive a generated system in real time. Point comp_path at a system container and list the controls; use each control's bind_to to wire it to one or more 'nodePath.parName' targets.

ParameterTypeRequiredDescription
comp_pathstringnoCOMP that will receive the custom parameters — usually a generated system's container. (default: /project1)
pagestringnoName of the custom-parameter page to add the controls to. (default: Controls)
controlsobject[]yesThe controls (knobs/sliders/toggles/menus) to expose.

auto_ui_from_params mutates

Generate a performable control panel from an existing node/COMP's primitive parameters. It reads source_path, infers sliders/toggles/text fields, appends them as custom parameters on comp_path (default source_path), and optionally binds each control back to the source parameter. Use when a generated component has useful parameters but no playable UI yet.

ParameterTypeRequiredDescription
source_pathstringyesNode or COMP whose parameters should become controls.
comp_pathstringnoCOMP that receives the generated control panel. Defaults to source_path.
pagestringnoCustom-parameter page name for the controls. (default: Auto UI)
parametersstring[]noOnly expose these parameter names. Omit to infer useful primitive parameters.
excludestring[]noParameter names to skip. (default: ``)
max_controlsintegernoMaximum inferred controls when parameters is omitted. (default: 12)
bindbooleannoBind generated controls back to source_path parameters. (default: true)

create_companion_surface mutates

Build a companion performance surface for an existing node/COMP: infer useful primitive parameters, add bound custom parameters, create a playable fader/cue panel, and optionally append a read-only preflight report. Use after generating a component that needs a human-facing control surface without hand-wiring every parameter.

ParameterTypeRequiredDescription
source_pathstringyesNode or COMP whose useful parameters should be surfaced.
comp_pathstringnoCOMP that receives the custom parameters and panel. Defaults to source_path.
namestringnoName of the playable panel container to build. (default: companion_surface)
pagestringnoCustom-parameter page added by the auto UI pass. (default: Companion)
parametersstring[]noOnly expose these source parameter names. Omit to infer primitive controls.
excludestring[]noSource parameter names to skip. (default: ``)
max_controlsintegernoMaximum inferred controls when parameters is omitted. (default: 8)
include_fadersbooleannoBuild a playable fader/toggle surface for numeric inferred controls. (default: true)
cue_buttonsobject[]noOptional cue buttons to add to the playable surface. (default: ``)
include_preflightbooleannoAppend a read-only show_preflight_report result for the companion COMP. (default: true)
target_fpsnumbernoFrame-rate target for preflight. (default: 60)
bindbooleannoBind generated custom parameters back to source_path parameters. (default: true)

create_control_surface mutates

Build a playable performance panel (a Container COMP of visual widgets) for live use, beyond the parameter dialog: vertical faders that drive parameters, and buttons that recall or morph to named cues (from manage_cue). Open the container in Perform/Panel mode for a touchable surface — faders move their parameters, cue buttons fire scenes (instantly or with a crossfade).

ParameterTypeRequiredDescription
comp_pathstringnoControl COMP that holds the cues (manage_cue) and custom params. The surface is built inside it and its buttons fire that COMP's cues. (default: /project1)
namestringnoName of the panel container to build. (default: surface)
alignhorizlr | verttb | gridcols | gridrows | nonenoHow the panel lays out its widgets. (default: horizlr)
fadersobject[]noVertical faders, each driving a parameter. (default: ``)
cue_buttonsobject[]noButtons that recall or morph to named cues. (default: ``)

animate_parameter mutates

Drive one or more node parameters over time with an LFO (sine/triangle/ramp/square/pulse/random). Creates an LFO CHOP and binds each target so it oscillates between min and max with the given period — movement without manual keyframing.

ParameterTypeRequiredDescription
targetsstring[]yesParameters to animate, each written as 'nodePath.parName' (e.g. '/project1/sys/blur1.size'). Each is switched to expression mode so it tracks the oscillator live.
waveformsine | triangle | ramp | square | pulse | randomnoOscillator shape. Every waveform sweeps the full min–max range. (default: sine)
minnumbernoLow end of the value sweep. (default: 0)
maxnumbernoHigh end of the value sweep. (default: 1)
period_secondsnumbernoSeconds for one full cycle (lower = faster). (default: 4)
container_pathstringnoWhere to create the LFO CHOP; defaults to the first target's parent network.
namestringnoName for the LFO CHOP. (default: lfo_anim)

bind_to_channel mutates

Drive one or more node parameters from a CHOP channel by expression — the link that makes a visual react. Point it at an audio_features channel (bass/mid/treble/level) or a tempo_sync channel (ramp/pulse/beat) with a scale and offset, and each target parameter tracks that signal live. This is how you wire extract_audio_features / create_tempo_sync into a visual system. Optionally add attack/release smoothing (in seconds) — or a single smooth time — to insert a Lag CHOP between the channel and the parameter so reactivity follows a clean envelope instead of flickering on raw audio (e.g. a fast attack + slow release for a punchy hit that decays smoothly).

ParameterTypeRequiredDescription
targetsstring[]yesParameters to drive, each written as 'nodePath.parName' (e.g. '/project1/sys/transform1.scale'). Each is switched to expression mode so it tracks the channel live.
source_chopstringyesPath of the CHOP that carries the driving channel (e.g. an audio_features Null).
channelstringyesChannel name to read from the source CHOP (e.g. 'bass', 'level', 'ramp', 'pulse').
scalenumbernoMultiply the channel value (mapping gain). (default: 1)
offsetnumbernoAdd to the scaled value (mapping offset). (default: 0)
attacknumbernoSmoothing rise time in seconds — how slowly the bound value follows the channel UP. 0 = instant (no smoothing on the way up). A small attack with a larger release gives a snappy hit that decays smoothly (envelope follow).
releasenumbernoSmoothing fall time in seconds — how slowly the bound value follows the channel DOWN. 0 = instant (no smoothing on the way down). Set release > attack to remove flicker while keeping transients punchy.
smoothnumbernoConvenience: symmetric smoothing time in seconds applied to BOTH rise and fall (sets attack=release=smooth). Use this for simple low-pass-style de-jitter; use attack/release separately for an envelope follower.
smoothing_containerstringnoWhere to create the Select+Lag smoothing CHOPs when smoothing is active; defaults to the first target's parent network. Ignored when no smoothing is requested.

manage_presets mutates

Store, recall, list, or delete named snapshots of a COMP's parameter values — the live-performance preset system. Pair with create_control_panel: snapshot the knob positions and jump between looks. Snapshots are saved in the COMP's storage so they persist with the project.

ParameterTypeRequiredDescription
actionstore | recall | list | deleteyesstore a snapshot, recall one, list all, or delete one.
comp_pathstringnoCOMP whose parameter values the preset captures — usually a control-panel container. (default: /project1)
namestringnoPreset name (required for store/recall/delete).
paramsstring[]noSpecific custom-parameter names to capture/restore. Defaults to every custom parameter on the COMP.

manage_checkpoint destructive

Store / restore / list / delete a full snapshot of a sub-network — an 'undo point' to take before risky live edits. A checkpoint captures every node's constant parameters, the wiring, and node positions. Restoring reapplies parameters, recreates nodes that were deleted since (with their wiring), and prunes nodes that were created since. Unlike manage_presets (custom-parameter looks for performance), this captures the whole network for safe experimentation.

ParameterTypeRequiredDescription
actionstore | restore | list | deleteyesstore a full snapshot of a sub-network, restore one, list all, or delete one. A checkpoint is an 'undo point' before risky live edits.
comp_pathstringnoRoot COMP whose whole sub-network the checkpoint captures. (default: /project1)
namestringnoCheckpoint name (required for store/restore/delete).
prune_createdbooleanno(restore) Destroy nodes that were created after the checkpoint was stored. (default: true)
recreate_deletedbooleanno(restore) Recreate nodes that were deleted after the checkpoint (type + params + wiring, best-effort). (default: true)

manage_cue mutates

Live-performance scene system: store / recall / morph / list / delete named cues (snapshots of a COMP's custom-parameter values). Unlike manage_presets, a cue can be reached with a timed morph that crossfades every numeric control from the current look to the cue over N seconds (eased), via a small Execute DAT — so you can glide between looks on stage instead of hard-cutting. Recall and morph also take an optional quantize ('beat'/'bar') that defers the change to the next musical boundary (from the project tempo) so scene changes land on the downbeat. Build cues with create_control_panel, then jump or morph between them.

ParameterTypeRequiredDescription
actionstore | recall | morph | list | deleteyesstore a cue (snapshot of the COMP's custom params), recall it instantly, morph to it over time, list, or delete.
comp_pathstringnoCOMP whose custom-parameter values the cue captures (a control-panel container). (default: /project1)
namestringnoCue name (required for store/recall/morph/delete).
durationnumberno(morph) Crossfade time in seconds from the current look to the cue. (default: 2)
quantizeoff | beat | barno(recall/morph) Snap the scene change to the music. 'off' (the default) fires immediately. 'beat' defers the recall/morph until the next beat boundary; 'bar' until the next bar (measure) boundary — read from the project tempo (op('/').time.tempo) and time signature. The change is scheduled, not blocking.

manage_component destructive

Build a reusable component library by moving COMPs to/from .tox files on disk. Two actions: 'save' writes the COMP at comp_path to file_path as a .tox (overwriting any existing file, optionally creating parent folders) and returns the saved path and byte size; 'load' reads file_path back into parent_path, either as an independent copy or a live-linked instance (via linked) that re-reads the file on change, returning the loaded node's path, type, and child names. Paths are on the machine running TouchDesigner. Marked destructive because 'save' can overwrite an existing file.

ParameterTypeRequiredDescription
actionsave | loadyessave a COMP to a .tox file, or load a .tox into the project.
file_pathstringyesAbsolute path to the .tox file (e.g. '/Users/me/components/widget.tox').
comp_pathstringno(save) The COMP to save as a reusable .tox component.
parent_pathstringno(load) COMP to place the loaded component inside. (default: /project1)
linkedbooleanno(load) Create a live-linked instance (externaltox) that re-reads the file on change, instead of an independent copy. (default: false)
namestringno(load, linked) Name for the linked COMP; defaults to the file name.
create_foldersbooleanno(save) Create the parent folders if they do not exist. (default: false)

add_custom_parameters mutates

Append a custom-parameter page (knobs, sliders, toggles, menus, pulses, RGB, XYZ) to a COMP so a generated network becomes a tunable, reusable component. Point comp_path at the COMP and list the params; an existing parameter is skipped (reported as a warning), not overwritten. Pair with scaffold_extension for behavior and manage_component to save the result as a .tox.

ParameterTypeRequiredDescription
comp_pathstringyesThe COMP to add custom parameters to.
pagestringnoCustom-parameter page name (auto-capitalized; created if missing). (default: Custom)
paramsobject[]yesThe parameters (knobs/menus/toggles/pulses) to append.

scaffold_extension mutates

Give a COMP a Python extension class: create a Text DAT holding the class (with optional method stubs), wire it into an extension slot, optionally promote it (so members are callable directly on the COMP), and reinitialize. The other half of making a generated network reusable — pair with add_custom_parameters (knobs) and manage_component (save as .tox).

ParameterTypeRequiredDescription
comp_pathstringyesThe COMP to give a Python extension class.
class_namestringyesExtension class name, e.g. 'WidgetExt' (capitalized to a valid identifier; must already be identifier-safe).
methodsstring[]noOptional method-name stubs to add to the class (each takes only self).
promotebooleannoPromote the extension so its members are callable directly on the COMP (op.Method()). (default: true)
slotintegernoExtension slot (1–8) — a COMP can hold several extensions. (default: 1)

create_macro mutates

Add one macro knob (a 0–1 custom parameter) to a COMP that drives many parameters at once, each remapped into its own [min,max] range with an optional response curve — a one-to-many control for sweeping a whole look from a single fader. Targets are bound by expression so they track the macro live.

ParameterTypeRequiredDescription
comp_pathstringnoCOMP that will hold the macro knob (usually a control-panel container). (default: /project1)
namestringyesMacro control name, e.g. 'Energy' or 'Intensity'.
defaultnumbernoInitial macro value (0–1). (default: 0)
targetsobject[]yesParameters this macro drives, each remapped from the macro's 0–1 into [min,max].

randomize_controls mutates

Randomize a COMP's numeric custom parameters within their slider ranges — an instant new variation for live improvisation. amount blends toward random (1 = fully random, low values nudge the current look). Non-numeric controls (toggles, menus) are left untouched, so it is always safe to fire. Pair with manage_presets/manage_cue to snapshot a happy accident.

ParameterTypeRequiredDescription
comp_pathstringnoCOMP whose custom parameters to randomize (usually a control-panel container). (default: /project1)
paramsstring[]noSpecific custom-parameter names to randomize. Defaults to every numeric one.
amountnumbernoHow far to move toward a random value in range: 1 = fully random, 0.2 = a gentle nudge from the current value. Lets you improvise without losing the current look. (default: 1)
seedintegernoOptional RNG seed for repeatable results.

create_phone_remote mutates

Serve a mobile-friendly web panel from a Web Server DAT so you can control a COMP's numeric custom parameters from a phone — just open the URL, no app to install. Each parameter becomes a touch slider that writes back live. SECURITY: like the bridge, this listens on all interfaces and accepts writes with no auth, so use it only on a trusted network. Pair with create_control_panel (the params to expose) and manage_cue (snapshot looks you dial in from the phone).

ParameterTypeRequiredDescription
comp_pathstringnoControl COMP whose numeric custom parameters the phone page exposes. (default: /project1)
portintegernoTCP port for the remote web server (keep it distinct from the bridge's 9980). (default: 9981)

create_external_io mutates

Bridge TouchDesigner to the outside world: OSC/MIDI input (a control surface — bind incoming channels straight to parameters), OSC/MIDI output (send a CHOP's channels back out for bidirectional feedback to lighting desks, other apps or hardware — pass source_path), DMX/Art-Net output for lighting (dmx_out for any DMX desk; artnet_out for network Art-Net/sACN pixel-mapping of LED strips & stage fixtures), RTMP output to live-stream a TOP to Twitch/YouTube/OBS (rtmp_out — NVIDIA GPU on Windows only), or NDI / Syphon-Spout video input. To discover which channel a control sends (a 'MIDI learn'), wiggle it and read the input CHOP with get_td_nodes, then bind_to that channel. Validate live where possible, but real signal needs the hardware/sender present.

ParameterTypeRequiredDescription
kindosc_in | midi_in | keyboard_in | gamepad_in | mouse_in | osc_out | …yesWhat to bridge: OSC/MIDI/keyboard/gamepad/mouse input (a control surface — bind channels to parameters), OSC/MIDI output (send a CHOP's channels back out for bidirectional feedback — pass source_path), DMX/Art-Net output for lighting (dmx_out is the general DMX desk; artnet_out is a network-only Art-Net/sACN preset for pixel-mapping LED strips & stage fixtures — both send a CHOP's 0-255 channels and need source_path), RTMP output to live-stream a TOP to Twitch/YouTube/OBS-ingest (rtmp_out — pass source_path = the TOP to stream and url; needs an NVIDIA GPU on Windows), NDI / Syphon-Spout video input, or NDI / Syphon-Spout video output (ndi_out / syphon_spout_out — pass source_path = the TOP to send and an optional source_name for the NDI source / Spout sender name; flip active to start immediately). On Windows, Spout needs an NVIDIA or AMD GPU (no Intel).
parent_pathstringnoCOMP to create the I/O operator in. (default: /project1)
namestringnoName for the I/O operator; auto-generated when omitted.
portintegerno(osc_in) UDP port to listen on / (osc_out) port to send to. Defaults to 7000.
normalizeoff | 0to1 | -1to1 | onoffno(midi_in) How to scale incoming MIDI values. (default: 0to1)
bind_toobject[]no(osc_in/midi_in) Map incoming channels to parameters. Each binding tolerates a channel that hasn't arrived yet (falls back to 0 instead of erroring).
source_pathstringno(dmx_out/artnet_out/osc_out/midi_out) CHOP whose channel values are sent out, or (rtmp_out / video_device_out / ndi_out / syphon_spout_out) the TOP to send. Should live in the same COMP as parent_path so the wire/source connects.
interfaceartnet | sacn | enttecusbpro | enttecusbpromk2 | serial | kinetno(dmx_out) DMX transport. (artnet_out forces a network protocol via net.) (default: artnet)
netartnet | sacnno(artnet_out) Network DMX protocol: Art-Net or sACN (streaming ACN). Defaults to Art-Net.
universeintegerno(dmx_out/artnet_out) DMX universe. (default: 1)
net_addressstringno(dmx_out/artnet_out) Target IP address for Art-Net / sACN.
urlstringno(rtmp_out) Full RTMP destination as {service url}/{stream key}, e.g. 'rtmp://live.twitch.tv/app/live_xxx'. If omitted but stream_key is given, prefix with rtmp_base.
rtmp_basestringno(rtmp_out) Ingest base URL to combine with stream_key when url is not given (defaults to YouTube's primary ingest).
stream_keystringno(rtmp_out) Stream key, appended to rtmp_base as '{rtmp_base}/{stream_key}'.
fpsnumberno(rtmp_out) Frame rate to stream at. Defaults to 30.
activebooleanno(rtmp_out/ndi_out/syphon_spout_out) Start sending immediately. Defaults off so the artist can confirm the destination/sender name first.
source_namestringno(ndi_in/syphon_spout_in/ndi_out/syphon_spout_out) Name of the NDI source or Spout sender to receive or send, or (video_device_out) the SDI/capture-card output device name. For outputs, defaults to the operator name when omitted.

connect_companion_surface mutates

Build an OSC Companion-style button surface inside TouchDesigner: an OSC In CHOP listens for button addresses, each button gets a Select CHOP and Null CHOP row, optional target parameters are expression-bound, and an OSC Out CHOP is configured for feedback. A mapping table records label/address/target/mode/feedback for later editing.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP where the companion surface baseCOMP is created. (default: /project1)
namestringnoName of the Companion OSC surface baseCOMP. (default: companion_surface)
listen_portintegernoLocal OSC port for Companion/button input. (default: 9000)
feedback_hoststringnoRemote host that receives outgoing OSC feedback. (default: 127.0.0.1)
feedback_portintegernoRemote OSC port that receives outgoing feedback. (default: 9001)
buttonsobject[]noButton mappings to create as Select CHOP -> Null CHOP rows. (default: ``)
create_mapping_datbooleannoCreate/populate a tableDAT listing label, address, target, mode, and feedback. (default: true)

connect_obs_recorder mutates

Create a TouchDesigner-side OBS control scaffold with obs-websocket v5 request templates, status/setup DATs, and optional NDI or Syphon/Spout TOP publishing for OBS capture. The optional OBS password is passed only to the bridge payload and is redacted from all returned reports.

ParameterTypeRequiredDescription
parent_pathstringnoCOMP that will receive the OBS recorder control scaffold. (default: /project1)
namestringnoContainer name for the OBS scaffold. (default: obs_recorder)
obs_urlstringnoOBS obs-websocket URL. OBS 28+ includes obs-websocket by default. (default: ws://127.0.0.1:4455)
passwordstringnoOptional OBS websocket password. Never echoed in returned reports.
scene_namestringnoOptional OBS scene name for scene switch requests.
source_top_pathstringnoOptional TD TOP to publish to OBS through NDI or Syphon/Spout.
output_modendi | syphon_spout | nonenoHow to expose source_top_path for OBS capture. (default: ndi)
recording_profilerehearsal | stream | archivenoOperator-facing recording profile label stored in the scaffold status. (default: rehearsal)
activebooleannoStart websocket/sender operators active immediately. Defaults off for setup. (default: false)

create_touchosc_layout mutates

Create a TouchOSC-oriented OSC mapping surface and JSON manifest DAT. This intentionally does not claim to generate TouchOSC .tosc documents.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the TouchOSC surface. (default: /project1)
namestringnoGenerated baseCOMP name. (default: touchosc_layout)
receive_portintegerno(default: 8000)
send_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 9000)
page_namestringno(default: tdmcp)
controlsobject[]noTouchOSC-style controls to expose as OSC mapping rows. (default: ``)
create_manifest_datbooleanno(default: true)

create_voice_prompt_pipeline mutates

Create a dry-run/approval-gated voice-to-prompt TouchDesigner scaffold for AI Party-style workflows. It never dispatches raw hardware effects; policy and operator approval remain authoritative.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the pipeline. (default: /project1)
namestringnoGenerated baseCOMP name. (default: voice_prompt_pipeline)
audio_sourcemicrophone | file | external_textno(default: microphone)
audio_filestringno
stt_modeexternal_websocket | file_drop | manual_textno(default: manual_text)
llm_targetai_party | comfyui_prompt | streamdiffusion_prompt | text_onlyno(default: text_only)
approval_modedry_run | approval_requiredno(default: dry_run)
server_urlstringno(default: ws://127.0.0.1:8770)
activebooleanno(default: false)

connect_touchengine_notch mutates

Create a TouchEngine/Notch bridge scaffold with stable output TOP, control channels, NDI/Syphon fallback modes, and explicit licensing/runtime warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the bridge scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: touchengine_notch)
modetouchengine | notch_top | ndi_fallback | syphon_spout_fallbackno(default: touchengine)
tox_or_block_pathstringnoTouchEngine tox/block path or Notch block path.
input_top_pathstringnoOptional TOP to feed into the engine/fallback.
output_namestringnoStable output Null TOP name. (default: notch_out)
control_channelsstring[]noNamed control channels to scaffold. (default: ``)
activebooleannoStart engine/fallback active where supported. (default: false)

connect_resolume_arena mutates

Create a Resolume Arena/Avenue OSC control scaffold with command maps, status DATs, and preview handoff notes. Runtime validation against Resolume remains explicit.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Resolume scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: resolume_arena)
resolume_hoststringnoResolume OSC host. (default: 127.0.0.1)
send_portintegerno(default: 7000)
receive_portintegerno(default: 7001)
composition_namestringnoLabel stored in status metadata. (default: composition)
deck_countintegerno(default: 1)
layer_countintegerno(default: 3)
clip_countintegerno(default: 8)
preview_modenone | ndi | syphon_spoutno(default: none)
activebooleannoActivate OSC operators immediately. (default: false)

connect_madmapper_surface mutates

Create a MadMapper OSC surface/media control scaffold with source handoff notes for Syphon/Spout or NDI.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the MadMapper scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: madmapper_surface)
madmapper_hoststringnoMadMapper OSC host. (default: 127.0.0.1)
send_portintegerno(default: 8010)
receive_portintegerno(default: 8011)
surface_countintegerno(default: 4)
media_countintegerno(default: 4)
source_top_pathstringnoOptional TD TOP intended for projection handoff.
handoff_modenone | syphon_spout | ndino(default: syphon_spout)
activebooleanno(default: false)

create_mocap_stream_bridge mutates

Create a generic OptiTrack/Rokoko/Axis Studio/VRPN-style mocap bus scaffold with joint and rigid-body mapping surfaces.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the mocap scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: mocap_stream_bridge)
source_modeosc | websocket_json | tcp_json | vrpn | sampleno(default: osc)
receive_portintegerno(default: 9002)
server_urlstringno(default: ws://127.0.0.1:9002)
skeleton_countintegerno(default: 1)
rigid_body_countintegerno(default: 0)
coordinate_spacey_up | z_up | touchdesignerno(default: touchdesigner)
activebooleanno(default: false)

create_blender_scene_bridge mutates

Create a Blender-to-TouchDesigner scene handoff scaffold for file-watch, OSC, or WebSocket metadata workflows.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Blender bridge. (default: /project1)
namestringnoGenerated baseCOMP name. (default: blender_scene_bridge)
handoff_modefile_watch | websocket_json | oscno(default: file_watch)
watch_folderstringno(default: ./blender_exports)
server_urlstringno(default: ws://127.0.0.1:8765)
receive_portintegerno(default: 8765)
asset_formatgltf | alembic | fbx | objno(default: gltf)
sync_camerabooleanno(default: true)
sync_lightsbooleanno(default: false)
activebooleanno(default: false)

Create an Unreal Engine Live Link/OSC/NDI handoff scaffold with subject maps, event queue, and runtime setup warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Unreal bridge. (default: /project1)
namestringnoGenerated baseCOMP name. (default: unreal_livelink_bridge)
modelivelink_osc | udp_json | ndi_preview | manualno(default: livelink_osc)
unreal_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 9000)
receive_portintegerno(default: 9001)
subject_namestringno(default: tdmcp_camera)
sync_camerabooleanno(default: true)
sync_transformbooleanno(default: true)
preview_modenone | ndino(default: ndi)
activebooleanno(default: false)

create_vcv_rack_bridge mutates

Create a VCV Rack OSC/MIDI/CV modulation bridge scaffold with channel mapping and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the VCV scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: vcv_rack_bridge)
modeosc | midi | cv_audio | manualno(default: osc)
rack_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 12000)
receive_portintegerno(default: 12001)
midi_devicestringno
channel_countintegerno(default: 8)
bipolarbooleanno(default: true)
activebooleanno(default: false)

connect_qlab_cue_stack mutates

Create a QLab OSC cue-stack scaffold with cue command maps, status, and rehearsal-focused setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the QLab scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: qlab_cue_stack)
qlab_hoststringnoQLab OSC host. (default: 127.0.0.1)
send_portintegerno(default: 53000)
receive_portintegerno(default: 53001)
workspace_idstringnoOptional QLab workspace identifier/label.
cue_countintegerno(default: 16)
include_transportbooleannoInclude GO/STOP/PAUSE/RESUME rows. (default: true)
activebooleannoActivate OSC operators immediately. (default: false)

connect_lighting_console_osc mutates

Create a safety-gated OSC command scaffold for grandMA3, ETC Eos, ChamSys, Avolites, or generic lighting consoles without sending direct DMX.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the lighting-console OSC scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: lighting_console_osc)
console_familygrandma3 | etc_eos | chamsys | avolites | generic_oscno(default: generic_osc)
console_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 8000)
receive_portintegerno(default: 8001)
cue_countintegerno(default: 16)
executor_countintegerno(default: 8)
safety_modedry_run | approval_requiredno(default: dry_run)
activebooleanno(default: false)

connect_max_msp_bridge mutates

Create a Max/MSP OSC bridge scaffold with parameter and audio-feature channel maps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Max/MSP scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: max_msp_bridge)
max_hoststringnoMax/MSP OSC host. (default: 127.0.0.1)
send_portintegerno(default: 7400)
receive_portintegerno(default: 7401)
namespacestringnoOSC namespace prefix. (default: /tdmcp)
channel_countintegerno(default: 8)
include_audio_featuresbooleanno(default: true)
activebooleanno(default: false)

create_openxr_controller_bridge mutates

Create an OpenXR/SteamVR controller input scaffold for pose, trigger, grip, thumbstick, and button streams supplied by an external adapter.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the OpenXR scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: openxr_controller_bridge)
source_modeosc | websocket_json | manualno(default: osc)
receive_portintegerno(default: 9050)
server_urlstringno(default: ws://127.0.0.1:9050)
controller_countintegerno(default: 2)
coordinate_spaceopenxr | steamvr | touchdesignerno(default: touchdesigner)
activebooleanno(default: false)

connect_vmix_production mutates

Create a vMix HTTP/API production-control scaffold for input switching, overlays, recording, and streaming command templates.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the vMix scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: vmix_production)
vmix_hoststringno(default: 127.0.0.1)
api_portintegerno(default: 8088)
input_countintegerno(default: 8)
overlay_countintegerno(default: 4)
include_record_streambooleanno(default: true)
activebooleanno(default: false)

connect_casparcg_server mutates

Create a CasparCG AMCP/playout scaffold with channel/layer command templates and media manifest notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the CasparCG scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: casparcg_server)
caspar_hoststringno(default: 127.0.0.1)
amcp_portintegerno(default: 5250)
channel_countintegerno(default: 1)
layer_countintegerno(default: 4)
media_root_hintstringno(default: media/)
activebooleanno(default: false)

connect_millumin_show mutates

Create a Millumin OSC layer, column, and dashboard control scaffold with command maps and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Millumin scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: millumin_show)
millumin_hoststringnoMillumin OSC host. (default: 127.0.0.1)
send_portintegerno(default: 5000)
receive_portintegerno(default: 5001)
layer_countintegerno(default: 4)
column_countintegerno(default: 8)
dashboard_pagestringno(default: main)
activebooleanno(default: false)

connect_isadora_patch mutates

Create an Isadora OSC actor, watcher, and scene exchange scaffold with stable namespace mapping.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Isadora scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: isadora_patch)
isadora_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 1234)
receive_portintegerno(default: 1235)
namespacestringno(default: /tdmcp)
scene_countintegerno(default: 4)
actor_countintegerno(default: 8)
watcher_countintegerno(default: 4)
activebooleanno(default: false)

connect_unity_osc_bridge mutates

Create a Unity OSC and preview handoff scaffold for object transforms, events, and NDI/Syphon notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Unity bridge. (default: /project1)
namestringnoGenerated baseCOMP name. (default: unity_osc_bridge)
unity_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 9000)
receive_portintegerno(default: 9001)
namespacestringno(default: /tdmcp)
object_countintegerno(default: 8)
event_countintegerno(default: 8)
preview_modenone | ndi | syphon_spoutno(default: none)
activebooleanno(default: false)

connect_reaper_transport mutates

Create a REAPER OSC transport, track, and marker bridge scaffold with operator-approved recording templates.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the REAPER scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: reaper_transport)
reaper_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 8000)
receive_portintegerno(default: 9000)
project_namestringno(default: show)
track_countintegerno(default: 8)
marker_countintegerno(default: 8)
include_recordbooleanno(default: false)
activebooleanno(default: false)

create_ndi_router_matrix mutates

Create a stable NDI source/output routing matrix scaffold without claiming live NDI discovery.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the NDI matrix. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ndi_router_matrix)
source_countintegerno(default: 8)
output_countintegerno(default: 4)
include_previewbooleanno(default: true)
activebooleanno(default: false)

connect_webrtc_browser_input mutates

Create a browser/WebRTC input scaffold for webcam, screen, pointer, and sensor data supplied by an external signaling app.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the WebRTC scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: webrtc_browser_input)
signaling_urlstringno(default: ws://127.0.0.1:8787)
room_idstringno(default: tdmcp)
input_modewebcam | screen | pointer | sensors | mixedno(default: mixed)
include_data_channelsbooleanno(default: true)
activebooleanno(default: false)

connect_spout_syphon_router mutates

Create a platform-gated Syphon/Spout texture-sharing router scaffold with route maps and explicit setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the router scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: spout_syphon_router)
modereceive | send | roundtripno(default: roundtrip)
source_namestringnoSyphon/Spout sender to receive. (default: tdmcp_source)
output_namestringnoSyphon/Spout sender name to publish. (default: tdmcp_output)
route_countintegerno(default: 4)
activebooleanno(default: false)

connect_blackmagic_atem mutates

Create a Blackmagic ATEM command-map scaffold with UDP transport placeholders, input maps, macro maps, and operator approval notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the ATEM scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: blackmagic_atem)
atem_hoststringnoBlackmagic ATEM switcher host. (default: 192.168.10.240)
send_portintegerno(default: 9910)
receive_portintegerno(default: 9911)
input_countintegerno(default: 8)
macro_countintegerno(default: 8)
include_cut_autobooleanno(default: true)
activebooleanno(default: false)

connect_oscquery_namespace mutates

Create an OSCQuery HTTP namespace and OSC send/receive scaffold with action maps for live-control apps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the OSCQuery scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: oscquery_namespace)
service_hoststringnoOSCQuery HTTP service host. (default: 127.0.0.1)
http_portintegerno(default: 5678)
osc_send_portintegerno(default: 9000)
osc_receive_portintegerno(default: 9001)
namespace_rootstringnoOSCQuery namespace root path. (default: /)
action_countintegerno(default: 8)
activebooleanno(default: false)

connect_mqtt_iot_bus mutates

Create an MQTT Client DAT bus scaffold for IoT sensors, installation telemetry, and policy-gated operator commands.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the MQTT scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: mqtt_iot_bus)
broker_hoststringnoMQTT broker host. (default: 127.0.0.1)
broker_portintegerno(default: 1883)
topic_rootstringnoRoot MQTT topic for show data. (default: tdmcp/show)
topic_countintegerno(default: 8)
client_idstringno(default: tdmcp_touchdesigner)
qosintegerno(default: 0)
activebooleanno(default: false)

create_depthai_oak_pipeline mutates

Create a DepthAI/OAK camera scaffold with OAK Device, OAK Select TOP/CHOP placeholders, stream maps, and hardware-gated setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the OAK scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: depthai_oak_pipeline)
device_namestringno(default: oak)
stream_countintegerno(default: 3)
include_depthbooleanno(default: true)
include_trackingbooleanno(default: true)
activebooleanno(default: false)

connect_arkit_face_capture mutates

Create an ARKit Face Capture OSC scaffold with blendshape and head-transform maps for iPhone-driven facial performance.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the ARKit scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: arkit_face_capture)
receive_portintegerno(default: 11111)
face_countintegerno(default: 1)
blendshape_countintegerno(default: 52)
include_head_transformbooleanno(default: true)
activebooleanno(default: false)

connect_pangolin_beyond mutates

Create a safety-gated Pangolin Beyond laser-control scaffold with zone maps, cue maps, blackout notes, and no live-output claim.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Pangolin scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: pangolin_beyond)
source_modesop | chopno(default: chop)
zonestringno(default: zone_1)
zone_countintegerno(default: 4)
cue_countintegerno(default: 8)
output_ratenumberno(default: 30)
safety_blackoutbooleanno(default: true)
activebooleanno(default: false)

create_hokuyo_lidar_bus mutates

Create a Hokuyo LiDAR scanner scaffold with hardware-gated CHOP setup, scan-zone maps, and calibration notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Hokuyo scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: hokuyo_lidar_bus)
interface_modenetwork | serialno(default: network)
net_addressstringno(default: 192.168.0.10)
serial_portstringno(default: COM3)
scan_zonesintegerno(default: 8)
start_stepintegerno(default: 0)
end_stepintegerno(default: 1080)
high_sensitivitybooleanno(default: false)
activebooleanno(default: false)

connect_supercollider_synth mutates

Create a SuperCollider OSC synth/bus bridge scaffold with explicit port maps and no code-evaluation behavior.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: supercollider_synth)
sc_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 57120)
receive_portintegerno(default: 57121)
synth_countintegerno(default: 4)
bus_countintegerno(default: 8)
activebooleanno(default: false)

Create an Ableton Link timing scaffold with beat/bar maps for tempo-locked visual systems.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Link scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ableton_link_session)
tempo_hintnumberno(default: 120)
signatureintegerno(default: 4)
export_barsintegerno(default: 8)
start_stop_syncbooleanno(default: false)
activebooleanno(default: false)

Create a Blackmagic DeckLink video-device input/output router scaffold with route maps and hardware-gated safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the router scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: decklink_io_router)
input_devicestringno(default: Blackmagic)
output_devicestringno(default: Blackmagic)
signal_formatstringno(default: 1080p5994)
route_countintegerno(default: 2)
activebooleanno(default: false)

connect_midi_mpe_controller mutates

Create an expressive MIDI MPE input/output scaffold with zone and expression maps for pressure, timbre, pitch bend, and note channels.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the MPE scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: midi_mpe_controller)
device_namestringno(default: MPE Controller)
lower_zone_channelsintegerno(default: 15)
include_outputbooleanno(default: false)
expression_countintegerno(default: 5)
activebooleanno(default: false)

connect_tidalcycles_livecoding mutates

Create a TidalCycles/SuperDirt OSC scaffold with pattern and orbit maps for live-coded audiovisual sets.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Tidal scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: tidalcycles_livecoding)
tidal_hoststringnoTidalCycles/SuperDirt OSC host. (default: 127.0.0.1)
send_portintegerno(default: 57120)
receive_portintegerno(default: 6010)
orbit_countintegerno(default: 4)
pattern_countintegerno(default: 8)
activebooleanno(default: false)

connect_vdmx_workspace mutates

Create a VDMX OSC/Syphon workspace scaffold with layer, clip, preview, and setup maps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the VDMX scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: vdmx_workspace)
vdmx_hoststringno(default: 127.0.0.1)
send_portintegerno(default: 12345)
receive_portintegerno(default: 12346)
layer_countintegerno(default: 4)
clip_countintegerno(default: 16)
preview_modenone | syphon_spout | ndino(default: syphon_spout)
activebooleanno(default: false)

connect_disguise_stage mutates

Create a disguise/d3 HTTP and OSC show-control scaffold with timeline, layer, and approval maps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the disguise scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: disguise_stage)
api_hoststringno(default: 127.0.0.1)
api_portintegerno(default: 8080)
osc_portintegerno(default: 7400)
timeline_countintegerno(default: 4)
layer_countintegerno(default: 8)
activebooleanno(default: false)

create_azure_kinect_body_bus mutates

Create an Azure Kinect body/depth scaffold with Kinect Azure TOP/CHOP placeholders, stream maps, and calibration notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Azure Kinect scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: azure_kinect_body_bus)
device_indexintegerno(default: 0)
body_countintegerno(default: 2)
include_depth_topbooleanno(default: true)
include_color_topbooleanno(default: true)
activebooleanno(default: false)

create_zed_depth_bus mutates

Create a ZED camera depth/body/point-cloud scaffold with ZED TOP/CHOP/SOP placeholders and runtime-gated warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the ZED scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: zed_depth_bus)
camera_indexintegerno(default: 0)
stream_countintegerno(default: 3)
body_countintegerno(default: 1)
include_pointcloudbooleanno(default: true)
activebooleanno(default: false)

create_leap_motion_hand_bus mutates

Create a Leap Motion hand/gesture scaffold with CHOP/TOP placeholders, hand maps, gesture maps, and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Leap Motion scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: leap_motion_hand_bus)
hand_countintegerno(default: 2)
gesture_countintegerno(default: 6)
include_image_topbooleanno(default: false)
activebooleanno(default: false)

create_blacktrax_tracking_bus mutates

Create a BlackTrax tracking scaffold with receiver, trackable maps, zone maps, and calibration notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the BlackTrax scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: blacktrax_tracking_bus)
portintegerno(default: 24002)
trackable_countintegerno(default: 8)
zone_countintegerno(default: 4)
activebooleanno(default: false)

create_ncam_camera_tracking_bus mutates

Create an NCAM camera-tracking scaffold with pose, lens, video-preview, and calibration maps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the NCAM scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ncam_camera_tracking_bus)
portintegerno(default: 3880)
camera_countintegerno(default: 1)
lens_profile_countintegerno(default: 4)
include_video_topbooleanno(default: true)
activebooleanno(default: false)

create_ouster_lidar_bus mutates

Create an Ouster LiDAR scaffold with Ouster TOP, range selection, zone maps, and calibration notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Ouster LiDAR scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ouster_lidar_bus)
device_addressstringno(default: 192.168.1.1)
lidar_portintegerno(default: 7502)
imu_portintegerno(default: 7503)
ring_countintegerno(default: 64)
zone_countintegerno(default: 6)
activebooleanno(default: false)

connect_tuio_touch_surface mutates

Create a TUIO touch-surface scaffold with TUIO DAT, optional raw OSC, cursor maps, and surface maps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the TUIO surface scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: tuio_touch_surface)
listen_portintegerno(default: 3333)
surface_countintegerno(default: 2)
cursor_countintegerno(default: 10)
include_raw_oscbooleanno(default: true)
activebooleanno(default: false)

create_multitouch_panel_bus mutates

Create a Windows Multi Touch In DAT scaffold with panel maps, touch-slot maps, and platform notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Multi Touch panel scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: multitouch_panel_bus)
panel_countintegerno(default: 4)
max_touchesintegerno(default: 10)
mouse_as_touchbooleanno(default: false)
activebooleanno(default: false)

create_ltc_timecode_bridge mutates

Create an LTC receive/generate scaffold with LTC In/Out CHOP placeholders, cue maps, and routing notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the LTC timecode scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ltc_timecode_bridge)
modereceive | generate | receive_and_generateno(default: receive)
frame_rate24 | 25 | 30 | 50 | 60 | 23.976 | …no(default: 30)
input_deviceintegerno(default: 0)
output_deviceintegerno(default: 0)
cue_countintegerno(default: 8)
activebooleanno(default: false)

create_optitrack_tracking_bus mutates

Create an OptiTrack/NatNet tracking scaffold with receiver, rigid-body maps, marker maps, and calibration notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the OptiTrack scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: optitrack_tracking_bus)
server_addressstringno(default: 127.0.0.1)
command_portintegerno(default: 1510)
data_portintegerno(default: 1511)
rigid_body_countintegerno(default: 4)
marker_countintegerno(default: 16)
activebooleanno(default: false)

connect_video_stream_receiver mutates

Create a Video Stream In TOP scaffold for RTSP, HLS, SRT, or WebRTC ingest with stream maps and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Video Stream In scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: video_stream_receiver)
urlstringno(default: rtsp://127.0.0.1:8554/live)
modertsp | hls | srt | webrtcno(default: rtsp)
latency_msintegerno(default: 250)
activebooleanno(default: false)

connect_websocket_control_bus mutates

Create a WebSocket DAT scaffold with command maps, message schema hints, status, and safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the WebSocket control scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: websocket_control_bus)
net_addressstringno(default: 127.0.0.1)
portintegerno(default: 8080)
pathstringno(default: /)
tlsbooleanno(default: false)
command_countintegerno(default: 8)
activebooleanno(default: false)

connect_serial_device_bus mutates

Create a Serial DAT/CHOP scaffold for microcontrollers, sensors, and show-control devices with parse maps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the serial device scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: serial_device_bus)
devicestringno(default: COM1)
baud_rateintegerno(default: 115200)
message_countintegerno(default: 6)
include_chopbooleanno(default: true)
activebooleanno(default: false)

connect_udp_telemetry_bridge mutates

Create a UDP In/Out DAT scaffold for telemetry packets, replies, status maps, and diagnostics.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the UDP telemetry scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: udp_telemetry_bridge)
listen_portintegerno(default: 9000)
remote_addressstringno(default: 127.0.0.1)
remote_portintegerno(default: 9001)
packet_countintegerno(default: 8)
activebooleanno(default: false)

create_artnet_discovery_panel mutates

Create an Art-Net DAT discovery scaffold with optional DMX In monitor, device maps, and universe maps.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Art-Net discovery scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: artnet_discovery_panel)
netintegerno(default: 0)
subnetintegerno(default: 0)
universe_countintegerno(default: 4)
device_countintegerno(default: 8)
include_dmx_monitorbooleanno(default: true)
activebooleanno(default: false)

create_mpcdi_projection_mapper mutates

Create an MPCDI projection-calibration scaffold with MPCDI TOP/DAT, projector maps, region maps, and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the MPCDI projection mapper scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: mpcdi_projection_mapper)
config_filestringnoPath to the MPCDI calibration/config file. (default: ``)
projector_countintegerno(default: 2)
region_countintegerno(default: 4)
activebooleanno(default: false)

create_vioso_warp_panel mutates

Create a VIOSO projection-warp scaffold with VIOSO TOP, blend-zone maps, projector metadata, and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the VIOSO warp scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: vioso_warp_panel)
config_filestringnoPath to the VIOSO calibration/config file. (default: ``)
projector_indexintegerno(default: 0)
blend_zone_countintegerno(default: 4)
activebooleanno(default: false)

create_direct_display_output mutates

Create a Direct Display Out TOP scaffold with monitor inventory, display maps, and inactive-by-default safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Direct Display output scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: direct_display_output)
display_indexintegerno(default: 0)
output_countintegerno(default: 1)
resolution_widthintegerno(default: 1920)
resolution_heightintegerno(default: 1080)
activebooleanno(default: false)

create_scalable_display_bus mutates

Create a Scalable Display TOP scaffold with display tile maps, status, and calibration setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Scalable Display scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: scalable_display_bus)
config_filestringnoPath to the Scalable Display configuration file. (default: ``)
display_countintegerno(default: 2)
canvas_widthintegerno(default: 3840)
canvas_heightintegerno(default: 1080)
activebooleanno(default: false)

create_window_output_matrix mutates

Create a Window COMP output matrix scaffold with window maps, source maps, status, and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Window output matrix scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: window_output_matrix)
window_countintegerno(default: 2)
resolution_widthintegerno(default: 1920)
resolution_heightintegerno(default: 1080)
perform_modebooleanno(default: false)
activebooleanno(default: false)

create_monitor_layout_panel mutates

Create a Monitors DAT inventory scaffold with monitor maps, GPU maps, preflight checks, and setup notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the monitor layout scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: monitor_layout_panel)
monitor_countintegerno(default: 2)
gpu_countintegerno(default: 1)
include_direct_display_hintbooleanno(default: true)

create_realsense_depth_bus mutates

Create an Intel RealSense depth-camera scaffold with RealSense TOP, NDI, WebSocket adapter, or sample-source modes plus depth/color/point-cloud routing notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the RealSense depth scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: realsense_depth_bus)
source_moderealsense_top | ndi_depth | websocket_json | sampleno(default: realsense_top)
serial_numberstringnoOptional RealSense camera serial number. (default: ``)
ndi_sourcestringnoNDI source name for depth input. (default: RealSense Depth)
server_urlstringnoAdapter WebSocket URL. (default: ws://127.0.0.1:9015)
resolution640x480 | 848x480 | 1280x720no(default: 848x480)
include_colorbooleanno(default: true)
include_pointcloudbooleanno(default: true)
activebooleanno(default: false)

create_livox_lidar_bus mutates

Create a Livox LiDAR adapter scaffold with UDP/WebSocket/file-replay ingest, point-stream schema, zone maps, and calibration notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Livox scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: livox_lidar_bus)
adapter_modeudp_json | websocket_json | file_replayno(default: udp_json)
device_addressstringnoLivox device or adapter host. (default: 192.168.1.50)
receive_portintegerno(default: 56000)
server_urlstringno(default: ws://127.0.0.1:56000)
point_rate_hintintegerno(default: 240000)
zone_countintegerno(default: 8)
activebooleanno(default: false)

connect_xsens_mvn_mocap mutates

Create an Xsens MVN mocap scaffold with OSC/UDP/TCP ingest, actor/segment mapping, normalized skeleton tables, and coordinate-space notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Xsens scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: xsens_mvn_mocap)
source_modemvn_osc | mvn_udp_json | mvn_tcp_json | sampleno(default: mvn_osc)
receive_portintegerno(default: 9763)
server_hoststringno(default: 127.0.0.1)
actor_countintegerno(default: 1)
segment_countintegerno(default: 23)
coordinate_spacemvn_y_up | z_up | touchdesignerno(default: mvn_y_up)
activebooleanno(default: false)

connect_houdini_engine_bridge mutates

Create a Houdini Engine/HDA/cache handoff scaffold with HDA manifests, parameter maps, cook-status ingest, and geometry cache notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Houdini bridge. (default: /project1)
namestringnoGenerated baseCOMP name. (default: houdini_engine_bridge)
handoff_modefile_watch | hda_parameters | websocket_json | udp_cook_statusno(default: file_watch)
hda_filestringno(default: ./houdini/show_asset.hda)
cache_folderstringno(default: ./houdini/cache)
server_urlstringno(default: ws://127.0.0.1:9876)
receive_portintegerno(default: 9876)
asset_formatbgeo | usd | alembic | objno(default: bgeo)
parameter_countintegerno(default: 12)
activebooleanno(default: false)

connect_omniverse_usd_bridge mutates

Create an NVIDIA Omniverse/USD stage sync scaffold with Nucleus/stage metadata, layer maps, variant maps, and live-session notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the USD bridge. (default: /project1)
namestringnoGenerated baseCOMP name. (default: omniverse_usd_bridge)
nucleus_urlstringno(default: omniverse://localhost/Projects/show)
stage_pathstringno(default: ./usd/show_stage.usd)
sync_modeusd_file_watch | nucleus_live | websocket_json | manual_exportno(default: usd_file_watch)
server_urlstringno(default: ws://127.0.0.1:8899)
layer_countintegerno(default: 4)
variant_countintegerno(default: 3)
activebooleanno(default: false)

connect_opcua_industrial_bus mutates

Create an OPC UA industrial telemetry scaffold with node maps, adapter ingest options, status tables, and read-only safety-policy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the OPC UA scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: opcua_industrial_bus)
endpoint_urlstringno(default: opc.tcp://127.0.0.1:4840)
adapter_http_urlstringno(default: http://127.0.0.1:9084/opcua)
adapter_ws_urlstringno(default: ws://127.0.0.1:9084/opcua)
adapter_udp_portintegerno(default: 9084)
namespace_indexintegerno(default: 2)
node_countintegerno(default: 12)
poll_msintegerno(default: 250)
adapter_modewebclient_json | websocket_json | udp_json | manualno(default: manual)
security_policynone | basic256sha256 | external_adapterno(default: external_adapter)
activebooleanno(default: false)

connect_replicate_prediction_bridge mutates

Create a Replicate-style prediction handoff scaffold with request templates, polling/webhook maps, output contracts, and credential-safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Replicate scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: replicate_prediction_bridge)
endpoint_urlstringnoPrediction endpoint or local adapter URL. (default: https://api.replicate.com/v1/predictions)
model_refstringnoModel/version reference hint. (default: owner/model:version)
request_modewebclient_json | webhook_adapter | manualno(default: webclient_json)
webhook_urlstringnoOptional webhook callback URL or adapter route. (default: ``)
poll_secondsnumberno(default: 2)
output_modeimage | video | jsonno(default: image)
activebooleanno(default: false)

connect_a1111_webui_bridge mutates

Create an AUTOMATIC1111/Forge Stable Diffusion WebUI handoff scaffold with prompt slots, result maps, ControlNet hints, and adapter notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the WebUI scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: a1111_webui_bridge)
server_urlstringnoWebUI or adapter base URL. (default: http://127.0.0.1:7860)
endpoint_kindtxt2img | img2img | extras | controlnetno(default: txt2img)
output_folderstringno(default: ./generated/a1111)
prompt_slot_countintegerno(default: 6)
include_controlnetbooleanno(default: false)
activebooleanno(default: false)

connect_huggingface_inference_bridge mutates

Create a Hugging Face Inference Endpoint scaffold with task input maps, output contracts, token-env hints, and adapter notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Hugging Face scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: huggingface_inference_bridge)
endpoint_urlstringno(default: https://api-inference.huggingface.co/models/model-id)
tasktext_to_image | image_to_image | audio_to_text | text_generation | embeddingsno(default: text_to_image)
token_env_namestringno(default: HF_TOKEN)
input_slot_countintegerno(default: 4)
output_modeimage | audio | text | jsonno(default: image)
activebooleanno(default: false)

connect_whisper_transcription_bus mutates

Create a Whisper-compatible transcription scaffold with audio/file/chunk ingest, segment maps, status tables, and privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Whisper scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: whisper_transcription_bus)
source_modeaudio_file | audio_device | websocket_chunks | manual_dropno(default: audio_file)
audio_filestringno(default: ``)
server_urlstringno(default: ws://127.0.0.1:9030)
language_hintstringno(default: auto)
segment_countintegerno(default: 12)
activebooleanno(default: false)

connect_rvc_voice_conversion_bus mutates

Create an RVC-style voice conversion scaffold with source audio, model maps, output contracts, latency notes, and consent warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the RVC scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: rvc_voice_conversion_bus)
source_modeaudio_file | audio_device | websocket_chunks | manualno(default: audio_file)
audio_filestringno(default: ``)
model_pathstringno(default: ./models/rvc/voice.pth)
index_pathstringno(default: ./models/rvc/voice.index)
server_urlstringno(default: ws://127.0.0.1:9040)
request_urlstringno(default: http://127.0.0.1:9040/convert)
speaker_countintegerno(default: 4)
transpose_semitonesnumberno(default: 0)
activebooleanno(default: false)

connect_runway_video_bridge mutates

Create a Runway-style video generation handoff scaffold with prompt maps, input/result contracts, polling status, and adapter notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Runway scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: runway_video_bridge)
endpoint_urlstringno(default: https://api.runway.example/v1/jobs)
project_idstringno(default: show_project)
generation_modetext_to_video | image_to_video | video_to_video | manual_exportno(default: text_to_video)
input_clip_pathstringno(default: ``)
output_folderstringno(default: ./generated/runway)
prompt_countintegerno(default: 4)
activebooleanno(default: false)

connect_kafka_event_bus mutates

Create a Kafka/Redpanda event-bus scaffold with adapter ingest, topic maps, schema hints, consumer group metadata, and policy-gated producer notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Kafka scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: kafka_event_bus)
brokerstringnoKafka/Redpanda broker hint. (default: 127.0.0.1:9092)
adapter_modewebsocket_json | udp_json | manualno(default: websocket_json)
server_urlstringnoExternal adapter URL. (default: ws://127.0.0.1:9050)
topic_rootstringnoTopic prefix for show events. (default: tdmcp.show)
topic_countintegerno(default: 8)
consumer_groupstringno(default: tdmcp-touchdesigner)
schema_formatjson | avro | protobufno(default: json)
activebooleanno(default: false)

connect_redis_pubsub_bus mutates

Create a Redis Pub/Sub/Streams scaffold with adapter ingest, channel maps, keyspace safety notes, and read-first operations policy.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Redis scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: redis_pubsub_bus)
redis_hoststringno(default: 127.0.0.1)
redis_portintegerno(default: 6379)
adapter_modewebsocket_json | udp_json | manualno(default: websocket_json)
server_urlstringno(default: ws://127.0.0.1:9051)
adapter_portintegerno(default: 9051)
channel_rootstringno(default: tdmcp:show)
channel_countintegerno(default: 8)
database_indexintegerno(default: 0)
stream_modepubsub | streams | bothno(default: pubsub)
activebooleanno(default: false)

connect_influxdb_timeseries_bridge mutates

Create an InfluxDB telemetry scaffold with measurement maps, field maps, query/write adapter notes, and token-safety warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the InfluxDB scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: influxdb_timeseries_bridge)
endpoint_urlstringno(default: http://127.0.0.1:8086)
bucketstringno(default: show)
orgstringno(default: tdmcp)
adapter_modewebclient_json | websocket_json | manualno(default: webclient_json)
measurement_countintegerno(default: 6)
field_countintegerno(default: 8)
poll_secondsnumberno(default: 5)
activebooleanno(default: false)

connect_prometheus_metrics_panel mutates

Create a Prometheus metrics scaffold with PromQL/client adapter notes, metric maps, alert routes, and operator-dashboard safety guidance.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Prometheus scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: prometheus_metrics_panel)
endpoint_urlstringno(default: http://127.0.0.1:9090)
job_namestringno(default: tdmcp-show)
adapter_modewebclient_promql | websocket_json | manualno(default: webclient_promql)
metric_countintegerno(default: 12)
alert_countintegerno(default: 4)
scrape_interval_secondsnumberno(default: 15)
activebooleanno(default: false)

connect_grafana_annotation_bridge mutates

Create a Grafana annotation/event-marker scaffold with dashboard, panel, tag, and annotation maps plus token-safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Grafana scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: grafana_annotation_bridge)
base_urlstringno(default: http://127.0.0.1:3000)
dashboard_uidstringno(default: show-dashboard)
adapter_modewebclient_json | websocket_json | manualno(default: webclient_json)
panel_countintegerno(default: 6)
tag_countintegerno(default: 4)
activebooleanno(default: false)

connect_homeassistant_state_bus mutates

Create a Home Assistant state/service scaffold with REST/WebSocket adapter nodes, entity maps, service maps, and physical-action safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Home Assistant scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: homeassistant_state_bus)
base_urlstringno(default: http://homeassistant.local:8123)
adapter_moderest_json | websocket_json | manualno(default: websocket_json)
entity_domainsensor | light | switch | media_player | climateno(default: sensor)
entity_countintegerno(default: 12)
service_countintegerno(default: 4)
area_countintegerno(default: 3)
activebooleanno(default: false)

connect_google_sheets_cue_table mutates

Create a Google Sheets cue-table scaffold with source adapter, cue rows, column validation, sync policy, and OAuth/writeback safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Google Sheets cue-table scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: google_sheets_cue_table)
sheet_urlstringno(default: https://docs.google.com/spreadsheets/d/show-cues)
worksheet_namestringno(default: cues)
adapter_modecsv_export | webhook_json | manualno(default: csv_export)
adapter_urlstringno(default: ws://127.0.0.1:9060)
cue_countintegerno(default: 16)
column_countintegerno(default: 8)
sync_directionread_only | read_write_requestsno(default: read_only)
activebooleanno(default: false)

connect_airtable_content_bus mutates

Create an Airtable content scaffold with record maps, field maps, sync policy, adapter source, and token/rate-limit safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Airtable content-bus scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: airtable_content_bus)
base_idstringno(default: app_show_base)
table_namestringno(default: Show Content)
view_namestringno(default: Approved)
adapter_moderest_json | webhook_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9061/airtable)
record_countintegerno(default: 24)
field_countintegerno(default: 8)
sync_directionread_only | approved_updatesno(default: read_only)
activebooleanno(default: false)

connect_notion_show_rundown mutates

Create a Notion show-rundown scaffold with scene maps, property maps, approval policy, adapter source, and token-safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Notion rundown scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: notion_show_rundown)
database_idstringno(default: notion_show_database)
rundown_labelstringno(default: main_show)
adapter_moderest_json | webhook_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9062/notion)
scene_countintegerno(default: 12)
property_countintegerno(default: 8)
approval_requiredbooleanno(default: true)
activebooleanno(default: false)

connect_figma_design_tokens mutates

Create a Figma design-token scaffold with token rows, component-review rows, style preview metadata, adapter source, and access-token safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Figma token scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: figma_design_tokens)
file_keystringno(default: figma_file_key)
team_labelstringno(default: design_team)
adapter_moderest_json | webhook_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9063/figma)
token_formatstyle_dictionary | css_variables | json_tokensno(default: style_dictionary)
token_countintegerno(default: 32)
component_countintegerno(default: 8)
activebooleanno(default: false)

connect_slack_ops_bridge mutates

Create a Slack operator-alert scaffold with webhook/socket adapter, alert rows, approval-gated command rows, and token/signing safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Slack ops scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: slack_ops_bridge)
workspace_labelstringno(default: venue_workspace)
channel_namestringno(default: #show-ops)
adapter_modeincoming_webhook | socket_mode | manualno(default: incoming_webhook)
adapter_urlstringno(default: http://127.0.0.1:9064/slack)
socket_urlstringno(default: ws://127.0.0.1:9064/slack)
alert_countintegerno(default: 8)
command_countintegerno(default: 4)
approval_requiredbooleanno(default: true)
activebooleanno(default: false)

connect_s3_media_bucket mutates

Create an S3-compatible media-bucket scaffold with manifest rows, cache policy, ingest status, adapter source, and credential/signing safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the S3 media bucket scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: s3_media_bucket)
provideraws_s3 | minio | gcs | azure_blobno(default: aws_s3)
bucketstringno(default: show-media)
prefixstringno(default: approved/)
adapter_modemanifest_json | websocket_json | manualno(default: manifest_json)
manifest_urlstringno(default: http://127.0.0.1:9065/media-manifest.json)
asset_countintegerno(default: 32)
cache_policymanual | on_start | periodicno(default: manual)
activebooleanno(default: false)

connect_calendar_schedule_bus mutates

Create a venue calendar scaffold with event rows, reminder maps, blackout windows, adapter source, and credential/privacy safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the calendar scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: calendar_schedule_bus)
providerics | google_calendar | outlook | caldavno(default: ics)
calendar_refstringno(default: venue-show-calendar)
timezonestringno(default: UTC)
adapter_modeics_feed | webhook_json | manualno(default: ics_feed)
adapter_urlstringno(default: http://127.0.0.1:9066/calendar.ics)
event_countintegerno(default: 16)
reminder_countintegerno(default: 4)
activebooleanno(default: false)

connect_ticketing_checkin_bus mutates

Create a ticketing/check-in scaffold with aggregate gate counts, ticket-tier maps, gate status, adapter source, and PII/token safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the ticketing scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ticketing_checkin_bus)
providereventbrite | dice | shotgun | customno(default: eventbrite)
event_idstringno(default: venue_event)
venue_zonestringno(default: front_gate)
adapter_moderest_json | websocket_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9067/ticketing)
expected_capacityintegerno(default: 1200)
ticket_tier_countintegerno(default: 4)
gate_countintegerno(default: 3)
activebooleanno(default: false)

connect_pos_sales_telemetry mutates

Create a POS aggregate-telemetry scaffold with sales metrics, revenue buckets, privacy policy, adapter source, and PCI/PII safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the POS scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: pos_sales_telemetry)
providersquare | stripe_terminal | toast | customno(default: square)
store_labelstringno(default: venue_bar)
adapter_moderest_json | webhook_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9068/pos)
aggregation_window1m | 5m | 15m | 1hno(default: 5m)
metric_countintegerno(default: 8)
revenue_bucket_countintegerno(default: 6)
activebooleanno(default: false)

connect_weather_forecast_bus mutates

Create a weather forecast/station scaffold with forecast rows, sensor maps, alert maps, adapter source, and safety-policy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the weather scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: weather_forecast_bus)
provideropenweather | weatherkit | nws | custom_stationno(default: openweather)
location_labelstringno(default: venue)
adapter_moderest_json | websocket_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9069/weather)
forecast_hour_countintegerno(default: 24)
sensor_countintegerno(default: 4)
alert_countintegerno(default: 3)
activebooleanno(default: false)

connect_gtfs_transit_feed mutates

Create a GTFS static/realtime transit scaffold with route maps, stop maps, arrival predictions, adapter source, and public-data notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the GTFS scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: gtfs_transit_feed)
agency_labelstringno(default: local_transit)
feed_modegtfs_realtime | static_gtfs_snapshot | manualno(default: gtfs_realtime)
adapter_urlstringno(default: http://127.0.0.1:9070/gtfs)
route_countintegerno(default: 8)
stop_countintegerno(default: 12)
prediction_countintegerno(default: 16)
activebooleanno(default: false)

connect_parking_occupancy_bus mutates

Create a parking/queue occupancy scaffold with zone occupancy, sensor maps, signage policy, adapter source, and privacy safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the parking scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: parking_occupancy_bus)
providercamera_analytics | iot_counter | api_vendor | manualno(default: iot_counter)
lot_labelstringno(default: main_lot)
adapter_moderest_json | websocket_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9071/parking)
zone_countintegerno(default: 6)
capacityintegerno(default: 500)
sensor_countintegerno(default: 12)
activebooleanno(default: false)

connect_map_tile_overlay mutates

Create a map-tile overlay scaffold with tile layer maps, viewport metadata, attribution rows, adapter source, and token/cache safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the map scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: map_tile_overlay)
providermapbox | maptiler | openstreetmap | custom_tilesno(default: openstreetmap)
style_idstringno(default: standard)
tile_url_templatestringno(default: https://tile.openstreetmap.org/{z}/{x}/{y}.png)
center_latnumberno(default: 0)
center_lngnumberno(default: 0)
zoom_levelintegerno(default: 12)
layer_countintegerno(default: 4)
attribution_requiredbooleanno(default: true)
activebooleanno(default: false)

connect_geojson_feature_bus mutates

Create a GeoJSON feature scaffold with feature rows, property maps, style rules, adapter source, and projection/privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the GeoJSON scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: geojson_feature_bus)
source_labelstringno(default: geojson_source)
adapter_modefile_watch | webclient_json | manualno(default: webclient_json)
adapter_urlstringno(default: http://127.0.0.1:9072/features.geojson)
geometry_modepoints | lines | polygons | mixedno(default: mixed)
feature_countintegerno(default: 64)
property_countintegerno(default: 8)
style_rule_countintegerno(default: 6)
activebooleanno(default: false)

connect_gps_fleet_tracker mutates

Create a GPS/fleet tracking scaffold with sanitized asset rows, geofence maps, privacy policy, adapter source, and credential/privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the GPS scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: gps_fleet_tracker)
providertraccar | owntracks | mqtt_gps | customno(default: traccar)
fleet_labelstringno(default: venue_fleet)
adapter_modewebsocket_json | mqtt_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9073/gps)
tracked_asset_countintegerno(default: 12)
geofence_countintegerno(default: 4)
update_rate_hznumberno(default: 1)
activebooleanno(default: false)

connect_adsb_aircraft_bus mutates

Create an ADS-B aircraft scaffold with sanitized aircraft rows, altitude bands, track history metadata, adapter source, and feed/privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the ADS-B scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: adsb_aircraft_bus)
providerdump1090 | tar1090 | opensky_adapter | customno(default: dump1090)
airspace_labelstringno(default: venue_airspace)
adapter_moderest_json | websocket_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9074/aircraft)
aircraft_countintegerno(default: 32)
altitude_band_countintegerno(default: 6)
track_history_countintegerno(default: 24)
activebooleanno(default: false)

connect_ais_vessel_bus mutates

Create an AIS vessel scaffold with sanitized vessel rows, zone maps, route hints, adapter source, and receiver/privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the AIS scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ais_vessel_bus)
providerais_receiver | marine_traffic_adapter | aishub_adapter | customno(default: ais_receiver)
waterway_labelstringno(default: harbor)
adapter_moderest_json | websocket_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9075/ais)
vessel_countintegerno(default: 24)
zone_countintegerno(default: 4)
route_countintegerno(default: 6)
activebooleanno(default: false)

connect_public_alerts_bus mutates

Create a public-alert scaffold with advisory alert rows, severity maps, routing policy, adapter source, and safety/escalation notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the alert scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: public_alerts_bus)
providercap_feed | nws_alerts | municipal_rss | customno(default: cap_feed)
region_labelstringno(default: venue_region)
adapter_moderest_json | websocket_json | manualno(default: rest_json)
adapter_urlstringno(default: http://127.0.0.1:9076/alerts)
alert_countintegerno(default: 8)
severity_countintegerno(default: 4)
route_countintegerno(default: 3)
activebooleanno(default: false)

connect_twitch_eventsub_bus mutates

Create a Twitch EventSub/chat scaffold with sanitized event rows, reward maps, moderation policy, adapter source, and OAuth/webhook safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Twitch scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: twitch_eventsub_bus)
channel_loginstringno(default: show_channel)
adapter_modewebhook_json | websocket_json | manualno(default: websocket_json)
netaddressstringno(default: 127.0.0.1)
portintegerno(default: 9077)
webhook_urlstringno(default: http://127.0.0.1:9077/twitch)
event_countintegerno(default: 12)
reward_countintegerno(default: 4)
moderation_leveldisplay_only | filtered | approval_requiredno(default: filtered)
activebooleanno(default: false)

connect_youtube_live_chat_bus mutates

Create a YouTube Live Chat scaffold with sanitized message rows, Super Chat tiers, moderation policy, adapter source, and API/quota safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the YouTube scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: youtube_live_chat_bus)
channel_idstringno(default: youtube_channel)
live_chat_idstringno(default: live_chat)
adapter_modepolling_json | websocket_json | manualno(default: polling_json)
adapter_urlstringno(default: http://127.0.0.1:9078/youtube-chat)
message_countintegerno(default: 24)
super_chat_tier_countintegerno(default: 5)
moderation_leveldisplay_only | filtered | approval_requiredno(default: filtered)
activebooleanno(default: false)

connect_discord_interaction_bus mutates

Create a Discord interaction scaffold with command rows, message rows, approval policy, adapter source, and bot-token/signature safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Discord scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: discord_interaction_bus)
guild_labelstringno(default: show_guild)
channel_labelstringno(default: stage-chat)
adapter_modegateway_json | webhook_json | manualno(default: gateway_json)
adapter_urlstringno(default: ws://127.0.0.1:9079/discord)
command_countintegerno(default: 6)
message_countintegerno(default: 16)
approval_requiredbooleanno(default: true)
activebooleanno(default: false)

connect_tiktok_live_events_bus mutates

Create a TikTok Live-style event scaffold with sanitized event rows, gift tiers, moderation policy, adapter source, and auth/client safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the TikTok scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: tiktok_live_events_bus)
creator_labelstringno(default: show_creator)
adapter_modewebsocket_json | polling_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9080/tiktok-live)
event_countintegerno(default: 16)
gift_tier_countintegerno(default: 6)
moderation_leveldisplay_only | filtered | approval_requiredno(default: filtered)
activebooleanno(default: false)

connect_matrix_room_bus mutates

Create a Matrix room scaffold with sanitized room events, reaction maps, approval policy, adapter source, and token/encryption safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Matrix scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: matrix_room_bus)
homeserver_labelstringno(default: matrix)
room_aliasstringno(default: #show:example.org)
adapter_modesync_json | websocket_json | manualno(default: sync_json)
adapter_urlstringno(default: http://127.0.0.1:9081/matrix)
room_event_countintegerno(default: 16)
reaction_countintegerno(default: 6)
approval_requiredbooleanno(default: true)
activebooleanno(default: false)

connect_rss_feed_bus mutates

Create an RSS/Atom/editorial feed scaffold with sanitized item rows, category maps, refresh policy, adapter source, and copyright/sanitization notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the RSS scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: rss_feed_bus)
feed_labelstringno(default: editorial_feed)
adapter_moderss_atom | webhook_json | manualno(default: rss_atom)
adapter_urlstringno(default: http://127.0.0.1:9082/feed.xml)
item_countintegerno(default: 24)
category_countintegerno(default: 6)
refresh_interval_secintegerno(default: 300)
activebooleanno(default: false)

connect_rfid_badge_bus mutates

Create an RFID badge-reader scaffold with sanitized badge events, reader maps, privacy policy, adapter source, and access-control safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the RFID scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: rfid_badge_bus)
venue_labelstringno(default: installation)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9083/rfid)
reader_countintegerno(default: 4)
badge_event_countintegerno(default: 24)
privacy_levelaggregate_only | pseudonymous | approval_requiredno(default: pseudonymous)
activebooleanno(default: false)

connect_nfc_tap_bus mutates

Create an NFC tap scaffold with sanitized tap events, station maps, consent policy, adapter source, and tag-privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the NFC scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: nfc_tap_bus)
installation_labelstringno(default: interactive_installation)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9084/nfc)
station_countintegerno(default: 6)
tap_event_countintegerno(default: 24)
consent_modeopt_in_required | pseudonymous | aggregate_onlyno(default: opt_in_required)
activebooleanno(default: false)

connect_ble_beacon_bus mutates

Create a BLE beacon proximity scaffold with sanitized beacon rows, zone maps, smoothing policy, adapter source, and device-privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the BLE scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: ble_beacon_bus)
site_labelstringno(default: gallery_floor)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9085/ble)
scanner_countintegerno(default: 4)
beacon_countintegerno(default: 16)
zone_countintegerno(default: 6)
smoothing_window_secintegerno(default: 15)
activebooleanno(default: false)

connect_uwb_anchor_bus mutates

Create a UWB RTLS scaffold with sanitized tag positions, anchor maps, spatial policy, adapter source, and tag-privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the UWB scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: uwb_anchor_bus)
space_labelstringno(default: tracked_space)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9086/uwb)
anchor_countintegerno(default: 8)
tag_countintegerno(default: 12)
zone_countintegerno(default: 4)
position_unitsmeters | centimeters | normalizedno(default: meters)
activebooleanno(default: false)

connect_qr_scan_bus mutates

Create a QR scan scaffold with sanitized scan events, route maps, sanitization policy, adapter source, and token/URL safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the QR scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: qr_scan_bus)
campaign_labelstringno(default: visitor_scan)
adapter_modewebsocket_json | http_json | manualno(default: http_json)
adapter_urlstringno(default: http://127.0.0.1:9087/qr-scans)
scan_event_countintegerno(default: 24)
route_countintegerno(default: 6)
sanitization_levelroute_only | pseudonymous | approval_requiredno(default: route_only)
activebooleanno(default: false)

connect_wifi_presence_bus mutates

Create a Wi-Fi presence scaffold with aggregate occupancy rows, dwell buckets, privacy policy, adapter source, and device-privacy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the Wi-Fi scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: wifi_presence_bus)
site_labelstringno(default: venue_floor)
adapter_modewebsocket_json | http_json | manualno(default: http_json)
adapter_urlstringno(default: http://127.0.0.1:9088/wifi-presence)
zone_countintegerno(default: 6)
dwell_bucket_countintegerno(default: 4)
aggregate_window_secintegerno(default: 60)
activebooleanno(default: false)

connect_people_counting_bus mutates

Create a people-counting scaffold with aggregate zone counts, sample windows, adapter source, and privacy policy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the people-count bus. (default: /project1)
namestringnoGenerated baseCOMP name. (default: people_counting_bus)
venue_labelstringno(default: venue)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9090/people-count)
zone_countintegerno(default: 6)
sample_countintegerno(default: 24)
privacy_levelaggregate_only | anonymous_tracks | approval_requiredno(default: aggregate_only)
activebooleanno(default: false)

connect_queue_length_bus mutates

Create a queue-length scaffold with aggregate queue metrics, sample windows, adapter source, and alert policy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the queue scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: queue_length_bus)
queue_labelstringno(default: main_queue)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9091/queue)
queue_countintegerno(default: 4)
sample_countintegerno(default: 24)
alert_threshold_peopleintegerno(default: 75)
activebooleanno(default: false)

connect_door_access_bus mutates

Create a door-access monitoring scaffold with sanitized door events, door maps, adapter source, and lock-control safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the door scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: door_access_bus)
venue_labelstringno(default: venue)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9092/door-access)
door_countintegerno(default: 8)
event_countintegerno(default: 32)
policy_modemonitor_only | approval_required | manualno(default: monitor_only)
activebooleanno(default: false)

connect_environmental_sensor_bus mutates

Create an environmental sensor scaffold with normalized readings, sensor maps, adapter source, and building-control safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for environment sensors. (default: /project1)
namestringnoGenerated baseCOMP name. (default: environmental_sensor_bus)
sensor_profileco2_temp_humidity | air_quality | mixed | manualno(default: co2_temp_humidity)
adapter_modewebsocket_json | http_json | mqtt_json | manualno(default: http_json)
adapter_urlstringno(default: http://127.0.0.1:9093/environment)
zone_countintegerno(default: 6)
sensor_countintegerno(default: 12)
activebooleanno(default: false)

connect_power_meter_bus mutates

Create a power-meter telemetry scaffold with read-only meter readings, circuit maps, adapter source, and electrical-control safety notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the power scaffold. (default: /project1)
namestringnoGenerated baseCOMP name. (default: power_meter_bus)
venue_labelstringno(default: venue)
adapter_modewebsocket_json | http_json | manualno(default: http_json)
adapter_urlstringno(default: http://127.0.0.1:9094/power)
meter_countintegerno(default: 4)
circuit_countintegerno(default: 12)
warning_kwnumberno(default: 50)
activebooleanno(default: false)

connect_noise_level_bus mutates

Create a noise-level telemetry scaffold with aggregate decibel readings, sample windows, adapter source, and PA/safety policy notes.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for noise level data. (default: /project1)
namestringnoGenerated baseCOMP name. (default: noise_level_bus)
venue_labelstringno(default: venue)
adapter_modewebsocket_json | http_json | manualno(default: websocket_json)
adapter_urlstringno(default: ws://127.0.0.1:9095/noise)
zone_countintegerno(default: 4)
sample_countintegerno(default: 32)
weightingdba | dbc | flatno(default: dba)
limit_dbnumberno(default: 95)
activebooleanno(default: false)

duplicate_network mutates

Copy a node or whole COMP (and all its contents) to a new node, placed in the source's parent or another parent_path. Returns the source path and the new copy's path. Use duplicate this way to clone a built network; use create_container instead when you just need a fresh empty COMP.

ParameterTypeRequiredDescription
source_pathstringyesPath of the node/COMP to duplicate.
namestringnoName for the copy (auto-generated if omitted).
parent_pathstringnoWhere to place the copy (defaults to the source's parent).

arrange_network mutates

Tidy an existing network: reposition a COMP's children into a readable left→right data-flow layout (sources on the left, output on the right). Use this to clean up nodes that are piled on top of each other. Set recursive to also arrange the contents of nested COMPs. Only moves node positions — it never adds, deletes, or rewires nodes. Returns the COMP path and how many nodes were repositioned.

ParameterTypeRequiredDescription
pathstringyesCOMP whose children to arrange, e.g. '/project1' or a container path.
recursivebooleannoAlso arrange the nodes inside nested COMPs (each network is tidied on its own). (default: false)
include_dockedbooleannoMove each node's docked DATs (e.g. GLSL *_pixel or callbacks DATs) with it by the same delta, like an interactive drag. Set false to reposition only the nodes themselves. (default: true)

create_panic destructive

Build a live-performance safety control — the 'oh no' button every VJ needs. Wraps a source in a small COMP with two instant kill switches: Blackout forces the output to black (a Level TOP's brightness1 driven to 0) and Freeze holds the last frame (a Cache TOP stops capturing, active → 0). With an input_path the source is pulled in by a Select TOP (so it can live in another container); without one a built-in Ramp TOP test source is used so it builds and previews standalone. Output is a Null TOP. Big Blackout / Freeze toggle buttons are exposed on the container so a performer can hit them instantly. Marked destructive because firing Blackout/Freeze disables the live output. Returns the container, the source/freeze/blackout/output node paths, and the initial toggle states.

ParameterTypeRequiredDescription
input_pathstringnoOptional absolute path of the live source TOP to protect. Pulled in via a Select TOP (TD wires can't cross containers, so it's referenced by path). If omitted, a built-in test source (Ramp TOP) is used so the panic COMP still builds and previews on its own.
blackoutbooleannoInitial Blackout state. When on, the output is forced to black (Level TOP brightness1 = 0) — the instant kill switch. (default: false)
freezebooleannoInitial Freeze state. When on, the last frame is held instead of passing the live input (Cache TOP stops capturing — active = 0). (default: false)
expose_controlsbooleannoExpose big Blackout and Freeze toggle buttons on the container so a performer can hit them instantly. (default: true)
parent_pathstringnoParent COMP the panic container is built inside (default '/project1'). (default: /project1)

create_clip_launcher mutates

Build an Ableton-style clip launcher: a grid panel (Container COMP) of clip buttons, one per named cue (from manage_cue), for fast hands-on scene switching during a live set. Open the container in Perform/Panel mode and tap a clip to fire its cue — instantly, or (with morph_time) crossfading to it over N seconds (eased, the same engine manage_cue uses). Store the cues with manage_cue / create_control_panel first.

ParameterTypeRequiredDescription
comp_pathstringnoControl COMP that holds the cues (manage_cue) and custom params. The launcher panel is built inside it and its buttons fire that COMP's cues. (default: /project1)
namestringnoName of the launcher panel container to build. (default: launcher)
cuesstring[]yesCue names (stored with manage_cue) to lay out in the grid, in order. Each becomes a clip button labelled with its cue name.
rowsintegernoGrid row count. Defaults so rows*cols covers all cues (derived from cues length).
colsintegernoGrid column count. Defaults to ceil(sqrt(cues)) when omitted (derived from cues length).
morph_timenumberno0 = each button jumps instantly to its cue; >0 = every button crossfades to its cue over this many seconds (eased morph, same engine as manage_cue). (default: 0)

clip_audio_transport mutates

Create a synchronized clip transport container: a Movie File In TOP video lane, optional Audio File In CHOP lane, Null outputs, deterministic layout, and Play/Loop/Speed controls bound across both lanes. Use it as a reusable building block before clip launchers, VJ decks, or stream/output chains.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path where the transport container is created. (default: /project1)
namestringnoName of the transport container COMP to create. (default: clip_audio_transport)
movie_filestringnoOptional movie file path for the Movie File In TOP.
audio_filestringnoOptional audio file path for the Audio File In CHOP.
include_audiobooleannoCreate an Audio File In CHOP transport lane alongside the movie lane. (default: true)
autoplaybooleannoInitial play state for movie/audio file inputs. (default: true)
loopbooleannoInitial loop state for movie/audio file inputs. (default: true)
speednumbernoInitial playback speed. Negative values reverse where the operator supports it. (default: 1)
expose_controlsbooleannoExpose Play, Loop and Speed custom parameters on the transport container. (default: true)

osc_router_matrix mutates

Create an offline-safe OSC control matrix: one Constant CHOP plus OSC Out CHOP per target, deterministic left-to-right layout, target-specific address prefixes, and a structured report of every emitted OSC address. Use it as the primitive for QLab, atemOSC/Companion, Resolume, VDMX, or any OSC-speaking show-control endpoint.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to build the router in. (default: /project1)
namestringnoName of the router container COMP. (default: osc_router_matrix)
routesobject[]yesRoutes/channels to create for every target.
targetsobject[]yesOSC destinations. Each target gets a Constant CHOP and OSC Out CHOP.

qlab_osc_bridge mutates

Create a QLab OSC control bridge using the OSC router matrix primitive. It exposes /go, /stop, /panic, /pause, /resume, /reset and optional /cue/{number}/start routes to QLab's configurable OSC receive port, without requiring QLab to be running during build.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to build the QLab OSC bridge in. (default: /project1)
namestringnoName of the bridge container COMP. (default: qlab_osc_bridge)
hoststringnoQLab machine IP or hostname. (default: 127.0.0.1)
portintegernoQLab OSC receive port. (default: 53000)
activebooleannoStart OSC sending immediately. (default: false)
cue_numbersstring[]noOptional QLab cue numbers to expose as /cue/{number}/start routes. (default: ``)

atem_switcher_control mutates

Create an OSC control preset for an ATEM switcher routed through atemOSC, Bitfocus Companion, or another OSC relay. This does not use the Blackmagic SDK directly; it builds an offline-safe TouchDesigner OSC matrix for cut/auto/FTB and program/preview input selection.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to build the ATEM control preset in. (default: /project1)
namestringnoName of the ATEM control container COMP. (default: atem_switcher_control)
hoststringnoatemOSC, Companion, or OSC relay host/IP. (default: 127.0.0.1)
portintegernoOSC receive port for atemOSC/Companion/relay. (default: 3333)
inputsintegernoSwitcher input count to expose. (default: 4)
activebooleannoStart OSC sending immediately. (default: false)

resolume_vdmx_output_chain mutates

Create an OSC control chain for driving Resolume, VDMX, or both from TouchDesigner. It builds target-specific OSC Out lanes with layer opacity, crossfader, speed, clip trigger, and blackout channels; use it beside video/NDI/Syphon output tools when an external VJ app handles playback or final compositing.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to build the Resolume/VDMX control chain in. (default: /project1)
namestringnoName of the output-control container COMP. (default: resolume_vdmx_output_chain)
targetresolume | vdmx | bothnoWhich OSC target preset(s) to create. (default: resolume)
hoststringnoDestination host for Resolume/VDMX OSC. (default: 127.0.0.1)
resolume_portintegernoResolume OSC input port. (default: 7000)
vdmx_portintegernoVDMX OSC input port. (default: 8000)
activebooleannoStart OSC sending immediately. (default: false)

obs_stream_control mutates

Create an OBS WebSocket v5 control rig in TouchDesigner: websocketDAT connection, Constant CHOP command channels for stream/record/scene actions, and a chopExecute DAT that dispatches op:6 request payloads such as StartStream, StopStream, ToggleStream, StartRecord, StopRecord, ToggleRecord, and SetCurrentProgramScene. tdmcp never accepts or stores OBS passwords; if OBS authentication is enabled, complete Identify authentication manually in the generated obs_dispatch DAT.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to build the OBS control rig in. (default: /project1)
namestringnoName of the created/reused baseCOMP. (default: obs_stream_control)
hoststringnoOBS WebSocket host/IP. (default: 127.0.0.1)
portintegernoOBS WebSocket port. (default: 4455)
use_tlsbooleannoUse wss:// instead of ws://. (default: false)
auto_connectbooleannoStart the websocketDAT active immediately. Defaults false for show safety. (default: false)
include_recordingbooleannoAlso create StartRecord, StopRecord, and ToggleRecord controls. (default: true)
scenesstring[]noOptional OBS scene names. Each creates a scene_* control that sends SetCurrentProgramScene. (default: ``)
auth_requiredbooleannoSet true only as a reminder that OBS WebSocket authentication must be completed manually; tdmcp never stores an OBS password. (default: false)

notch_touchengine_bridge mutates

Build a guarded Notch TOP or Engine COMP/TouchEngine bridge scaffold with notes, output, and optional Notch play/speed controls. This does not validate a Notch license or target runtime; live validation remains explicit.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path to build inside. (default: /project1)
namestringnoGenerated container name. (default: notch_touchengine_bridge)
modenotch_top | engine_compnoCreate a Notch TOP bridge or an Engine COMP TouchEngine bridge. (default: notch_top)
block_pathstringnoNotch .dfxdll block path for mode=notch_top.
tox_pathstringnoTouchEngine .tox path for mode=engine_comp.
widthintegernoNotch TOP or placeholder output width. Ignored by mode=engine_comp. (default: 1920)
heightintegernoNotch TOP or placeholder output height. Ignored by mode=engine_comp. (default: 1080)
activebooleannoStart the Notch TOP active. Ignored by mode=engine_comp. (default: false)
playbooleannoStart playback/cooking where supported. (default: false)
expose_controlsbooleannoExpose Play and Speed controls where possible. (default: true)

create_decks mutates

Build a DJ-style VJ mixer. Without decks[], it preserves the legacy A/B Cross TOP mixer with GainA/GainB controls. With decks[], it builds a 2-8 deck mixer: every deck pulls a source TOP (or a test source) through gain and FX-send Level TOPs, decks 3+ blend into a running Cross TOP chain, a Switch TOP provides hard transition cuts, a final Cross TOP blends program vs cut, and an additive FX-send bus returns per-deck sends into the master. Output is a Null ready for post-processing or setup_output.

ParameterTypeRequiredDescription
deck_astringnoAbsolute path of the source TOP for deck A (pulled in via a Select TOP, so it can live in another container). If omitted, a built-in test source (Noise TOP) is created so the mixer builds standalone.
deck_bstringnoAbsolute path of the source TOP for deck B (pulled in via a Select TOP). If omitted, a built-in test source (Ramp TOP) is created so the mixer builds standalone.
crossfadenumbernoMaster crossfader position: 0 = full deck A, 1 = full deck B, 0.5 = even blend. (default: 0.5)
decksobject[]noOptional N-channel deck list. When supplied, create_decks builds a 2-8 deck mixer with per-deck gain, FX sends, a running blend chain, and a hard-cut switch bus.
cut_deckintegernoZero-based deck index selected by the hard transition-cut bus in N-channel mode. (default: 0)
cut_mixnumbernoBlend between the continuous program mix and the hard transition-cut bus: 0 = program mix, 1 = cut bus. (default: 0)
expose_controlsbooleannoExpose live 'Crossfader' + per-deck 'GainA'/'GainB' knobs on the container so the mix is playable on arrival. (default: true)
parent_pathstringnoParent COMP the mixer container is built inside (default '/project1'). (default: /project1)

learn_control mutates

EXPERIMENTAL two-step 'MIDI learn'. Call once with mode:'snapshot' (controls at rest) to record every channel of an input CHOP (a midiin/oscin CHOP or a Null fed by one); then wiggle one hardware knob/fader and call again with mode:'bind' — it diffs against the snapshot, finds the channel that moved the most, and binds your target parameter to it by expression (with optional scale/offset). The snapshot is kept in the parent COMP's storage between the two calls. This is live/stateful: verify the matched channel in the report.

ParameterTypeRequiredDescription
modesnapshot | bindyessnapshot: record the current value of every channel of source_chop. bind: re-read source_chop, find the channel that moved the most since the snapshot, and bind target to it. Call snapshot first (controls at rest), wiggle one hardware control, then call bind.
source_chopstringyesAbsolute path of the input CHOP carrying the hardware controls (e.g. a midiin/oscin CHOP or a Null fed by one).
targetstringnoParameter to drive, written as 'nodePath.parName' (e.g. '/project1/sys/transform1.scale'). Required for mode:'bind'; switched to expression mode so it tracks the matched channel live.
scalenumbernoMultiply the matched channel value (mapping gain). (default: 1)
offsetnumbernoAdd to the scaled value (mapping offset). (default: 0)
min_deltanumbernomode:'bind' minimum NORMALIZED movement (default 0.05). The winning channel's delta is normalized by max(|old|, |new|, epsilon) — a unit-free relative change — so a 0–127 MIDI CC and a 0–1 OSC float compare fairly. If the top channel moved less than this, nothing is bound and you're told to wiggle the control harder. Raise it to reject controller jitter; lower it for very small/slow knobs.
parent_pathstringnoCOMP whose storage persists the snapshot between the snapshot and bind calls (defaults to /project1). (default: /project1)

scaffold_vj_deck mutates

Compose a complete, playable VJ deck UI in one call: it builds a DJ-style A/B deck mixer (create_decks) with a crossfader, adds an on-screen fader control surface (create_control_surface) with crossfade + per-deck gain faders, and creates a midiinCHOP control surface (create_external_io) whose channels are bound to the same crossfader/gain parameters for hands-on MIDI control. Pass deck_a/deck_b source TOP paths (or omit for test sources), and an optional midi_map of channel→control bindings (defaults to ch1c1→crossfader, ch1c2→gain_a, ch1c3→gain_b). This is the deck-scaffold layer on top of the create_decks primitive — it wires the existing deck, surface, and I/O tools into one UI container.

ParameterTypeRequiredDescription
namestringnoBase name for the VJ-deck container COMP. (default: vj_deck)
parent_pathstringnoCOMP the VJ deck is scaffolded inside (default '/project1'). (default: /project1)
deck_astringnoAbsolute path of the source TOP for deck A. If omitted, a built-in test source is created.
deck_bstringnoAbsolute path of the source TOP for deck B. If omitted, a built-in test source is created.
crossfadenumbernoInitial crossfader position: 0 = full deck A, 1 = full deck B. (default: 0.5)
midibooleannoCreate a midiinCHOP control surface and bind its channels to the deck controls (MIDI-mappable VJ deck). (default: true)
midi_mapobject[]noExplicit MIDI channel → control bindings. When omitted, a sensible default map (ch1c1→crossfader, ch1c2→gain_a, ch1c3→gain_b) is used.
fadersbooleannoAdd an on-screen fader control surface (crossfader + per-deck gain faders) inside the container. (default: true)

create_synesthesia_unreal_osc mutates

Build a named OSC-out preset map for driving Synesthesia or Unreal Engine from TouchDesigner. Picks a preset ('synesthesia' → prefix '/syn', port 6448; 'unreal' → prefix '/unreal', port 8000), builds a Constant CHOP with one named channel per control (channel name = '<prefix>/<control>' so an oscoutCHOP emits the exact address the target app expects), and wires it into an oscoutCHOP aimed at host:port. Override the control names, prefix, host, or port as needed. This is the preset layer on top of create_external_io osc_out — it fills in the address templates and default control set so the send 'just works' with the target app. Bind audio/analysis to the source channels (e.g. op('controls')['syn/Bass']) to make the receiving app react.

ParameterTypeRequiredDescription
namestringnoBase name for the container COMP. (default: osc_send)
parent_pathstringnoCOMP to create the OSC-out chain in (default '/project1'). (default: /project1)
presetsynesthesia | unrealnoNamed OSC-out preset — sets the address prefix, default port, and default control names for Synesthesia or Unreal Engine. (default: synesthesia)
hoststringnoDestination IP the OSC messages are sent to (the machine running Synesthesia / Unreal). (default: 127.0.0.1)
portinteger | nullnoUDP port to send OSC to. Null uses the preset's default (Synesthesia 6448, Unreal 8000). (default: null)
controlsstring[] | nullnoOverride the preset's control names. Each becomes an OSC address '/<prefix>/<name>' and a channel on the source Constant CHOP you drive/bind. (default: null)
prefixstring | nullnoOverride the preset's OSC address prefix (the part before the control name). Null uses the preset default (syn / unreal). (default: null)
activebooleannoStart sending immediately. Defaults off so you can confirm the destination host/port first. (default: false)

create_cue_sequencer mutates

Build a bar-quantized cue timeline: a Beat CHOP (on the global tempo) + a CHOP Execute DAT that, on each bar (or beat) boundary, advances through an ordered list of steps and recalls — or morphs over morph_seconds — that step's cue on a target COMP. The deterministic, musically-timed counterpart to create_autopilot (which is random/cyclic). Reuses manage_cue's stored cues and the same cue_morph engine, so store the target's cues with manage_cue first. Live Active / Step / BarsPerStep controls let you pause, jump, or retune on stage.

ParameterTypeRequiredDescription
targetstringnoCOMP whose stored cues (tdmcp_cues, from manage_cue) the sequencer recalls/morphs. Store the cues first. (default: /project1)
stepsobject[]yesThe ordered timeline: each step names a cue and how many bars/beats it holds before the next.
loopbooleannoWhen the last step finishes, wrap back to the first (true) or stop (false). (default: true)
quantizebar | beatnoUnit each step's count is measured in: 'bar' (× the project's beats-per-bar) or raw 'beat'. (default: bar)
morph_secondsnumberno0 = snap to each cue instantly on its boundary; >0 = crossfade to it over this many seconds (via the same cue_morph engine manage_cue uses). (default: 0)
namestringnoName of the engine container built inside target. (default: cue_seq)
parent_pathstringnoWhere to create the sequencer engine COMP. (default: /project1)

create_stage_dashboard mutates

Serve one unified live-performance cockpit from a Web Server DAT — a single responsive web page (phone + laptop) that combines a grid of cue-launch buttons (recall named cues from manage_cue on the target COMP), master faders bound to chosen parameters, a big PANIC button (toggles the target COMP's Blackout/Freeze safety pars, the create_panic mechanism), and a live readout strip (a beat indicator plus a VU bar reading an audio-features Null CHOP). Open the URL — no app to install — and the page POSTs every control change back to the server, which applies it. SECURITY: like the bridge and create_phone_remote, this listens on all interfaces and accepts writes with NO auth, so use it only on a trusted network. Store cues with manage_cue, expose params with create_control_panel, and run create_panic first so the Blackout/Freeze toggles exist.

ParameterTypeRequiredDescription
targetstringnoControl COMP the dashboard is built inside. It holds the cues (manage_cue) and the Blackout/Freeze toggles (create_panic); cue buttons fire that COMP's cues and the panic button toggles its safety pars. (default: /project1)
portintegernoTCP port for the dashboard web server (keep it distinct from the bridge's 9980 and phone_remote's 9981). (default: 9990)
cuesstring[]noCue names (stored with manage_cue) to expose as launch buttons, in order. Each becomes a button that instantly recalls its cue on the target COMP. Empty omits the cue grid. (default: ``)
fadersobject[]noMaster faders, each a { label, par_path } that becomes a slider writing the parameter live. Empty omits the fader bank. (default: ``)
audio_featuresstringnoOptional audio-features Null CHOP path for the readout strip's VU bar (first channel). When omitted the readout still renders (beat from the timeline, VU flat).
namestringnoName of the Web Server DAT (and its callbacks DAT) built inside the target COMP. (default: stage_dashboard)
layoutv1 | v2noDashboard layout. 'v1' is the original (cues + faders + readout + panic). 'v2' adds stereo VU, BPM, cue timeline strip, FPS/cook overlay, and a sticky confirm-PANIC bar. Default 'v1' for backward compat. (default: v1)
tempo_channelstringnov2 only. Absolute path to a CHOP whose first channel is current BPM (e.g. a detect_tempo Null CHOP). Omitted = BPM widget hidden.
cue_timesobject[]nov2 only. Cue start times (seconds from show start) from compose_cue_list, for the timeline strip's playhead. Empty = strip omitted, cue grid still shown. (default: ``)

create_palette mutates

Generate a reusable colour palette + gradient other tools can bind to. In 'harmony' mode it computes N swatches from a base hue and a colour-theory rule (complementary / analogous / triad / tetrad / monochrome); in 'from_source' mode it samples dominant colours from a source TOP. It builds a Ramp TOP gradient (key colours from a docked Table DAT) plus a Constant CHOP exposing each swatch as swatch{i}r/g/b channels — feed those into create_color_grade, generate_from_moodboard or bind_to_channel. Live BaseHue / Saturation / Value / Rule / Count controls are exposed on the parent. Builds standalone (a harmony palette needs no source).

ParameterTypeRequiredDescription
modeharmony | from_sourcenoHow swatches are derived: 'harmony' computes them from a base hue + a colour-theory rule (pure maths); 'from_source' samples dominant colours from a source TOP. (default: harmony)
base_huenumberno(harmony) Base hue on the colour wheel, 0..1 (0 = red, 0.333 = green, 0.666 = blue). (default: 0)
saturationnumberno(harmony) Base saturation 0..1 (0 = grey, 1 = vivid). (default: 0.7)
valuenumberno(harmony) Base value / brightness 0..1. (default: 0.9)
rulecomplementary | analogous | triad | tetrad | monochromeno(harmony) Colour-theory spread: complementary (base + opposite), analogous (neighbours), triad (3 evenly spaced), tetrad (4 evenly spaced), monochrome (one hue, varied brightness). (default: triad)
countintegernoNumber of swatches to produce (1..13; capped because the swatch Constant CHOP holds 40 channels = 13 RGB swatches). (default: 5)
analogous_spreadnumberno(harmony, analogous rule) Hue step between neighbours, 0..0.5 (0.083 ≈ 30°). (default: 0.083)
sourcestringno(from_source) Absolute path of a TOP to sample dominant colours from. It is down-res'd to a tiny image and its pixels are read back; if missing/unreadable the palette falls back to a neutral greyscale ramp.
parent_pathstringnoCOMP to build the Ramp TOP + swatch CHOP inside. (default: /project1)
namestringnoBase name for the created nodes. (default: palette)
expose_controlsbooleannoAdd BaseHue / Saturation / Value / Rule / Count custom parameters to parent_path. (default: true)

create_data_source mutates

Ingest live external data onto a binding-ready channel/table — the input counterpart to create_data_visualization and bind_to_channel. 'json'/'csv' poll a URL with a Web Client DAT (and cook from a static sample of fields when no url is given, so it works offline); 'osc' listens on a UDP port; 'serial' reads a device. Numeric fields become channels on an output Null CHOP (named for each key) so other tools can bind to them; the raw text is exposed on a Null DAT. Live OSC/serial values only appear when a sender/device is present.

ParameterTypeRequiredDescription
kindjson | csv | osc | serialnoWhere the data comes from: 'json' or 'csv' poll a URL with a Web Client DAT (or, with no url, cook from a static sample so it works offline), 'osc' listens for OSC messages on a UDP port, 'serial' reads a serial device. json/csv always cook; osc/serial only carry values once a sender/device is present. (default: json)
parent_pathstringnoCOMP to build the data source inside. (default: /project1)
namestringnoBase name for the created sub-network.
urlstringno(json/csv) Endpoint the Web Client DAT fetches. When omitted the network still cooks from a static sample so other tools have channels to bind to.
portintegerno(osc) UDP port to listen on. Defaults to 7000.
devicestringno(serial) Serial port, e.g. 'COM3' on Windows or '/dev/tty.usbserial' on macOS.
baudintegerno(serial) Baud rate. (default: 9600)
fieldsstring[]noNumeric keys to extract. Each becomes a channel on the output Null CHOP (named for the key) so create_data_visualization / bind_to_channel can bind to it, and a column in the offline sample table. (default: value)
poll_secondsnumberno(json/csv) How often the Web Client DAT re-fetches the URL. (default: 1)
expose_controlsbooleannoSurface live 'Active' and 'Poll' controls on the source operator. (default: true)

create_led_mapper mutates

Build a pixel-mapping chain from a source TOP to an LED fixture grid and DMX Out CHOP over Art-Net or sACN. The generated network resizes to width×height, samples one texel per fixture pixel, preserves RGB channels, and returns created node paths, channel count, warnings, and live Brightness/Universe controls on the parent COMP. It defaults to a moving Ramp test source so the chain can cook without input; real network output still requires a reachable fixture/node and should be verified before sending. Use create_dmx_fixture_pipeline for fixture patching and this tool when you specifically need image-to-pixel mapping.

ParameterTypeRequiredDescription
sourcestringnoTOP path whose image is mapped to the fixtures. If omitted, a built-in moving Ramp TOP test source is created so the chain cooks with no input.
widthintegernoPixels per row (columns). Each texel of the WxH grid drives one LED fixture. (default: 16)
heightintegernoRows of pixels. 1 = a single LED strip. (default: 1)
layouthorizontal | vertical | serpentinenoPixel wiring order along the strip/grid: horizontal (rows left-to-right), vertical (columns), or serpentine (alternate rows reversed — boustrophedon strips). (default: horizontal)
start_universeintegernoArt-Net / sACN universe of the first pixel. (default: 1)
start_channelintegernoDMX start channel (1-512) of the first pixel within the starting universe. (default: 1)
netartnet | sacnnoNetwork DMX protocol: Art-Net or sACN (streaming ACN). (default: artnet)
net_addressstringnoTarget IP address for Art-Net / sACN. Defaults to the operator's own default.
fpsnumbernoOutput frame rate (DMX Out CHOP sample rate). (default: 30)
parent_pathstringnoCOMP to build the pixel-map chain in. (default: /project1)
namestringnoBase name for the created nodes.

batch_operations mutates

Run an ordered list of create / connect / setParam operations in one call (fail-forward, per-operation warnings; not transactional). Exposes the network builder as a general primitive — distinct from set_parameters_batch, which only sets parameters. Names created earlier can be referenced by later connect/setParam operations.

ParameterTypeRequiredDescription
default_parentstringnoParent path for create operations that omit parent_path. (default: /project1)
operationsobject[]yesOrdered list of create / connect / setParam operations. Runs in order, fail-forward: a failing operation becomes a warning and the rest still run (not transactional). Names created earlier can be referenced by later connect/setParam operations.

manage_annotation mutates

Self-document a network: create a titled annotation box, set an op's comment, list the annotations/comments in a network, or list the ops a box geometrically encloses. Makes generated networks legible.

ParameterTypeRequiredDescription
actioncreate | comment | list | enclosedyes'create' a titled annotation box, 'comment' to set an op's comment, 'list' the annotations in a network, or 'enclosed' to list the ops a box geometrically encloses.
parent_pathstringno(create/list) The network (COMP) to act in. (default: /project1)
textstringno(create) The title/text shown on the box; (comment) the comment string to set.
namestringno(create) Name for the annotation COMP (defaults to 'anno').
node_pathstringno(comment) The op to comment on; (enclosed) the annotation box whose enclosed ops to list.
xnumberno(create) Node-space X position for the box's left edge.
ynumberno(create) Node-space Y position for the box's top edge.
wnumberno(create) Node-space width of the box.
hnumberno(create) Node-space height of the box.

set_perform_mode mutates

Toggle perform mode — the one switch the artist flips before going live. When enabled, tdmcp stores an advisory flag that tools can read before doing nonessential compute; the built-in guard currently suppresses auto preview captures. The flag is stored on the TD root op (op('/').store('tdmcp_perform_mode', ...)). Advisory: this does not stop the TD timeline or kill audio/video processing. Call with enabled=false after the show to resume normal operation.

ParameterTypeRequiredDescription
enabledbooleanyestrue to enter perform mode before a live show, false to leave it afterward. While perform mode is ON, tools that honor the advisory flag skip nonessential compute. The built-in guard currently suppresses auto preview captures; future tools can opt in by checking op('/').fetch('tdmcp_perform_mode', False) before doing expensive work. It does NOT stop the TD timeline or kill audio/video processing.

bind_audio_reactive mutates

Make a whole COMP react to the music in one call — the core VJ move. Point target at a COMP with numeric custom-parameter knobs and source_chop at an audio-feature CHOP (e.g. an extract_audio_features Null carrying level/bass/mid/treble), and each knob is switched to expression mode tracking an audio band. Omit mappings to auto-map knobs by name heuristic (bright/level/opacity→level, scale/size/zoom→bass, hue/color→treble, speed/rate/rot→mid; unrecognized knobs are skipped), or pass explicit param→channel bindings with per-binding scale/offset. By default appends a master 'Reactivity' float knob (0–2, default = intensity) that scales every binding so the artist can dial the whole network's reactivity from one control. Fail-forward: a missing source CHOP, an absent channel, or an already-bound parameter are warnings, not failures — only a missing/non-COMP target is fatal. This tool only WIRES an existing COMP to an existing CHOP, building no nodes: produce the feature CHOP with extract_audio_features (or create_spectrum) first, use create_audio_reactive when you want a whole new reactive network with its own visual, and bind_to_channel for finer single-parameter control.

ParameterTypeRequiredDescription
targetstringyesCOMP whose numeric custom parameters (knobs) should react to the music.
source_chopstringyesCHOP carrying audio feature channels (e.g. an extract_audio_features Null). Expected channels: level, bass, mid, treble.
intensitynumbernoMaster reactivity amount (0=off, 1=normal, 2=strong) — scales every binding. (default: 1)
mappingsobject[]noExplicit param→channel bindings. Omit to auto-map the target COMP's numeric custom parameters by name heuristics.
add_masterbooleannoAppend a 'Reactivity' master float knob (0-2, default = intensity) on the target COMP that scales every binding. (default: true)

create_replicator mutates

Wire a Replicator COMP that clones a template COMP once per row of a Table DAT — TouchDesigner's idiomatic 'N copies from data' mechanism (menus, scoreboards, per-track decks, instanced panels). Resolves or creates the template COMP (omit template_path → a minimal container with a Text) and the driving Table DAT (omit table_path → a small example table; rows sets how many demo rows), creates the replicator under parent_path, points its driving-table and master parameters at them, sets the replication method to 'by table', and optionally drops an onReplicate callback DAT stub for per-clone setup. The Replicator's parameter names vary by TD build, so each is set probe-first and the report includes which parameter took plus the live parameter list. Then it pulses a re-replicate so the clones appear. Re-replicating is destructive to previously generated clones, which the replicator deletes and re-creates on cook.

ParameterTypeRequiredDescription
parent_pathstringnoCOMP to build the replicator inside. (default: /project1)
namestringnoName for the Replicator COMP. (default: replicator1)
template_pathstringnoExisting COMP to clone per row. Omit → create a minimal template COMP (a container with a Text).
table_pathstringnoTable DAT whose rows drive the clones. Omit → create a small example Table DAT.
rowsintegernoWhen creating an example table, how many example rows (0 = a 3-row demo). (default: 0)
callback_stubbooleannoGenerate an onReplicate callback DAT stub (per-clone setup hook). (default: true)

create_data_reactive mutates

Wire arbitrary external data (weather, follower count, sensor readings, OSC values) onto a COMP's custom numeric parameters — the data counterpart to bind_audio_reactive. Point target at a COMP with numeric custom-parameter knobs, source_chop at a live-data CHOP (e.g. a create_data_source Null), and provide explicit mappings (data channel → param name) each with an input range [in_min, in_max] and output range [out_min, out_max] so the data is correctly re-mapped to the parameter's visual range. Set smooth > 0 to insert a Lag CHOP (symmetric attack+release) so noisy or jittery data does not flicker the visuals. Fail-forward: a missing source CHOP or absent channel are warnings — only a missing/non-COMP target is fatal. Build the data CHOP first with create_data_source; use bind_to_channel for finer single-parameter control.

ParameterTypeRequiredDescription
targetstringyesCOMP whose numeric custom parameters should react to the data.
source_chopstringyesCHOP carrying the live data channels (e.g. a create_data_source Null). Channels can be weather values, follower counts, sensor readings, etc.
mappingsobject[]yesExplicit data→param mappings with per-mapping range remap. Data is rarely 0–1, so set in_min/in_max to the real data range for correct visual mapping.
smoothnumbernoSymmetric smoothing in seconds (Lag CHOP) applied to all channels so noisy data does not jitter visuals. 0 = no smoothing. (default: 0)

create_beat_grid_sequencer mutates

Build a programmable step-grid sequencer driven by a Beat CHOP on the global TD tempo: a Table DAT holds the per-step pattern (values or 1/0 flags), and a CHOP Execute DAT fires on every beat boundary, reads the current step (count % steps) from the table, and dispatches — action=param sets a custom parameter to the step value; action=cue recalls the cue for active steps (cues stored with manage_cue). The deterministic, repeating-rhythm instrument between create_autopilot (random drift) and create_cue_sequencer (linear list): program a strobe on beats 1+3, a hue shift on the bar, etc. Reprogramme the grid live by editing the step_table DAT. NOTE: beat-callback timing is UNVERIFIED offline — check op().time.play if steps don't fire when the TD timeline is paused.

ParameterTypeRequiredDescription
namestringnoName for the sequencer COMP. (default: beat_grid)
parent_pathstringnoParent COMP path to create the sequencer inside. (default: /project1)
targetstringyesCOMP whose parameter or cue each active step fires on a beat boundary.
stepsintegernoNumber of steps in the grid (e.g. 16 = one bar of 16th notes at 4/4). (default: 16)
actionparam | cuenoparam: set a target custom-parameter value per active step; cue: recall a named cue per active step (cues stored with manage_cue). (default: param)
paramstringno(action=param) The custom-parameter name on the target COMP to set on each active step.
patternnumber[]noPer-step values (action=param) or 1/0 active flags (action=cue); length should match 'steps'. Omit to auto-generate an example pattern. (default: ``)
bpm_sourcestringnoPath to an existing Beat CHOP or tempo source. Omit to create a new Beat CHOP (on the global TD tempo).

rebuild_network destructive

Reconstruct a live network inside a COMP from a serialize_network spec — the REBUILD half of a git-diffable round-trip. Takes a JSON spec of nodes (name, operator type, parameters as constants/expressions/binds, inbound wires by name, optional x/y) and, in one pass, creates every node, applies its parameters and expressions, then wires inputs by resolving each from reference to the freshly created node. Fail-forward: an unknown operator type, missing parameter, or unresolved wire becomes a warning and the rest still build, so a partial reconstruction still returns useful results. Set clear_existing to delete the parent's current children first (destructive). Set auto_layout to auto-position every node by dependency (longest-path columns, left→right) from the spec's inputs graph, overriding any manual x/y. Returns the created node names, wire count, parameters set, and any warnings.

ParameterTypeRequiredDescription
parent_pathstringyesCOMP to rebuild the network inside.
specobjectyesA serialize_network spec to reconstruct.
clear_existingbooleannoDelete existing children of parent_path first (destructive). (default: false)
auto_layoutbooleannoAuto-position every node by dependency (longest-path columns, left→right) from the spec's inputs graph, overriding any per-node x/y. False (default) honors manual x/y only. (default: false)

create_envelope_follower mutates

EXPERIMENTAL — Build a reactive signal-shaping chain (attack/release envelope + threshold gate or sidechain ducking) from a CHOP channel, for 'pump the whole layer on every kick' or similar sidechain effects. Creates a container with: a Select CHOP isolating the source channel by absolute path (no cross-container wire), a Lag CHOP shaping the attack/release envelope, a Logic+Math CHOP threshold gate (gate mode: silence the output below threshold) or an inverted Math CHOP (duck mode: output dips to 0 on a hit, rises on silence — classic sidechain pumping), and a Null CHOP as the stable output handle. Optionally binds the shaped output to target parameters by expression. The gate threshold uses a Logic CHOP whose par names (convert/boundmin/boundmax) match detect_onsets — but these are UNVERIFIED across TD builds; gate reads near 0 at the 0.2 default with most sources — tune threshold live. Use bind_to_channel with attack/release for a simpler Lag-only envelope without a gate.

ParameterTypeRequiredDescription
parent_pathstringnoWhere to build the follower chain (a COMP path, e.g. '/project1'). (default: /project1)
namestringnoBase name for the container COMP that holds the chain. (default: envelope_follower)
source_chopstringyesPath of the CHOP carrying the trigger channel (e.g. '/project1/audio/features' or an onset Null).
channelstringyesChannel name to follow from source_chop (e.g. 'bass', 'kick', 'level'). The Select CHOP isolates it by name.
attacknumbernoEnvelope rise time in seconds — how quickly the output climbs after a hit (fast = punchy, e.g. 0.001–0.05). (default: 0.01)
releasenumbernoEnvelope fall time in seconds — how slowly the output decays after the signal drops (slow = smooth tail, e.g. 0.1–0.8). (default: 0.3)
thresholdnumbernoGate threshold [0–1]. Below this level the output is silenced (gate) or held at 1 (duck). Start low (0.05–0.2) and raise if false triggers occur. NOTE: gate thresholding uses a Logic CHOP whose par names may vary by TD build — EXPERIMENTAL. (default: 0.2)
modegate | ducknogate: pass the shaped envelope only while it is above threshold — silences the output when the signal is quiet. duck: sidechain/ducking — the output dips toward 0 on every hit and returns to 1 on silence (inverted gate, classic pumping compressor feel). (default: gate)
targetsstring[]noOptional list of 'nodePath.parName' targets to bind to the shaped envelope output by expression. Omit to just build the chain (the Null CHOP output can be bound later with bind_to_channel). (default: ``)

create_midi_map mutates

HARDWARE-GATED SCAFFOLD. Build a MIDI controller preset for a supported device (apc_mini / launchpad / midi_mix / nanokontrol / generic): creates a midiinCHOP + a labeled bind Table DAT, and optionally auto-binds faders/knobs to a target COMP's numeric custom parameters. Explicit bindings can override or supplement the preset. CC/note numbers are best-effort from published MIDI charts and MUST be validated with real hardware — actual assignments depend on device firmware. This tool is HELD FROM RELEASE until hardware validation is complete. For one-at-a-time MIDI learn of a single control, use learn_control instead.

ParameterTypeRequiredDescription
parent_pathstringnoCOMP to create the MIDI map inside. (default: /project1)
namestringnoName for the MIDI In CHOP node created under parent_path. (default: midi_map)
deviceapc_mini | launchpad | midi_mix | nanokontrol | genericnoController preset. Each preset embeds a best-effort CC/note map for that device (UNVERIFIED — real numbers depend on firmware; validate with hardware). 'generic' builds a bare MIDI In + a template bind table with no preset. (default: nanokontrol)
targetstringnoCOMP whose custom numeric params/cues the preset auto-binds faders/knobs onto. Faders bind to the first N float/int custom pars; pads look for matching cues. Auto-binding is best-effort and hardware-gated.
bindingsobject[]noExplicit control→param/cue overrides. Applied after the preset auto-map. Omit to rely entirely on the device preset's default map. (default: ``)

create_modulators destructive

Build a bank of N BPM-synced LFOs in one self-contained container — each an oscillator (sine/triangle/saw/square or a random sample-&-hold) with its own rate-in-beats, output range and phase offset. Every rate locks to a tempo source (a create_tempo_sync Null, or TouchDesigner's global tempo) by expression, so the whole bank speeds up/slows down with the music and stays phase-continuous across tempo changes. All outputs land on one Null CHOP (mod_out) with one named channel per modulator, ready for bind_to_channel — the 'everything breathes' lever. Note: modulators are timeline-driven, so they only move while the timeline is playing. Re-running with an existing container name rebuilds it in place (clearing that container's children), so this tool is marked destructive and hidden from the safe profile.

ParameterTypeRequiredDescription
namestringnoName of the self-contained modulator-bank container. (default: modulators)
parent_pathstringnoParent COMP the 'modulators' container is created inside. (default: /project1)
modulatorsobject[]yesThe modulators (LFOs) to build. Each becomes one named output channel on the bank's Null.
tempo_sourcestringnoPath to an existing tempo Null/Beat CHOP carrying a 'bpm' channel (e.g. the Null from create_tempo_sync, '/project1/tempo_sync/tempo'). Omit to create a fresh Beat CHOP locked to TouchDesigner's global tempo inside the bank.
bpm_channelstringnoName of the BPM channel on the tempo source to lock rates to. (default: bpm)
expose_controlsbooleannoExpose a live custom-parameter page on the bank: a master Rate multiplier and a master Depth (amplitude) scale, so you can speed up or flatten the whole bank from one knob during a show. (default: true)

create_look_bank mutates

A playable snapshot row: store N named 'looks' (snapshots of a control COMP's numeric/toggle/menu parameters) in a visible, editable Table DAT, with one momentary recall button per slot (snap or crossfade) plus a master A↔B morph knob that blends continuously between two chosen looks. Reuses manage_cue's morph engine (so a recall behaves exactly like a cue morph, with optional beat/bar quantize) and mirrors slots into the COMP's cues so they interoperate with manage_cue / create_control_surface. Pulses and strings are always skipped at capture. Build cues/params with create_control_panel first.

ParameterTypeRequiredDescription
actionbuild | store | recall | set_ab | list | deletenobuild: create the look-bank container (Table DAT + A↔B morph knob + recall button row) on a control COMP. store: snapshot the COMP's current numeric look into a named slot. recall: jump or crossfade to a slot. set_ab: assign which two slots the A↔B knob blends, and optionally set the knob. list / delete slots. (default: build)
comp_pathstringnoControl COMP whose custom-parameter values the looks capture (a control-panel container, e.g. from create_control_panel). The look-bank widgets are built inside it; recall drives this COMP's params. (default: /project1)
namestringnoName of the look-bank panel container built inside comp_path. (default: look_bank)
slotstringnoSlot name (required for store / recall / delete).
morph_secondsnumberno(recall) 0 = snap instantly; >0 = crossfade to the slot over this many seconds (eased), via the cue morph engine. (default: 0)
quantizeoff | beat | barno(recall) Defer the snap/crossfade to the next musical boundary (project tempo), so look changes land on the downbeat. Mirrors manage_cue. (default: off)
slot_astringno(set_ab) Slot the A↔B knob reads at value 0.
slot_bstringno(set_ab) Slot the A↔B knob reads at value 1.
abnumberno(set_ab) Optionally set the A↔B knob position now (0 = slot A, 1 = slot B, 0.5 = halfway). Omit to just (re)assign the slots.
includestring[]no(store) Restrict the snapshot to these custom-parameter names. Omit to capture every numeric/toggle/menu parameter (pulses and strings are always skipped).

create_sidechain_pump mutates

EXPERIMENTAL — One-call 'pump the whole rig on the kick': build a sidechain ducking envelope from a trigger CHOP channel and bind multiple target parameters to dip on every hit. Distinct from create_envelope_follower (which builds the chain + optional gate/duck mode with a threshold); this tool is the ergonomic multi-target pump with a single depth knob and a rest_value anchor — ideal for classic pumping compressor feel across many targets at once. Builds a container with: a Select CHOP isolating the source channel by absolute path (no cross-container wires), a Lag CHOP shaping attack/release, a Limit CHOP clamping to [0,1] (type=clamp/min/max, live-validated on TD 099 — guarded with warnings), and a Null CHOP 'pump' as the stable output handle. Each target gets the expression: rest_value * (1 - depth * op('<pump>')[chan0]). Per-target failures become warnings; fatal only if source_chop or parent COMP is missing.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path where the sidechain pump container is created (e.g. '/project1'). (default: /project1)
namestringnoBase name for the container COMP that holds the pump chain. (default: sidechain_pump)
source_chopstringyesPath of the trigger CHOP (e.g. an onset Null, kick-level CHOP, or audio feature output). This is the signal that drives the pump — high = dip.
channelstringnoChannel name to follow from source_chop (e.g. 'level', 'kick', 'bass'). The Select CHOP isolates it by name. (default: level)
targetsstring[]noList of 'nodePath.parName' pairs to bind to the pump output by expression. Each target dips toward rest*(1-depth) on a hit and returns to rest_value on silence. Omit to build the chain only (bind manually with bind_to_channel later). (default: ``)
depthnumbernoHow hard the pump dips on a trigger hit [0–1]. 0 = no dip (targets stay at rest_value), 1 = full dip to zero. 0.7–0.9 is typical for a strong pumping compressor feel. (default: 0.8)
attacknumbernoEnvelope rise time in seconds — how quickly the pump signal climbs after a hit (controls how snappy the initial dip is). Typical: 0.001–0.02. (default: 0.005)
releasenumbernoEnvelope fall time in seconds — how slowly the pump returns to silence after the trigger drops. Controls the 'pumping tail'. Typical: 0.1–0.6. (default: 0.25)
rest_valuenumbernoThe target parameter value at silence (no trigger). On a hit, the expression drives the target toward rest_value*(1-depth). Default 1.0 works for opacity/gain/level parameters. (default: 1)

create_band_router mutates

Split an audio signal into EQ bands and route each band to its own target parameter(s) — the musician-friendly 'bass -> this, highs -> that' patch. Builds a container with: a Select CHOP isolating the source audio by absolute path (no cross-container wire), N audiofilterCHOP band-pass slices tiling the spectrum in log-frequency space (the same audioFilter idiom extract_audio_features uses), an Analyze CHOP per band measuring its level via rmspower, a Merge + Lag smoothing the per-band envelope (release in seconds), and a Null 'bands_out' carrying one channel per band named band0..bandN-1 (band0 = lowest). Each target route binds a band's smoothed level to a parameter by expression (op('<bands_out>')['band<i>'] * scale + offset). The bands_out Null is also directly bind_to_channel-able for routes you add later. EXTENSION sibling of extract_audio_features (that one extracts named features; this one is the band-split + multi-target router). NOTE: the analyze 'rmspower' function value and the channel-rename pars are UNVERIFIED across TD builds — they are set in guarded tries with fallbacks (abs envelope / upstream channel names), and a single audiospectrumCHOP is the fallback if audiofilterCHOP is unavailable; per-item failures surface as warnings rather than failing the build.

ParameterTypeRequiredDescription
parent_pathstringnoWhere to build the band-router container (a COMP path, e.g. '/project1'). (default: /project1)
namestringnoBase name for the container COMP that holds the EQ split + router. (default: band_router)
source_chopstringyesPath of the raw audio CHOP to split (e.g. an Audio Device In or Audio File In, '/project1/audiodevin1'). REQUIRED.
bandsintegernoNumber of EQ bands to split the signal into (e.g. 4 = sub / low / mid / high). The output Null carries one channel per band, named band0..bandN-1 (band0 = lowest). (default: 4)
targetsobject[]noOptional band->parameter routes. Each binds one band's smoothed level to a parameter by expression (op('<bands_out>')['band<i>'] * scale + offset). Omit to just build the split (bind later with bind_to_channel against the bands_out Null). (default: ``)
smoothnumbernoRelease/lag time in seconds applied to every band level — smooths the per-band envelope so reactivity follows a clean curve instead of flickering on raw audio (e.g. 0.05 punchy, 0.2 smooth). (default: 0.1)

create_xy_pad mutates

Build a draggable 2D (XY) gesture pad — a Container COMP whose pointer drag drives an x/y CHOP of normalized control channels, optionally remapped into ranges and bound by expression to target parameters (e.g. an effect's two main knobs). Add a 3rd (Z) axis via z_target to also get a slider. Open the container in Perform/Panel mode and drag inside it to scrub X/Y live. The pad reads its drag through a Panel CHOP; the u/v drag-channel names are probed at build time (they vary by TD build) and any mismatch is reported as a warning. Leave the axis targets empty to just expose the x/y channels and bind them later with bind_to_channel.

ParameterTypeRequiredDescription
parent_pathstringnoCOMP path that will hold the XY pad (e.g. '/project1'). (default: /project1)
namestringnoName of the container COMP built as the draggable pad. (default: xy_pad)
x_targetstringnoOptional 'nodePath.parName' driven by the X axis. Empty = just expose the x/y channels (bind later with bind_to_channel). (default: ``)
y_targetstringnoOptional 'nodePath.parName' driven by the Y axis. Empty = none. (default: ``)
z_targetstringnoOptional 'nodePath.parName' driven by a 3rd (Z) axis. When set, a slider is added (the pad has no native 3rd axis) and its value0 drives this target. (default: ``)
x_rangenumber[]noOutput range [low, high] for X. The pad's normalized u (0..1) is remapped into it. (default: 0,1)
y_rangenumber[]noOutput range [low, high] for Y. The pad's normalized v (0..1) is remapped into it. (default: 0,1)
z_rangenumber[]noOutput range [low, high] for the optional Z slider (0..1 remapped into it). (default: 0,1)
label_xstringnoDisplay label for the X axis (used in the summary). (default: X)
label_ystringnoDisplay label for the Y axis (used in the summary). (default: Y)
sizeintegernoPad size in pixels (square: width = height = size). (default: 400)

create_time_echo mutates

EXPERIMENTAL — Apply a per-pixel time effect to a source TOP: echo trails, slit-scan, or per-pixel time displacement (the 'time machine' melt/slice look). Builds a container COMP that selects the source by absolute path (no cross-container wire) and then, by mode: echo — a feedbackTOP (wired input + forced resolution so the loop is not black) blended over the live frame at opacity=feedback to leave fading ghost trails; slit_scan — a cacheTOP buffering frames and a time-machine TOP reading different rows from different points in time; time_displace — the same cache read back through a luminance gradient (displace_top or a built-in vertical ramp) so bright pixels show older frames. The time-machine read operator is PROBED LIVE (timeMachineTOP → cacheSelectTOP fallback) because the optype name varies by TD build; the feedback opacity par (opacity → fadeval) and cache-depth par (cachesize → maxframes) are also set defensively. Every par/connect failure is collected as a warning and the chain still returns its output Null — UNVERIFIED across TD builds; tune live. Ends with a Null TOP 'out'.

ParameterTypeRequiredDescription
parent_pathstringnoWhere to build the time-echo chain (a COMP path, e.g. '/project1'). (default: /project1)
namestringnoBase name for the container COMP that holds the chain. (default: time_echo)
source_topstringyesPath of the input TOP to apply the time effect to (e.g. '/project1/moviefilein1' or a Null TOP). REQUIRED.
modeecho | slit_scan | time_displacenoecho: recursive feedback trails — each frame leaves a fading ghost (the classic 'echo trails' / time-blur look, driven by feedback). slit_scan: buffer N frames in a cache and read different rows from different points in time (rolling 'time slice' wipe). time_displace: per-pixel time offset driven by a gradient (displace_top) — bright pixels show older frames, dark show newer (the 'time_machine' melt/warp). slit_scan and time_displace both buffer frames in a cacheTOP and read them back with a time-machine TOP. (default: echo)
framesintegernoBuffer depth / cache size in frames for slit_scan and time_displace (how far back in time pixels can be pulled). Ignored in echo mode (feedback is recursive, not frame-indexed). Larger = longer time range but more GPU memory. (default: 60)
feedbacknumbernoEcho trail strength [0–1] for echo mode — opacity of the fed-back previous frame blended over the current one. Higher = longer, more persistent trails (0.5 = balanced; 0.9+ = very smeary). Ignored in slit_scan / time_displace. (default: 0.5)
displace_topstringnotime_displace mode only: path of a TOP whose luminance maps each pixel to a time offset (a gradient/ramp/noise — bright = further back in time). Omit to use a built-in vertical ramp (rampTOP) so the effect works out of the box. Ignored in echo / slit_scan. (default: ``)
resolutionnumber[]noForced output resolution [width, height] in pixels. A fixed resolution is REQUIRED for the feedback path (echo mode) so the loop has a stable frame from cook 0 and does not stay black. (default: 1280,720)

create_capture_loop mutates

Build a bidirectional inter-app video bridge to another program (Resolume, OBS, MadMapper, a game engine…) in one container: receive an external feed IN and publish a TOP OUT at the same time. Picks the right operators per protocol — NDI (network, macOS & Windows), or Syphon (macOS) / Spout (Windows). direction 'in' only subscribes, 'out' only publishes, 'both' runs a full round-trip loop. The receive half is a receiver TOP → Null 'in_out'; the send half pulls source_top through a Select TOP into a publisher TOP. ANTI-FEEDBACK: the two halves are never wired together, so 'both' won't loop this app's own output back in. PLATFORM-GATED & largely UNVERIFIED-live: Spout needs Windows, Syphon needs macOS, and sender/receiver-name parameter names vary by TD build (probed at runtime) — the wrong platform or a real signal needs the actual sender present. This is the combined in+out version of create_live_source (in) and setup_output (out).

ParameterTypeRequiredDescription
parent_pathstringnoCOMP to build the capture-loop container in (e.g. '/project1'). (default: /project1)
namestringnoBase name for the container COMP that holds the in/out bridge. (default: capture_loop)
protocolspout | syphon | ndinoInter-app video transport. ndi works on macOS & Windows (network). spout is Windows-only; syphon is macOS-only — both use the same Syphon/Spout TOPs in TouchDesigner (PLATFORM-GATED: the wrong platform fails to create the op, reported as a warning). (default: ndi)
directionin | out | bothnoin: only receive an external feed. out: only publish a TOP. both: do both at once (a full round-trip loop to another app, e.g. send to Resolume and receive its output back). (default: both)
sender_namestringno(out) The public name THIS app publishes its feed under, so the other app can find it. Used for direction 'out'/'both'. (default: tdmcp_out)
receiver_namestringno(in) The name of the EXTERNAL sender to subscribe to. Empty = pick the first available sender on the network/machine. Used for direction 'in'/'both'. (default: ``)
source_topstringno(out) Path of the TOP to publish when direction includes 'out' (e.g. '/project1/final'). Empty together with an 'out' direction publishes nothing and is flagged as a warning. (default: ``)
resolutionnumber[]noWorking resolution [w, h] applied to the receiver TOP (Output Resolution = Custom). The publisher inherits its input TOP's resolution. (default: 1280,720)

create_auto_montage mutates

Point at a folder and build a self-running clip montage: scans the folder for clips/stills, builds one Movie File In TOP per file feeding a Switch TOP (fractional-index crossfade) → Null TOP, and adds an auto-advance brain on top — a Beat CHOP (clock='beat' or 'bar' with division) or LFO CHOP (clock='interval') drives a CHOP-Execute DAT that picks the next clip per mode (sequential / random / shuffle-no-repeat / weighted) and animates the Switch index with a crossfade. Exposes Play / Index / Next / Prev / Crossfade / Bpm / Division / Mode / Seed custom pars on the container; emits a state_out Null CHOP so bind_to_channel can read clip_index/beat. Folder is read inside TD. Missing folder → empty pointable montage instead of error.

ParameterTypeRequiredDescription
namestringnoContainer COMP name. (default: auto_montage)
parent_pathstringnoWhere to build it. (default: /project1)
folderstringyesFolder on the TD machine to scan for clips/stills.
extensionsstring[]noAllow-listed extensions (lower-case, no dot). (default: mov,mp4,png,jpg,jpeg,tif,exr)
max_clipsintegernoCap clip count. (default: 16)
resolutionobject[]noSwitch TOP output resolution [w,h]. (default: 1280,720)
modesequential | random | shuffle | weightednoSequence policy: sequential, random, shuffle (no immediate repeat), weighted (per-clip Weight par). (default: shuffle)
clockbeat | bar | intervalnoTrigger source: beat/bar (Beat CHOP) or interval (LFO CHOP). (default: bar)
bpmnumbernoTempo when clock=beat|bar. (default: 120)
divisionintegernoAdvance every N beats (beat) or N bars (bar). (default: 4)
interval_snumbernoSeconds between advances when clock=interval. (default: 4)
crossfadenumbernoCrossfade seconds (0 = hard cut). (default: 0.5)
autoplaybooleannoStart in playing state. (default: true)
seedinteger | nullnoIf set, seeds the RNG (reproducible). (default: null)

create_euclidean_sequencer mutates

Build a Euclidean rhythm sequencer: given pulses evenly distributed across steps via Bjorklund's algorithm (with optional cyclic rotation), it writes the resulting on/off pattern to a Table DAT and fires one dispatch per active step on each beat boundary. The deterministic, mathematically-grounded sibling of create_beat_grid_sequencer — program rhythms by musical intent (e.g. E(3,8) tresillo, E(5,8) cinquillo, E(4,16) four-on-the-floor) rather than by hand-editing cells. Sweep the Pulses/Rotation custom parameters live and the table re-shapes in place. action=param sets a custom parameter to on_value/off_value per step; action=cue recalls a cue per active step (cues stored with manage_cue). NOTE: beat-callback timing is UNVERIFIED offline — check op().time.play if steps don't fire when the TD timeline is paused.

ParameterTypeRequiredDescription
namestringnoName for the sequencer COMP. (default: euclidean)
parent_pathstringnoParent COMP path to create the sequencer inside. (default: /project1)
targetstringyesCOMP whose parameter or cue each active step fires on a beat boundary.
stepsintegernoNumber of steps in the Euclidean grid. (default: 16)
pulsesintegernoNumber of active pulses distributed evenly across steps via Bjorklund's algorithm. Clamped to <= steps at build time. (default: 4)
rotationintegernoCyclic rotation of the generated pattern (downbeat offset). (default: 0)
actionparam | cuenoparam: set a target custom-parameter value per active step; cue: recall a named cue per active step (cues stored with manage_cue). (default: param)
paramstringno(action=param) The custom-parameter name on the target COMP to set on each active step.
on_valuenumberno(action=param) Value written into the table cell for active steps. (default: 1)
off_valuenumberno(action=param) Value written into the table cell for inactive steps. (default: 0)
bpm_sourcestringnoPath to an existing Beat CHOP or tempo source. Omit to create a new Beat CHOP (on the global TD tempo).

create_preset_morph mutates

Target-agnostic preset morph engine: snapshot any OP's animatable parameters into N named slots, then blend between them with a weight vector (or a single A↔B recall) through a Lag CHOP + Lookup curve, exposing the live blended values on a Null CHOP for bind_to_channel consumers. Unlike create_look_bank (which is scoped to a control COMP's custom pars with a 2-slot A↔B knob), this drives any OP and supports >2 simultaneous weights (normalized internally). Reuses manage_cue's MORPH_HOOK for beat/bar quantized recall. Note: Lag CHOP does not advance while the timeline is paused.

ParameterTypeRequiredDescription
actionbuild | store | recall | set_weights | list | deletenobuild: create the morph container. store: snapshot the target's animatable parameters into a named slot. recall: snap or crossfade the target to one slot. set_weights: drive an N-way weighted blend across all stored slots (vector is clipped to >=0 and normalized). list / delete slots. (default: build)
parent_pathstringnoParent COMP where the morph container is built. (default: /project1)
namestringnoName of the morph container (baseCOMP) created inside parent_path. (default: preset_morph)
target_pathstringnoThe node whose parameters are snapshotted and driven (required for build/store). Any OP with animatable numeric/toggle/menu pars.
includestring[]no(store) Restrict the snapshot to these parameter names (tuplet names like 'tx', 'feedback'). Omit to capture every animatable numeric/toggle/menu parameter (pulses, strings, file refs are always skipped).
slotstringnoSlot name (required for store / recall / delete).
weightsobjectno(set_weights) Map of slot-name -> weight. Negatives clipped to 0; the vector is normalized internally (sum -> 1) before lerp. Missing slots default to 0.
morph_secondsnumberno(recall) 0 = snap; >0 = ease to slot over this many seconds via a Lag CHOP on the weight vector. Note: Lag CHOP does not advance while the timeline is paused. (default: 0)
quantizeoff | beat | barno(recall) Defer the snap/crossfade to the next musical boundary (project tempo). Mirrors manage_cue / create_look_bank. (default: off)
interpolationlinear | cosine | cubicnoInterpolation curve applied to each parameter when crossfading. linear is a straight lerp; cosine/cubic shape the lagged weights through a Lookup CHOP curve. (default: linear)

create_scene_timeline mutates

Build a scrubbable show timeline: a single Timer-CHOP playhead drives ordered scenes that recall cues on a target COMP. Sits above create_cue_sequencer (beat-quantized) and create_scheduler (event-firing) as the show's master clock. Exposes Play/Pause/Stop/Seek/Rate/Loop/Active_Scene custom pars + a playhead Null CHOP (t_seconds, t_norm, scene_idx, scene_t). Consumes the foundation setlist schema: when setlist_path is given, each scene's setlist_slot is mirrored into tdmcp_scenes for downstream tools. Bars→seconds conversion uses BPM 120 + 4 beats-per-bar at build time (no auto-rescale on tempo change).

ParameterTypeRequiredDescription
targetstringnoCOMP that owns the cues (tdmcp_cues). Store scenes' cues first with manage_cue. (default: /project1)
scenesobject[]yesOrdered scene list (sorted by start at build time). Overlaps drive morphs.
unitsseconds | barsnoInput unit for start/duration/morph_in_seconds. 'bars' is converted to seconds at build time using BPM 120 + 4 beats-per-bar (no auto-rescale on tempo change). (default: seconds)
loopbooleannoEnd of last scene → wrap to 0. (default: true)
ratenumbernoPlayback rate multiplier (Timer CHOP speed). Exposed as a live custom par. (default: 1)
autoplaybooleannoPulse the Timer's start on cook when true. (default: false)
setlist_pathstringnoOPTIONAL path to a DAT holding the foundation-setlist JSON. When present, scene.setlist_slot is stored alongside each scene in tdmcp_scenes for downstream tools.
namestringnoEngine COMP name. (default: scene_timeline)
parent_pathstringnoParent path where the engine COMP lives. (default: /project1)

create_scheduler mutates

Build a Timer-CHOP scheduler COMP: one or more named timers (seconds or beats), each with an optional ordered segment list, sharing a Callbacks DAT that fires a cue/param/script action on onDone and onSegmentEnter. Atomic timer primitive that create_scene_timeline and other automation rides on. Reuses manage_cue's tdmcp_cues storage for the default 'cue' action - store target cues first with manage_cue.

ParameterTypeRequiredDescription
timersobject[]yesOne or more named timers built inside the scheduler COMP. Each becomes a Timer CHOP + segment Table DAT, all sharing one Callbacks DAT.
namestringnoName of the scheduler engine COMP (a containerCOMP) created inside parent_path. Re-running with the same name reuses it. (default: scheduler)
parent_pathstringnoParent COMP path the scheduler COMP is created inside. (default: /project1)
actioncue | param | scriptnoWhat the callbacks fire. 'cue': recall a cue (reuses manage_cue's tdmcp_cues). 'param': set target.par.param. 'script': artist-edited stub. (default: cue)
targetstringno(action cue/param) COMP the callback acts on. For 'cue', store the cues first with manage_cue.
paramstringno(action param) Custom-parameter name on target the callback sets.
on_done_valuenumberno(action param) Value written to target.par.param on onDone. (default: 1)
expose_controlsbooleannoAppend an Active toggle on the scheduler COMP, so a dashboard can pause callback dispatch live. (default: true)

create_glsl_material mutates

Create a GLSL MAT under parent_path for custom-shaded geometry. The pixel/vertex/(optional) geometry shader source is placed in companion Text DATs (&lt;name&gt;_pix/_vert/_geo) and wired to the GLSL MAT's pixel/vertex/geometry parameters; numeric uniforms are best-effort bound on the Vectors sequence and samplers on the Samplers sequence. Pixel shader must declare out vec4 fragColor;. Returns the GLSL MAT path, the DAT paths, and warnings for known TD GLSL footguns (missing fragColor, F1/F2 preamble collision, undeclared uTime, sampler bindings needing manual wiring). Artist assigns the MAT to a Geometry COMP via its material par.

ParameterTypeRequiredDescription
parent_pathstringyesParent COMP to create the GLSL MAT + DATs inside.
namestringnoName for the GLSL MAT (default 'glsl_mat1').
pixel_shaderstringyesGLSL pixel/fragment shader source. Must declare out vec4 fragColor;.
vertex_shaderstringnoOptional GLSL vertex shader source.
geometry_shaderstringnoOptional GLSL geometry shader source.
uniformsobject[]noOptional uniform declarations to best-effort bind on the GLSL MAT.
glsl_version330 | 400 | 410 | 420 | 430 | 440 | …noGLSL Version par value. (default: 330)
two_sidedbooleannotwoside par. (default: false)
lighting_spaceworld | cameranolightingspace par. (default: world)

scaffold_tool_generator mutates

Meta DX tool: scaffolds a new tdmcp tool file (xSchema + xImpl + registerX) and a matching offline msw unit test from a one-line idea. Returns the exact integration-hint (import line + array entry + layer index path) so the integrator can wire it without re-deciding shape. No TouchDesigner bridge call — pure local filesystem generator.

ParameterTypeRequiredDescription
namestringyessnake_case tool name, e.g. 'create_smoke_field'
layerlayer1 | layer2 | layer3 | library | vaultnoDestination layer directory under src/tools/ (default: layer2)
surfacebridge | layer1_build | prompt | local_onlynoScaffold template variant (default: bridge)
descriptionstringyesOne-line MCP tool description
repo_rootstringnoRepo root (default: process.cwd()); for tests use a tmpdir
overwritebooleannoOverwrite existing file if true (default: false)

extend_data_source_fabric mutates

Adds extra transports to the data-source fabric beyond create_data_source: 'mqtt' subscribes to a broker, 'ws-binary' streams binary frames over a WebSocket, 'midi-mmc' listens for MIDI Machine Control transport bytes (play/stop/record/locate). Same downstream shape as create_data_source — a Null DAT for the raw text/bytes and a Null CHOP whose channels are ready for bind_to_channel / create_data_visualization.

ParameterTypeRequiredDescription
transportmqtt | ws-binary | midi-mmcyesWhich transport branch to build. 'mqtt' subscribes to a broker, 'ws-binary' streams binary frames over a WebSocket, 'midi-mmc' listens for MIDI Machine Control transport bytes.
parent_pathstringnoCOMP to build the sub-network inside. (default: /project1)
namestringnoBase name for the created sub-network.
hoststringno(mqtt/ws-binary) Broker or WebSocket host. Ignored by midi-mmc. (default: 127.0.0.1)
portintegerno(mqtt/ws-binary) TCP port. Defaults: mqtt=1883, ws-binary=9001.
topicstringno(mqtt) Subscription topic(s), comma-separated. (ws-binary) URL path, e.g. '/stream'.
usernamestringno(mqtt) Broker auth user.
passwordstringno(mqtt) Broker auth password.
tlsbooleanno(mqtt/ws-binary) Use TLS — flips mqtts:// or wss://. (default: false)
devicestringno(midi-mmc) MIDI input device name. Omit to use the first device.
frame_formatfloat32-le | int16-le | uint8no(ws-binary) How each frame's bytes decode into numeric samples. (default: float32-le)
channelsintegerno(ws-binary) Number of numeric channels per frame to expose on the Null CHOP. (default: 4)
fieldsstring[]no(mqtt) JSON keys to extract from each message into the sample table → Null CHOP channels. (default: value)
expose_controlsbooleannoSurface an 'Active' toggle (and a 'Reconnect' pulse for mqtt/ws-binary). (default: true)

build_chop_chain mutates

Declarative Layer-2 builder for an ordered CHOP processing chain. Pass an ops list (type + optional name + optional params); each op[i] is wired output 0 → input 0 of op[i+1] under parent (default /project1). Per-op create/param/connect failures become warnings (fail-forward) — a partial chain still returns useful info. Tip: end the chain in a nullCHOP to make it bind_to_channel-ready.

ParameterTypeRequiredDescription
parentstringnoParent component path. Defaults to /project1. (default: /project1)
namestringyesBase name for the chain; used as a name prefix when ops omit name, and as the chain's reported id.
opsobject[]yesOrdered list of CHOPs. Each op[i] is wired output 0 → input 0 of op[i+1].

author_script_operator destructive

Scaffold a Script CHOP/DAT/SOP/TOP with a ready-to-edit onCook(scriptOp) stub and optional custom parameters. Creates the Script op plus its companion callbacks DAT, writes a per-family stub (chan/row/point/numpy) — or your on_cook_body — and appends Float/Toggle/Str custom pars inferred from each default's type. Returns {op_path, callbacks_path, params_added, warnings}. Note: Script ops only cook when something requests them, so a paused timeline + no downstream consumer means no cook (not a bug).

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP to create the Script op inside. (default: /project1)
namestringnoName for the Script op; TD auto-names when omitted.
familyCHOP | DAT | SOP | TOPyesScript op family — selects the operator type and the onCook stub signature.
custom_paramsobject[]noCustom parameters to append on the Script op's 'Custom' page. (default: ``)
on_cook_bodystringnoOptional body for onCook(scriptOp); injected verbatim. When omitted a per-family no-op stub is used.

create_shared_memory_bridge mutates

Create a Shared Memory In/Out TOP/CHOP for zero-copy IPC with another app on the same host (Notch, Unity, Unreal, custom tools). Pick direction ('in' to receive, 'out' to publish), kind (TOP for pixel buffers, CHOP for numeric channels), and a shmName that the peer must match exactly. After creating an Out variant, wire the producer TOP/CHOP into it with connect_nodes. When format.header=false the peer reads a raw headerless buffer — sizes must agree exactly or frames will garble. Some (direction, kind) combos are platform/build-dependent; the tool returns a friendly fatal if the optype isn't available.

ParameterTypeRequiredDescription
directionin | outyes'in' = receive from an external app; 'out' = publish to an external app.
kindTOP | CHOPyesTOP = pixel buffer (RGBA frames); CHOP = numeric channels (control / audio-rate).
shmNamestringyesShared-memory segment name. Must match exactly on both sides. Two TDs using the same name will collide.
parentstringnoCOMP path to create the operator in. (default: /project1)
namestringnoOperator name; auto-generated when omitted (e.g. shm_in / shm_out).
formatobjectnoOptional format hints. Unknown / unsupported pars on this build become warnings.

build_sop_geometry mutates

Declarative Layer-2 builder for an ordered SOP geometry chain. Pass an ops list (type + optional name + optional params); each op[i] is wired output 0 → input 0 of op[i+1] under parent (default /project1). Per-op create/param/connect failures become warnings (fail-forward) — a partial chain still returns useful info. Tip: end the chain in a nullSOP for a stable handoff to Geometry COMPs, SOP-to-CHOP, or convertSOP. Use connect_nodes for multi-input fan-in (e.g. mergeSOP, copySOP template).

ParameterTypeRequiredDescription
parentstringnoParent component path. Defaults to /project1. (default: /project1)
namestringyesBase name for the chain; used as a name prefix when ops omit name, and as the chain's reported id.
opsobject[]yesOrdered list of SOPs. Each op[i] is wired output 0 → input 0 of op[i+1].

sync_timecode mutates

Wire an external SMPTE/MTC/LTC/OSC timecode source into the TouchDesigner timeline. Creates the input op + Math CHOP normaliser + Null CHOP 'tc_out' (channels 'frame' and 'seconds'); optionally adds an Execute DAT that writes project.frame = tc_out['frame'] each cook so the timeline follows house clock. Requires the project to be playing — paused TD will not advance. LTC has no native TD decoder; the tool surfaces a warning and creates the audio input so the artist can attach an external decoder. MTC operator availability is build-dependent.

ParameterTypeRequiredDescription
namestringnoName prefix for the timecode subsystem COMP (defaults to 'tc_in1').
parentstringnoCOMP to host the timecode subsystem in. (default: /project1)
sourcemtc | ltc | oscyesTimecode transport: 'mtc' = MIDI Time Code (MIDI In), 'ltc' = Linear Time Code from audio (no native TD decoder — surfaces a warning), 'osc' = OSC In CHOP listening on host:port.
hoststringno(osc) Bind interface; ignored for mtc/ltc. Defaults to '0.0.0.0'.
portintegerno(osc) UDP port (default 7000) or (mtc/ltc) device index (default 0). The device picker can hang on a macOS permission modal — keep the default unless you know the device.
osc_addressstringno(osc) OSC address pattern carrying the timecode payload. Defaults to '/timecode'.
fpsnumbernoReference frame-rate for SMPTE→frame conversion (24/25/29.97/30).
drive_timelinebooleannoWhen true, an Execute DAT writes project.frame = tc_out['frame'] each cook. Requires the project to be playing — paused TD will not advance. (default: true)
cue_on_labelbooleanno(osc) If the payload is a string matching a project cue name, call project.cue(name) instead of seeking. (default: false)

apply_lut mutates

Apply a colour Look-Up Table (LUT) to an existing TOP inside a self-contained baseCOMP. Prefers an OpenColorIO TOP for .cube/.3dl/.cc/.ccc files; falls back to a Movie File In + Lookup TOP for image LUTs or when OCIO is unavailable. A .cube file with no OCIO is parsed in Python into a Script TOP ramp. Exposes Strength and Bypass controls on a custom page. Pass source_path to grade an existing TOP, or omit it for a standalone preview on a grey Constant TOP.

ParameterTypeRequiredDescription
lut_pathstringyesAbsolute path to the LUT file. Accepts .cube, .3dl, .cc, .ccc (routed to OpenColorIO when available, otherwise parsed in Python for .cube or loaded via Movie File In for image-format LUTs). PNG/EXR/etc. always use the Movie File In + Lookup TOP fallback.
source_pathstringnoAbsolute TD path of the existing TOP to grade (e.g. '/project1/render1'). TD wires can't cross COMPs, so the source is pulled in via a Select TOP referencing the absolute path. When omitted, a Constant TOP (mid-grey, 1280×720) is created as a stand-in so the chain cooks and previews standalone.
ocio_config_pathstringnoOptional absolute path to an OCIO config file (.ocio). Only used when the OCIO branch is taken.
strengthnumbernoBlend amount between source (0 = untouched) and graded output (1 = full LUT). Drives the Cross TOP crossfade parameter. (default: 1)
bypassbooleannoWhen true, forces the Cross TOP crossfade to 0 so the source passes through unchanged. Also exposed as a toggle on the custom page. (default: false)
preferauto | ocio | lookupnoBranch selection. auto probes OpenColorIO availability at runtime and uses it for .cube/.3dl/.cc/.ccc files, falling back to the Lookup TOP path for images. ocio forces the OCIO branch. lookup forces the Movie File In + Lookup TOP path even when OCIO is available. (default: auto)
expose_controlsbooleannoWhen true, appends custom-page parameters Strength (float 0..1) and Bypass (toggle) on the container COMP and binds them to the Cross TOP crossfade. (default: true)
parent_pathstringnoParent COMP network where the LUT chain container is created. (default: /project1)
container_namestringnoBase name for the container COMP (a numeric suffix is auto-applied by TD). (default: apply_lut)

create_npr_filter mutates

Apply a non-photorealistic painterly filter to an existing TOP. A generalized Kuwahara (sector-based local variance smoothing) runs in a single GLSL TOP and branches into three looks selected by mode: oil (flat color regions, preserved edges), pencil (graphite sketch via luminance × edge magnitude), or watercolor (quantized chroma + low-frequency bleed). Creates a Select TOP → GLSL TOP → Null TOP chain under parent_path and exposes Radius / Smoothness / Strength as custom parent params bound by expression for live tweaking. Returns the GLSL TOP path, the bind-ready output null path, the fragment DAT path, exposed controls, and an glsl_compile_verified flag (always false offline — verify post-cook with get_td_node_errors).

ParameterTypeRequiredDescription
source_pathstringyesAbsolute path of an existing TOP to filter (e.g. '/project1/render1'). Pulled in via a Select TOP (no cross-COMP wire).
parent_pathstringnoParent COMP path to create the glslTOP + textDAT + nullTOP inside. (default: /project1)
namestringnoBase name for the glslTOP (textDAT becomes &lt;name&gt;_frag, output becomes &lt;name&gt;_out, source select becomes &lt;name&gt;_src). (default: npr1)
modeoil | pencil | watercolornoPainterly look. oil: full Kuwahara → flat color regions with preserved edges. pencil: luminance + edge-mag → graphite sketch. watercolor: quantize chroma + low-freq bleed. (default: oil)
radiusnumbernoSampling radius in texels. Cost is O(radius² · sectors) — keep modest on 4K. (default: 4)
sectors4 | 8noNumber of generalized-Kuwahara sectors. 8 = smoother painterly; 4 = classic Kuwahara (cheaper). (default: 8)
smoothnessnumbernoBlend between hard min-variance sector pick (0) and softmax-weighted average across sectors (1). Live control. (default: 0.5)
strengthnumbernoWet/dry mix between source (0) and filtered output (1). Live control. (default: 1)
resolutioninput | 720p | 1080p | 4KnoOutput resolution: 'input' inherits from the source (default), or '720p' (1280x720), '1080p' (1920x1080), '4K' (3840x2160). (default: input)

post_passes_3d mutates

Compose a chain of 3D-aware post-processing passes (SSAO, SSR, DOF, motion blur) inside a new baseCOMP. Each pass is a glslTOP with companion textDAT that samples color + depth + (optional) normal/velocity AOVs from selectTOPs. Passes run in fixed order SSAO → SSR → DOF → MB and emit a final null TOP ('out1'). SSR is skipped with a warning when normal_top is empty; motion blur falls back to a directional blur when velocity_top is empty; if color_top points at a renderTOP and depth_top is empty, a sibling depthTOP is auto-created (best-effort). Returns container/output paths, the resolved AOV paths, the enabled passes, and any warnings.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the post-pass container. (default: /project1)
namestringnoName of the created baseCOMP container. (default: post_passes_3d)
color_topstringyesAbsolute path of the beauty-pass TOP (Render TOP / Null TOP).
depth_topstringnoAbsolute path of the depth TOP. Empty = auto-derive from a sibling depthTOP when color is a renderTOP. (default: ``)
normal_topstringnoAbsolute path of the normal-AOV TOP. Empty = SSR is skipped (warning). (default: ``)
velocity_topstringnoAbsolute path of the velocity-AOV TOP. Empty = motion blur falls back to directional. (default: ``)
ssao_enablebooleanno(default: true)
ssao_radiusnumberno(default: 0.05)
ssao_intensitynumberno(default: 1)
ssr_enablebooleanno(default: false)
ssr_intensitynumberno(default: 0.5)
dof_enablebooleanno(default: false)
dof_focusnumberno(default: 0.3)
dof_aperturenumberno(default: 0.02)
motion_blur_enablebooleanno(default: false)
motion_blur_amountnumberno(default: 0.3)
resolutionobject[]no(default: 1280,720)

create_flow_abstraction mutates

Build a two-pass Kyprianidis-style flow abstraction: an edge-tangent-flow (ETF) bilateral smoother followed by a flow-based DoG (FDoG) line extractor — oil-painting smooth interiors with crisp coherent ink edges. Creates two glslTOPs + companion textDATs under parent_path, fed by a Select TOP from the source TOP and terminated by a Null TOP. Strength/Edge/Iterations are exposed as live parent-par-bound uniforms; blur radius, sigmas and tau are baked in at build time. Iterations boosts effective ETF strength in-shader (single-input pass, no ping-pong feedback).

ParameterTypeRequiredDescription
parent_pathstringyesParent COMP path to create the two GLSL TOPs in.
namestringnoBase name; nodes become <name>_etf, <name>_fdog, <name>_out, plus *_frag textDATs. (default: flow_abs)
sourcestringyesAbsolute path of the input TOP to abstract (e.g. '/project1/movie1'). Pulled in via a Select TOP so cross-container wiring is safe.
strengthnumbernoBilateral smoothing strength (0=passthrough, 1=full ETF blur). (default: 0.8)
edgenumbernoFDoG edge gain — multiplier on the DoG response before thresholding. (default: 1)
iterationsintegernoNumber of ETF passes; higher values boost ETF strength via an in-shader uniform. No external feedback loop is created in this version. (default: 2)
blur_radiusintegernoETF bilateral kernel half-width in texels along the tangent (kernel ≈ 2*radius+1). (default: 3)
sigma_enumbernoFDoG inner Gaussian sigma (texels). (default: 1)
sigma_rnumbernoFDoG outer Gaussian sigma — usually ≈ 1.6 * sigma_e. (default: 1.6)
taunumbernoFDoG center-surround weight. (default: 0.99)
resolution720p | 1080p | 4K | inputnoOutput res; 'input' inherits. (default: input)

create_data_source_http_ws mutates

Advanced live-data ingest for HTTP polling and WebSocket streams — the richer-transport sibling of create_data_source. http_poll: webclientDAT driven by a timerCHOP so polling cadence is a real CHOP signal you can retune/sync; supports custom HTTP method, headers, and body. websocket: websocketDAT with auto-reconnect, persistent connection. Both: JSONPath-lite selectors ($.key, $.key.sub, $.arr[0].field — no wildcards/filters) map response fields to named channels on an output Null CHOP ready for bind_to_channel. Raw body exposed on a Null DAT. Use create_data_source for simple one-knob JSON/CSV polling; use this tool when you need real POST/headers, fine-cadence timer sync, or a WebSocket stream.

ParameterTypeRequiredDescription
modehttp_poll | websocketnoTransport. (default: http_poll)
parent_pathstringnoCOMP to build inside. (default: /project1)
namestringnoBase name for the created baseCOMP; defaults to data_src_<mode>.
urlstringyesEndpoint URL. http(s)😕/ for http_poll; ws:// or wss:// for websocket. Note: webclientDAT runs inside TD (no browser CORS). wss:// with self-signed certs may silently fail (statusCode 0). JSONPath selector support: $.name, $.key.sub, $.arr[0].field — no wildcards or filters.
methodget | post | put | patch | deletenoHTTP method. http_poll only; ignored for websocket. (default: get)
headersobjectnoRequest headers (http_poll) or connect headers (websocket; best-effort, param may vary by TD build). (default: [object Object])
bodystringnoRequest body. http_poll only; caller pre-serializes JSON.
selectorsobject[]yesJSONPath-lite selectors. Each name becomes a Null CHOP channel and must be unique. path must start with $. Supported: $.key, $.key.sub, $.arr[0], $.arr[0].key. Non-numeric or missing values fall back to 0 with a warning.
poll_secondsnumbernoPolling interval in seconds. http_poll only; drives the timerCHOP cycle. (default: 1)
reconnect_secondsnumbernoSeconds between reconnect attempts. websocket only. (default: 2)
expose_controlsbooleannoSurface live Active, Poll/Reconnect, and per-selector LastValue readouts. (default: true)
static_sampleobjectnoSeed values keyed by selector name. Missing names default to 0.5.

setup_face_tracking mutates

One-shot face-landmark tracking from a webcam: loads the MediaPipe ENGINE (install first with tdmcp install mediapipe-touchdesigner), starts the timeline, and builds an adapter Script CHOP that emits a 468-sample (or 478 with iris) face-landmark CHOP (tx/ty/tz/confidence, centred on nose tip). Feeds directly into bind_to_channel and create_data_visualization.

ParameterTypeRequiredDescription
tox_pathstringnoPath to the MediaPipe ENGINE .tox (MediaPipe.tox). Defaults to the package staged by tdmcp install mediapipe-touchdesigner, falling back to ~/tdmcp-packages.
parent_pathstringnoCOMP to load the engine into. (default: /project1)
num_landmarks468 | 478no468 = MediaPipe FaceMesh base; 478 adds iris landmarks (10 extra) when iris tracking is enabled in the engine. (default: 468)

setup_hand_tracking mutates

One-shot MediaPipe hand tracking from a webcam: loads the mediapipe-touchdesigner ENGINE (install with tdmcp install mediapipe-touchdesigner), starts the timeline, locates the engine's hand JSON DAT, and builds an adapter Script CHOP that converts the hand JSON into a canonical max_hands×21-landmark CHOP (channels: tx/ty/tz/confidence/handedness). Use coordinate_space='world' for gesture detection (3D, curled fingers separate in z). The output CHOP at <parent_path>/<adapter_name>/hand is ready for bind_to_channel or create_pose_skeleton. Shares the same engine as setup_body_tracking — both can run in the same project.

ParameterTypeRequiredDescription
tox_pathstringnoPath to the MediaPipe ENGINE .tox (MediaPipe.tox). Defaults to the package staged by tdmcp install mediapipe-touchdesigner, falling back to ~/tdmcp-packages. The same engine is shared with setup_body_tracking.
parent_pathstringnoCOMP to load the engine into. (default: /project1)
max_handsintegernoMaximum number of hands tracked (1 or 2). Output CHOP allocates max_hands*21 samples. (default: 2)
coordinate_spaceworld | imageno'world' reads worldLandmarks (3D, meters, gesture-safe — curled fingers separate in z). 'image' reads normalised 2D landmarks, centred on the wrist. Use 'world' for gesture detection. (default: world)
adapter_namestringnobaseCOMP name created under parent_path to house the hand Script CHOP. (default: mp_hand_adapter)

setup_segmentation mutates

One-shot selfie segmentation via the MediaPipe TouchDesigner engine (install with tdmcp install mediapipe-touchdesigner). Loads the engine, enables Selfie Segmentation, and builds an adapter COMP with a clean alpha-mask Null TOP (optionally inverted and/or feathered) plus an optional pre-keyed RGBA Null TOP (person on transparent). Wire the mask into create_keyer, create_depth_silhouette, or any matte-consuming tool. The engine reuses an existing MediaPipe op if already loaded (idempotent). Keep the TD timeline PLAYING so the embedded browser captures the webcam; click Allow if macOS prompts for camera permission.

ParameterTypeRequiredDescription
tox_pathstringnoPath to the MediaPipe ENGINE .tox (MediaPipe.tox). Defaults to the package staged by tdmcp install mediapipe-touchdesigner, falling back to the legacy ~/tdmcp-packages path.
parent_pathstringnoCOMP to load the engine into. Reuses the existing engine if MediaPipe already exists. (default: /project1)
modelgeneral | landscapenoSelfie-segmentation model variant. 'general' works at any orientation; 'landscape' is tuned for wide-angle scenes. (default: general)
smoothbooleannoEnable the engine's mask temporal smoothing parameter if present. (default: true)
publish_prekeyedbooleannoAlso build a person_rgba Null TOP (camera × mask) so you can drop 'person on transparent' straight into a comp. (default: true)
invert_maskbooleannoOutput 1 − mask (useful for background-only effects). Applied via a Level TOP on the mask branch. (default: false)
feather_pxintegernoSoft-edge blur radius on the mask before publishing (Blur TOP). 0 = hard mask. (default: 2)
namestringnoAdapter COMP name under parent_path. Defaults to 'mp_segmentation'.

create_hand_gesture_bus mutates

Create a TouchDesigner Base COMP that converts hand landmarks into a stable gesture-control Null CHOP for palm holograms, lasers, audio controls, and other hand-reactive visuals. It creates helper nodes under parent_path, returns the component/output paths and created-node report, and exposes debounced channels such as palm_open, float_x/y, palm_size, pinch_active, pinch_power, scale_target, light_gain, and audio_level. Use source='synthetic' for camera-free previews, source='mediapipe' to build/use setup_hand_tracking, or source='existing_chop' with hand_chop_path when a hand landmark CHOP already exists.

ParameterTypeRequiredDescription
sourcesynthetic | mediapipe | existing_chopnoInput source: synthetic preview data, a new MediaPipe adapter, or an existing hand CHOP. (default: synthetic)
parent_pathstringnoParent COMP where the gesture-bus component and helper nodes are created. (default: /project1)
comp_namestringnoName for the created gesture-bus Base COMP under parent_path. (default: hand_gesture_bus)
hand_chop_pathstringnoRequired only when source='existing_chop'; path to a CHOP with hand landmark channels.
tox_pathstringnoOptional MediaPipe adapter .tox path passed through when source='mediapipe'.
adapter_namestringnoName for the setup_hand_tracking adapter when source='mediapipe'. (default: mp_hand_adapter)
max_handsintegernoNumber of hands to track or synthesize; the gesture bus supports one or two hands. (default: 2)
coordinate_spaceworld | imagenoCoordinate family expected from the hand source: normalized image space or world space. (default: world)
mirrorbooleannoMirror X coordinates for front-facing camera interaction and synthetic previews. (default: true)
smoothingnumbernoSlow smoothing factor for stable palm/float channels; higher values move more slowly. (default: 0.46)
fast_smoothingnumbernoFast smoothing factor for responsive pinch/power channels; higher values move more slowly. (default: 0.82)
hold_secondsnumbernoSeconds a disappearing/open palm is held before channels fall back. (default: 0.16)
pinch_arm_secondsnumbernoSeconds pinch_active must remain close before it is considered armed. (default: 0.11)
pinch_close_distnumbernoThumb-index distance at or below which a pinch closes; must be less than pinch_open_dist. (default: 0.052)
pinch_open_distnumbernoThumb-index distance at or above which a pinch opens; must be greater than pinch_close_dist. (default: 0.125)
pinch_radiusnumbernoPalm-local radius around the pinch point used to estimate pinch_power. (default: 0.155)
pinch_radius_scalenumbernoMultiplier applied to pinch_radius when converting distance into pinch_power. (default: 2.25)
pinch_thresholdnumbernoNormalized pinch_power threshold used to expose binary pinch_active channels. (default: 0.38)
active_hand_lockbooleannoKeep the first active hand as the control hand until it is lost, reducing hand switching. (default: true)
expose_controlsbooleannoCreate custom parameters on the component for tuning smoothing, pinch, and lock behavior. (default: true)

create_hand_ableton_mapper mutates

Build a MediaPipe-hands to TDAbleton TDA_Mapper performance control network. It outputs map1=left pinch, map2=right pinch, map3=left wrist roll, map4=right wrist roll, creates a skeleton overlay with star joints plus the thumb-index line, and optionally relinks an existing TDA_Mapper to the generated mapper_send CHOP. Uses TDAbleton directly; AbletonMCP is not required.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP for the mapper network. (default: /project1)
container_namestringnobaseCOMP created under parent_path. (default: hand_ableton_mapper)
hand_chopstringnoExisting hand CHOP with tx/ty/tz/confidence/handedness/screen_x/screen_y. Defaults to setup_hand_tracking's adapter output.
ensure_hand_trackingbooleannoWhen hand_chop is omitted, run setup_hand_tracking first. (default: true)
tox_pathstringnoOptional MediaPipe.tox path forwarded to setup_hand_tracking.
adapter_namestringnoHand adapter name used by setup_hand_tracking. (default: mp_hand_adapter)
coordinate_spaceworld | imagenoCoordinate space forwarded to setup_hand_tracking; world is best for pinch distance. (default: world)
hand_countintegernoNumber of hand slots. (default: 2)
closed_distancenumbernoDistance where thumb/index are treated as closed. (default: 0.025)
open_distancenumbernoDistance where thumb/index are treated as fully open. (default: 0.14)
smoothingnumberno0=raw, 0.99=very slow smoothing. (default: 0.35)
min_confidencenumbernoMinimum landmark confidence to accept a hand slot. (default: 0.25)
invert_pinchbooleannoInvert map1/map2 pinch values. (default: false)
invert_wristbooleannoInvert map3/map4 wrist-roll values. (default: false)
fallback_slotsbooleannoIf handedness is missing, treat slot 0 as left and slot 1 as right. (default: true)
mapper_pathstringnoOptional explicit TDA_Mapper path.
link_mapperbooleannoTry to set the TDA_Mapper Oscinputchop/Reorder/range parameters. (default: true)
create_overlaybooleannoCreate a skeleton overlay TOP with star joints and a thumb-index line. (default: true)
line_widthnumbernoOverlay line width. (default: 3)
star_sizenumbernoOverlay star-joint size. (default: 0.018)

diagnose_tdableton_mapper mutates

Inspect a TouchDesigner TDAbleton mapper COMP and its source CHOP. Reports common mapper symptoms and can optionally repair Oscinputchop, Reorder, Bypass, and Min/Max parameters without requiring AbletonMCP or a live Ableton connection.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP/project used when auto-searching for a TDA_Mapper COMP. (default: /project1)
mapper_pathstringnoOptional explicit path to the TDAbleton TDA_Mapper COMP.
source_chopstringnoCHOP expected to drive the TDAbleton mapper. (default: /project1/hand_ableton_mapper/mapper_send)
expected_reorderstringnoExpected Reorder parameter value and required source channel list. (default: map1 map2 map3 map4)
repairbooleannoIf true, apply best-effort mapper parameter repairs inside TouchDesigner. (default: false)

auto_repair_loop mutates

Driver: scan a subtree for cook errors, cluster them, route each cluster to the right fix (calls repair_network for structural/expression/flag issues; surfaces fix_shader / fix_reactivity as prompt hand-offs the agent must execute next turn), re-check, and iterate until clean, no-progress (stalled), or max_iterations (exhausted). Dry-run by default — one planning iteration, no writes. The loop CANNOT fix shaders or dead reactivity itself; it points the agent at them via recommended_prompts. Returns {status, iterations[], errors_before, errors_after, remaining[], recommended_prompts[], warnings}.

ParameterTypeRequiredDescription
pathstringnoRoot of the subtree to scan + repair. (default: /project1)
max_iterationsintegernoHard cap on outer iterations — each iteration = one scan + one route + one apply. (default: 3)
dry_runbooleannoWhen true (default), PLAN routes only (no writes). Propagated to repair_network; the loop runs exactly one iteration in dry-run mode. (default: true)
allowed_fixersrepair_network | fix_shader | fix_reactivity | summarize_td_errors[]noSubset of fixers the loop may route to. Drop 'repair_network' to make the loop advisory only (prompts + remaining, no writes). (default: repair_network,fix_shader,fix_reactivity,summarize_td_errors)
min_progressintegernoConvergence threshold — if an iteration clears fewer than this many errors, the loop stops (stalled). (default: 1)
include_warningsbooleannoWhen true, treat 'warning' severity errors as in-scope. Default ignores warnings (no-op until the bridge surfaces severity). (default: false)

build_pop_chain mutates

Declarative Layer-2 builder for an ordered POP (Point OPerator) chain. Pass a chain list of { type, name?, params?, extra_inputs? } entries; each chain[i] is wired output 0 → input 0 of chain[i+1] under parent (default /project1). Per-kind safe defaults are applied before user params; unknown par names become warnings (fail-forward). Multi-input POPs (merge, copy, feedback, proximity, switch, blend) accept extra_inputs paths wired into input 1, 2, …. POPs are Experimental — result carries unverified marker. Tip: end the chain in a null_pop for a stable handoff to Wave-3 render rigs.

ParameterTypeRequiredDescription
parentstringnoParent COMP path (default '/project1'). Same semantic as build_chop_chain. (default: /project1)
namestringyesBase name; used as prefix for auto-named ops and as the chain id.
chainobject[]yesOrdered POP chain. chain[i] is wired output 0 → input 0 of chain[i+1]; extra_inputs of chain[i] are wired into input 1, 2, …

create_audio_glsl_uniforms mutates

Writes CHOP-reference expressions onto the seq.vec uniform slots of an existing glslTOP, so named channels (low/mid/high/rms etc.) drive shader uniforms every cook. Creates no operators — pure parameter binding. Idempotent and composable with create_glsl_shader.

ParameterTypeRequiredDescription
target_glsl_pathstringyesPath to an existing glslTOP whose seq.vec slots will be bound.
source_chop_pathstringyesPath to the CHOP whose channels are read (must contain every chan listed in bindings).
bindingsobject[]yesChannel → uniform/component map. Multiple entries can target the same slot (different components) to build a multi-component uniform.
expand_capacitybooleannoIf true, grow g.seq.vec.numBlocks to fit the highest slot index. If false, an out-of-range slot is a hard error. (default: true)

connect_comfyui mutates

Bridge a running ComfyUI server: drops the TDComfyUI .tox if installed, otherwise builds a stock webclientDAT skeleton. The container exposes a Null TOP at <container>/out as the downstream output.

ParameterTypeRequiredDescription
modeauto | tox_drop | webclientno'auto' tries tox_drop first then falls back to webclient. Force one explicitly when you know which is installed. (default: auto)
parent_pathstringnoCOMP that will receive the ComfyUI container. (default: /project1)
namestringnoContainer name; defaults to 'comfyui'.
tox_pathstringnoExplicit .tox path. When omitted, candidates are probed in order: olegchomp/TDComfyUI, JiSenHua/ComfyUI-TD.
server_urlstringnoComfyUI server base URL — host:port of python main.py --listen. (default: http://127.0.0.1:8188)
workflow_json_pathstringnoAbsolute path to a ComfyUI workflow JSON exported from the web UI (Save (API Format)). Required for webclient mode.
source_top_pathstringno(webclient) TOP whose current frame is sent as the workflow input image via Syphon/Spout re-broadcast.
output_top_namestringnoName of the Null TOP exposed inside the container as the downstream output. (default: out)
output_modespout | syphon | ndi | file_watchnoHow the generated frame is pulled back into TD. 'file_watch' reloads ComfyUI's output folder via a movieFileInTOP. (default: syphon)
output_source_namestringnoSpout sender / Syphon server / NDI source name to receive on. Must match the ComfyUI side. (default: ComfyUI)
watch_folderstringno(output_mode=file_watch) Folder ComfyUI writes outputs to. The movieFileInTOP cycles the newest file.
poll_interval_secondsnumberno(webclient) How often to poll /history for completion. (default: 0.5)
activebooleannoStart polling / streaming immediately. Default off so the artist can sanity-check first. (default: false)

connect_daydream_cloud mutates

Create a Daydream cloud-hosted StreamDiffusion bridge in TD. A webclientDAT POSTs the encoded source TOP frame to Daydream's REST endpoint; the diffused result is pulled back via a Syphon/Spout/NDI receiver and exposed as a null TOP. API key is read from DAYDREAM_API_KEY in the TD process environment — never inlined. Live probe SKIPPED (requires Daydream account + outbound HTTPS).

ParameterTypeRequiredDescription
parent_pathstringnoCOMP to create the bridge sub-network in. (default: /project1)
namestringnoContainer name; defaults to daydream_cloud1.
source_top_pathstringyesTOP whose frames are POSTed to Daydream.
server_urlstringnoDaydream inference endpoint. Override for self-hosted or staging. (default: https://api.daydream.live/v1/stream)
model_idstringnoDaydream model slug. (default: streamdiffusion-v1)
promptstringnoText prompt sent in the request body. (default: ``)
strengthnumbernoDiffusion strength. (default: 0.7)
seedintegernoOptional seed.
fpsnumbernoOutbound POST cadence; clamped 1–30 (cloud rate-limit guard). (default: 8)
output_modesyphon | spout | ndinoReceiver TOP to instantiate for the relay output. (default: syphon)
output_source_namestringnoNDI source / Syphon-Spout sender name to subscribe to. (default: daydream_out)
activebooleannoStart polling immediately (default off so artist can confirm API key is set). (default: false)
expose_controlsbooleannoAdd custom-page sliders (Prompt, Strength, FPS, Active). (default: true)

create_llm_chain mutates

Stand up a prompt → response LLM chain inside TouchDesigner as a self-contained baseCOMP. Two modes: webclient — stock chain using webclientDAT + textDATs + headers tableDAT that POSTs JSON to any OpenAI-compatible endpoint (OpenAI, Anthropic, Ollama, llama.cpp, LM Studio, OpenRouter). tox_drop — drops the dotsimulate LLM LOPs .tox and wires mirror DATs. Default provider=ollama (fully offline, no key). API keys are read from env inside TouchDesigner (os.environ) and written into a headers tableDAT — the MCP server never sees them. Returns container_path, prompt_dat_path, response_dat_path, status_chan (:busy), provider, model, endpoint_url, and missing_env when a key is needed but unset. Notes: webclientDAT uses reqmethod/url/includeheader (verified live TD 099); body content goes via body_builder textDAT + callbacks. Anthropic uses x-api-key header + anthropic-version, not Authorization; Ollama requires ollama serve running on 127.0.0.1:11434; dotsimulate TOX par names are UNVERIFIED.

ParameterTypeRequiredDescription
modewebclient | tox_dropnowebclient: stock chain via webclientDAT — no extra dependencies, works with any OpenAI-compatible endpoint. tox_drop: drops the dotsimulate LLM LOPs .tox (requires the TOX installed locally). (default: webclient)
parent_pathstringnoCOMP path to build inside. (default: /project1)
namestringnoInner baseCOMP name. Defaults to llm_<provider> (webclient) or llm_chain (tox_drop).
provideropenai | anthropic | ollama | customnoLLM provider. ollama default — works fully offline, no API key required. custom requires endpoint_url and model. (default: ollama)
endpoint_urlstringnoOverride the endpoint URL. Required for provider=custom. Defaults: openai → https://api.openai.com/v1/chat/completions, anthropic → https://api.anthropic.com/v1/messages, ollama → http://127.0.0.1:11434/v1/chat/completions.
modelstringnoModel name. Required for provider=custom. Defaults: openai → gpt-4o-mini, anthropic → claude-sonnet-4-5, ollama → llama3.2.
system_promptstringnoWritten into a hidden sys textDAT. (default: You are a concise creative assistant for a TouchDesigner live show.)
initial_promptstringnoSeeds the Prompt textDAT on creation.
max_tokensintegernoMaximum tokens in the response. (default: 512)
temperaturenumbernoSampling temperature [0–2]. (default: 0.7)
json_modebooleannoSet response_format={type:json_object} for openai/ollama compatible endpoints. Ignored for anthropic. (default: false)
auto_requestbooleannoIf true, a datExecuteDAT fires webclient.request() whenever the prompt textDAT changes. Default false — caller drives. (default: false)
tox_pathstringnoPath to the dotsimulate LLM TOX. Required for mode=tox_drop. Also probes Library/LLM.tox and tox/LLM.tox.
expose_controlsbooleannoSurface Send (Pulse), Model, Temperature, MaxTokens, Active, JsonMode, Provider on the wrapper. (default: true)

add_timecode_overlay mutates

Overlay a running HH:MM:SS:FF timecode (or a countdown) onto an input TOP as VISUAL pixels — a Text TOP whose text expression re-evaluates every frame, composited 'over' the source with a Composite TOP. Modes: clock (show time since project start — NOT the OS wall clock — as HH:MM:SS:FF), count_up (elapsed time since this overlay was built, from zero), count_down (counts down from target_seconds to 00:00:00:00 and clamps there). The formatter lives in a Text DAT module (mod('fmt').tc(...)) so it re-cooks live inside TD. FPS is probed live (me.time.rate -> project.cookRate -> 60 fallback) and reported. Distinct from sync_timecode, which syncs a CLOCK SIGNAL (no pixels) — this tool draws the timecode into the image. Ends with a Null TOP 'out'.

ParameterTypeRequiredDescription
source_topstringyesPath of the input TOP to overlay the timecode onto (e.g. '/project1/moviefilein1'). REQUIRED.
modeclock | count_up | count_downnoclock: show total show time (since project start) as HH:MM:SS:FF. count_up: elapsed time since this overlay was built, from 00:00:00:00. count_down: counts down from target_seconds to 00:00:00:00 and clamps there. (default: count_up)
target_secondsnumbernocount_down only: seconds to count down from. Ignored in clock/count_up modes. (default: 60)
font_sizenumbernoTimecode font size in pixels. (default: 48)
colorstringnoTimecode text color as a hex string, e.g. '#ff3366'. (default: #ffffff)
positiontop_left | top_center | top_right | bottom_left | bottom_center | bottom_rightnoWhere the timecode text is anchored over the source frame. (default: bottom_left)
parent_pathstringnoWhere to build the overlay chain (a COMP path, e.g. '/project1'). (default: /project1)
namestringnoBase name for the container COMP that holds the chain. (default: timecode_overlay)

Nodes, inspection & debugging (Layer 3)

Atomic node CRUD plus the inspection, analysis, rendering and escape-hatch tools. Read-only inspectors are safe to call freely; the Python escape hatches run code inside TouchDesigner.

get_td_info read-only

Read-only health check + TouchDesigner server info. Returns {connected, endpoint, touchdesigner version info, knowledge-base stats, bridge_stale?} and changes nothing. Use this first to confirm the bridge is reachable; it succeeds even when TD is offline, reporting connected:false with the reason. Also warns when the running Python bridge is older than this build (a common gotcha — editing td/ doesn't reload the running bridge), pointing you at reload_bridge.

No parameters.

show_preflight_report read-only

Read-only pre-show check: bridge reachability, node errors, topology, cook-time budget, GPU/display topology and perform-mode status in one PASS/UNVERIFIED/WARN/FAIL report. Use before rehearsals or venue handoff to see what is safe, unverified, suspicious, or failing without mutating the project.

ParameterTypeRequiredDescription
root_pathstringnoNetwork root to inspect before a show. (default: /project1)
target_fpsnumbernoFrame-rate target for cook-time warnings. (default: 60)
recursivebooleannoInspect nested nodes for topology/performance. (default: true)
include_displaysbooleannoInclude GPU/display/perform-mode checks. (default: true)
include_performancebooleannoInclude network cook-time budget checks. (default: true)

create_raytk_op mutates

Copy a RayTK ROP master (SDF / camera / light / combine / material / render) into a network and optionally wire an existing op into one of its typed inputs, using the same COMP.copy primitive RayTK's own palette uses. Resolves the install-dependent master path live (RayTK's pathsByOpType lookup, or a category-folder search) — never hardcoded — so it requires the RayTK toolkit staged + loaded first (see manage_packages / the tdmcp://raytk/operators catalog). Complementary to the GLSL create_raymarch_scene: this instances RayTK's own operators instead of authoring a shader.

ParameterTypeRequiredDescription
op_typestringyesRayTK operator name = the .tox master, e.g. 'sphereSdf', 'raymarchRender3D', 'lookAtCamera', 'pointLight', 'simpleUnion'. See the tdmcp://raytk/operators catalog resource.
categorystringnoOptional RayTK category folder hint to speed master resolution, e.g. 'sdf','output','camera','light','combine','material','filter'. Optional because resolution also works by op_type alone.
parent_pathstringnoPath of the parent COMP the new ROP is copied into. (default: /project1)
namestringnoOptional node name for the new ROP. If omitted, TouchDesigner auto-uniques from the master name.
node_xnumbernonodeCenterX placement of the new ROP. Omit to auto-place to the right of existing siblings (avoids stacking repeated ops at the origin).
node_ynumbernonodeCenterY placement of the new ROP. Omit to auto-place (defaults to 0).
connect_fromstringnoOptional path of an existing operator to wire INTO this new op's input (source → new op). Omit for no wire; must be a non-empty path when present.
input_indexintegerno0-based input connector index of the NEW op that connect_from wires into (matches TouchDesigner inputConnectors[]). For raymarchRender3D: 0=scene, 1=camera, 2=light. (default: 0)
library_pathstringnoOptional explicit path to the loaded RayTK library COMP (advanced). If omitted, the bridge probes for it — the runtime master path is install-dependent and must be read live, never hardcoded.

create_td_node mutates

Create a single bare operator (node) inside a parent COMP — nothing is wired or laid out. Validates the operator type against the knowledge base and warns (without blocking) on unknown types. Returns {node, warnings[]} for the created node. This is the atomic primitive: for a complete wired+arranged network prefer the higher-level Layer-1 create_* tools (e.g. create_audio_reactive, create_feedback_network).

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP path to create the node inside. (default: /project1)
typestringyesOperator type string, e.g. 'noiseTOP', 'feedbackTOP', 'nullTOP', 'constantCHOP'.
namestringnoOptional node name (auto-generated if omitted).
parametersobjectnoOptional initial parameter overrides as key→value pairs.

delete_td_node destructive

DESTRUCTIVE by default: permanently remove one node from the project by path (a COMP also takes its children with it); this cannot be undone via the API. Prefer mode:'bypass' when you only want to disable a node — it turns the bypass flag on (reversible) instead of destroying it. Returns {deleted|bypassed, mode}. Only call delete mode when the user explicitly asks to remove a node.

ParameterTypeRequiredDescription
pathstringyesFull path of the node to delete, e.g. '/project1/noise1'.
modedelete | bypassno'delete' (default) destroys the node; 'bypass' is the safer, reversible middle ground — it turns the operator's bypass flag on instead of removing it, so the artist can re-enable it with one click. (default: delete)

update_td_node_parameters mutates

Modify an existing node by setting one or more of its parameters to constant values. The update is strict (not best-effort): an unknown parameter name fails the whole call atomically without changing anything, and a bad value (wrong type or out of range) returns an error naming which parameters applied and which failed. On success returns the updated {node}. To inspect valid parameter names/current values first use get_td_node_parameters; to make a parameter move over time use animate_parameter instead of a static value.

ParameterTypeRequiredDescription
pathstringyesFull path of the node whose parameters to update.
parametersobjectyesParameter overrides as key→value pairs, e.g. { period: 4, amplitude: 0.5 }.

get_td_nodes read-only

Read-only: list the DIRECT child nodes of one COMP. Defaults to a compact summary (count + type breakdown + sample paths); pass detail_level:"full" or path_only:true for the complete list, and pattern to filter by name. Returns {count, by_type/sample or paths/nodes}. Use this to browse one level; use find_td_nodes to search recursively and by operator type, or get_td_topology when you also need the connections between nodes. Token economy: keep the default compact summary and scope with pattern; only request the full list when you truly need every path, and avoid re-listing a path you already inspected.

ParameterTypeRequiredDescription
parent_pathstringnoParent COMP whose direct children should be listed. (default: /project1)
patternstringnoCase-insensitive filter on node name/path. Supports '' wildcards (e.g. 'text', 'noise').
path_onlybooleannoReturn only the list of node paths, dropping type/name. (default: false)
limitintegernoCap the number of nodes returned.
detail_levelsummary | fullno'summary' (default) returns a count, a type breakdown and the first few paths; 'full' returns every node. Use 'full' (or path_only) when you need the complete list. (default: summary)

get_td_node_parameters read-only

Read-only: read the current parameters (and inputs/outputs) of one node. Returns {path, type, name, parameters, inputs, outputs}. Pass keys to project specific parameters or omit_io:true to drop the inputs/outputs lists. Use compare_td_nodes to diff two nodes' parameters at once. Token economy: pass keys to fetch only the parameters you care about and omit_io:true to drop inputs/outputs — a full parameter dump is large.

ParameterTypeRequiredDescription
pathstringyesFull path of the node to inspect.
keysstring[]noOnly return these parameter names (case-sensitive). Omit to return all parameters.
omit_iobooleannoDrop the inputs/outputs lists from the result to save context. (default: false)

read_parameter_modes read-only

Read-only: for each parameter of a node, report its mode (CONSTANT / EXPRESSION / EXPORT / BIND), its evaluated value, and its raw expression / bind-expression / export-source strings. Use this to faithfully serialize a network for round-trip editing, diffing, or debugging — the evaluated value alone hides which parameters are driven by expressions or exports. Set non_default_only to surface only the parameters that would be lost in a plain value copy.

ParameterTypeRequiredDescription
pathstringyesFull path of the node whose parameters to inspect.
keysstring[]noOnly report these parameter names (case-sensitive). Omit for all parameters.
non_default_onlybooleannoOnly return parameters whose mode is not plain constant (i.e. expression/export/bind) — the ones that matter for a faithful round-trip. (default: false)

get_td_node_errors read-only

Read-only: check one node (or, with recursive:true, its whole sub-network) for cook/compile errors and warnings. Pass summary:true for grouped counts instead of the full list. Returns {total, errors[] or by_type}. For a large network prefer summarize_td_errors, which clusters errors by shared cause and points at the worst-offending nodes.

ParameterTypeRequiredDescription
pathstringyesFull path of the node (or network root) to check for errors.
recursivebooleannoIf true, check the whole network under path; otherwise just that node. (default: false)
summarybooleannoReturn only counts grouped by error type instead of the full error list. (default: false)

execute_python_script destructive

Escape hatch — run an arbitrary Python script inside the TouchDesigner process. Prefer the structured tools (find_td_nodes, get_td_node_parameters, update_td_node_parameters, summarize_td_errors, snapshot_td_graph, …); reach for this only when no structured tool can express the operation. Code runs in TD only, never on the local machine.

ParameterTypeRequiredDescription
scriptstringyesPython source to execute inside TouchDesigner (runs in the TD process, not locally).
return_outputbooleannoCapture stdout / the value of the last expression and return it. (default: true)

exec_node_method destructive

Escape hatch — invoke an arbitrary Python method on a node (operator). Prefer structured tools where one exists; use this for operations they don't cover (e.g. .cook(), .copy(), .destroy()).

ParameterTypeRequiredDescription
pathstringyesFull path of the node to call the method on.
methodstringyesMethod name to call, e.g. 'cook', 'par', 'destroy', 'copy'.
argsobject[]noPositional arguments. (default: ``)
kwargsobjectnoKeyword arguments. (default: [object Object])

get_td_classes read-only

Read-only: list TouchDesigner Python API class names from the embedded knowledge base (works offline, never touches TD). Returns {classes[]} of name/displayName entries. Optionally filter by name. Use get_td_class_details or get_module_help to expand one class into its members and methods.

ParameterTypeRequiredDescription
filterstringnoOptional case-insensitive substring to filter class names by.

get_td_class_details read-only

Read-only: full STRUCTURED documentation for one TouchDesigner Python class (members + methods) from the embedded knowledge base (offline). Returns the class object, or {found:false, suggestions[]} of near-name matches if unknown. Use get_module_help instead when you want the same content as ready-to-read Markdown rather than structured JSON.

ParameterTypeRequiredDescription
class_namestringyesPython class name, e.g. 'OP', 'TOP', 'App', 'CHOP'.

get_module_help read-only

Read-only: human-readable Markdown help (description, members, method signatures) for a TouchDesigner Python class or module, from the embedded knowledge base (offline). Returns formatted text, or {found:false, suggestions[]} of near-name matches if unknown. Use get_td_class_details instead when you need the same information as structured JSON to process in code.

ParameterTypeRequiredDescription
namestringyesClass or module name to get help for, e.g. 'OP', 'App', 'Project'.

get_td_performance read-only

Read-only: report cook times under a network (recursively by default, slowest node first) and warn about nodes that exceed the frame budget. Returns {targetFps, frameBudgetMs, totalCookMs, nodes[], warnings[]} and changes nothing. Use this to just measure; use optimize_performance when you want suggestions and the option to auto-shrink the slow TOPs.

ParameterTypeRequiredDescription
root_pathstringnoNetwork root to measure cook times under. (default: /project1)
target_fpsnumbernoFrame-rate target used to flag slow nodes. (default: 60)
recursivebooleannoMeasure every descendant (true, default) so cook time inside generated containers is counted, not just the root's direct children. (default: true)

get_td_topology read-only

Read-only: return the nodes AND the connections (wiring) under a network root, flagging obvious structural issues. Returns {nodeCount, connectionCount, issues[], topology}. Use this when you need how nodes are wired together; use get_td_nodes/find_td_nodes when you only need the node list without connections, or snapshot_td_graph when you also want each node's parameters captured for diffing. Token economy: point it at a specific network root rather than the project root, and leave recursion off unless you need nested networks.

ParameterTypeRequiredDescription
root_pathstringnoNetwork root to map. (default: /project1)

find_td_nodes read-only

Read-only: search a network for nodes by name pattern and/or operator type, recursively by default. Returns {count, truncated, matches/paths}. Prefer this over get_td_nodes when you are looking for specific nodes anywhere in a sub-tree (get_td_nodes only lists one COMP's direct children); use get_td_topology when you also need the wiring between them.

ParameterTypeRequiredDescription
parent_pathstringnoWhere to search from. (default: /project1)
patternstringnoCase-insensitive name/path filter with '' wildcards (e.g. 'text', 'noise').
typestringnoCase-insensitive operator-type substring (e.g. 'TOP', 'noise').
recursivebooleannoSearch the whole sub-network (true) or only direct children (false). (default: true)
path_onlybooleannoReturn only matching paths. (default: false)
limitintegernoMax matches to return. (default: 50)

summarize_td_errors read-only

Read-only: collect errors across a network and cluster them by message, type, or parent container, with the worst-offending nodes and a suggested order to investigate. Returns {total, groups[], suggestions[]}. Use this for network-wide triage instead of reading every node's errors one by one; use get_td_node_errors when you just want the raw error list for one node or sub-tree.

ParameterTypeRequiredDescription
pathstringnoNetwork root to collect errors under. (default: /project1)
group_bymessage | type | parentnoHow to cluster errors: by exact message, by error type, or by parent container (to find a common upstream cause). (default: message)

compare_td_nodes read-only

Read-only: diff the parameters of two nodes, returning only the values that differ (by default). Returns {type_match, differing_count, differing[], same_count}. Useful for aligning settings across similar operators; compares two live nodes, whereas diff_snapshots compares two whole-network snapshots over time.

ParameterTypeRequiredDescription
path_astringyesFirst node path.
path_bstringyesSecond node path.
only_diffbooleannoReturn only the parameters that differ (true) or also list the identical ones. (default: true)

snapshot_td_graph read-only

Read-only: capture a compact, serializable snapshot of a network — nodes, connections, structural issues, and optionally each node's parameters — for review, diffing, or documentation. Returns {nodeCount, connectionCount, issues[], nodes[], connections[]}. Set compact for a token-cheap whole-COMP read that hoists per-type default parameters and stores only each node's deltas. Feed two of these snapshots to diff_snapshots to see exactly what changed across an edit.

ParameterTypeRequiredDescription
pathstringnoNetwork root to snapshot. (default: /project1)
include_paramsbooleannoAlso fetch each node's parameters (one request per node; capped for large graphs). (default: false)
compactbooleannoToken-cheap whole-COMP read: hoist each operator type's most-common parameter values into a shared typeDefaults map and store only each node's deltas from them (Embody-style read_tdn). Implies fetching parameters. Use for feeding a large network to an agent without paying for repeated identical values. (default: false)
include_parameter_modesbooleannoAlso preserve TouchDesigner parameter modes/expressions/binds where available. Compact mode implies this so reactive expressions are not flattened to their current value. (default: false)

reload_bridge mutates

Hot-reload the bridge's Python inside the running TouchDesigner, so edits to the td/ modules take effect without reopening the project. Reimports every loaded mcp./utils. module in place and returns the list reloaded. Use after editing bridge code.

No parameters.

search_operators read-only

Search the embedded operator knowledge base (629 operators) by keyword, exact name, tag/keyword, category, subcategory, parameter metadata, or TouchDesigner version compatibility — ranked by relevance, fully offline by default. Use it to discover the right operator before creating nodes instead of guessing a type (e.g. 'what sends DMX?', 'particle', 'corner pin'). Returns name, family, summary, facets and optional matching parameters. Pass semantic:true to re-rank fuzzy candidates by embedding similarity (needs an LLM endpoint; falls back to keyword). With parameter_search, matched Menu parameters include their menu options; results are stamped with a data_version (which TouchDesigner build the offline catalog reflects) and a stale_hint when the connected TD is on a different major. Token economy: use a specific query and a small limit; one focused search beats several broad ones.

ParameterTypeRequiredDescription
querystringyesWhat you're looking for — words from a name, family, or description (e.g. 'blur edge', 'audio spectrum', 'instance geometry').
limitintegernoMax results to return. (default: 20)
semanticbooleannoOpt-in: re-rank keyword candidates by embedding similarity via the configured LLM endpoint (TDMCP_LLM_BASE_URL / _MODEL, Ollama by default). Better for fuzzy/conceptual queries. Falls back to keyword ranking if the endpoint is unavailable — the default (false) needs nothing. (default: false)
categorystringnoOptional operator family/category filter, e.g. TOP, CHOP, SOP, DAT, COMP, MAT, or POP.
subcategorystringnoOptional subcategory filter, e.g. Generators, Filters, Audio, Network, Experimental.
typefuzzy | exact | tagnoSearch mode: fuzzy searches names/summaries/keywords, exact searches only operator names/display names, tag searches tags and keywords. (default: fuzzy)
parameter_searchbooleannoAlso search operator parameter names, labels and descriptions; matching parameters are returned per hit. (default: false)
versionstringnoOptional stable TouchDesigner version filter, e.g. 099, 2019, 2020, 2021, 2022, 2023, or 2024. Operators with compatibility records added after the target version are excluded.

compare_operator_docs read-only

Read-only: compare two TouchDesigner operator types from the embedded offline knowledge base, including overview metadata plus shared and unique documented parameters. This compares operator documentation, not live node settings; use compare_td_nodes for live node parameter diffs.

ParameterTypeRequiredDescription
operator_astringyesFirst TouchDesigner operator name, display name, or slug.
operator_bstringyesSecond TouchDesigner operator name, display name, or slug.
include_parametersbooleannoInclude shared and unique parameter detail arrays in the structured result. (default: true)
parameter_limitintegernoMaximum parameter entries to return in each shared/unique parameter list. (default: 30)

get_operator_workflow_guide read-only

Read-only: return an embedded TouchDesigner operator workflow guide with common inputs, outputs, examples, and next-operator suggestions. For unknown operators, returns candidate guide ids instead of failing.

ParameterTypeRequiredDescription
operatorstringyesOperator name, display name, or slug to look up.
include_examplesbooleannoInclude Python examples, expressions, and generated usage patterns. (default: true)
next_limitintegernoMaximum number of next-operator suggestions to return. (default: 8)

suggest_operator_chain read-only

Read-only: suggest a small ordered TouchDesigner operator chain for a creative or technical goal from offline operator docs and workflow patterns. Returns connection hints and next tool hints; it does not create nodes.

ParameterTypeRequiredDescription
goalstringyesCreative or technical goal for the operator chain.
familystringnoOptional operator family/category preference, e.g. TOP, CHOP, SOP, DAT.
seed_operatorstringnoOptional starting operator name, display name, or slug.
max_stepsintegernoMaximum number of operators to return in the suggested chain. (default: 5)

validate_operator_chain read-only

Read-only: validate an ordered TouchDesigner operator chain against embedded operator docs, documented connections, family/category filters, and optional TouchDesigner version compatibility. It does not create or modify TD nodes.

ParameterTypeRequiredDescription
chainstring[]yesOrdered TouchDesigner operator names, display names, or slugs to validate.
familystringnoOptional expected operator family/category, e.g. TOP, CHOP, SOP, DAT, or POP.
categorystringnoAlias for family; optional expected operator category.
target_versionstringnoOptional target TouchDesigner stable version, e.g. 099, 2023, or 2024.
require_documented_connectionsbooleannoWhen true, adjacent pairs must be documented by embedded connection guides. (default: false)

draft_recipe_from_operator_chain read-only

Read-only: convert an ordered TouchDesigner operator chain into a RecipeSchema draft without writing files or touching the TD bridge.

ParameterTypeRequiredDescription
chainstring[]yesOrdered TouchDesigner operator names, display names, slugs, or optypes, e.g. ['Noise TOP', 'Level TOP', 'Null TOP'].
idstringnoOptional recipe id. Generated when omitted.
namestringnoOptional recipe display name. Generated when omitted.
descriptionstringnoOptional recipe description. A chain summary is generated when omitted. (default: ``)
tagsstring[]noOptional recipe tags. (default: ``)
difficultybeginner | intermediate | advancedno(default: intermediate)
td_version_minstringno(default: 2023)
familystringnoOptional operator family/category constraint, e.g. TOP, CHOP, SOP, DAT.
strictbooleannoWhen true, unresolved operators or family mismatches return an isError result. (default: true)

get_technique_detail read-only

Read-only: inspect embedded TouchDesigner technique packs and individual techniques, with optional code snippets and setup/workflow details.

ParameterTypeRequiredDescription
categorystringnoTechnique pack category id or display name.
technique_idstringnoTechnique id or name inside the selected category.
include_codebooleannoInclude code snippets in technique detail results. (default: false)
include_setupbooleannoInclude setup/workflow guidance in technique detail results. (default: true)

draft_recipe_from_technique read-only

Read-only: convert an embedded TouchDesigner technique with GLSL source into a RecipeSchema draft without writing files or touching the TD bridge.

ParameterTypeRequiredDescription
categorystringyesTechnique pack category id or display name.
technique_idstringyesTechnique id or name inside the selected category.
idstringnoOptional recipe id override.
namestringnoOptional recipe display name override.
descriptionstringnoOptional recipe description override.
tagsstring[]noExtra recipe tags to append. (default: ``)
difficultybeginner | intermediate | advancednoOptional recipe difficulty override.
td_version_minstringnoMinimum TouchDesigner version. (default: 2023)
include_glsl_codebooleannoInclude technique GLSL source in the draft recipe's glsl_code block. (default: true)
strictbooleannoReturn an error when the technique cannot be converted to a valid draft. (default: true)

draft_recipe_from_tutorial read-only

Read-only: extract a conservative operator chain from an embedded TouchDesigner tutorial and draft a RecipeSchema JSON without writing files or touching the TD bridge.

ParameterTypeRequiredDescription
namestringyesTutorial id or display name to draft from.
idstringnoOptional recipe id override.
recipe_namestringnoOptional recipe display name override.
descriptionstringnoOptional recipe description override.
familystringnoOptional operator family/category constraint, e.g. TOP, CHOP, SOP, DAT.
max_stepsintegernoMaximum operator references to keep from the tutorial. (default: 5)
tagsstring[]noExtra recipe tags to append. (default: ``)
difficultybeginner | intermediate | advancedno(default: intermediate)
td_version_minstringno(default: 2023)
strictbooleannoReturn an isError result when no RecipeSchema-valid draft can be produced. (default: true)
include_glsl_codebooleannoInclude a complete GLSL pixel-shader code block when a GLSL TOP tutorial provides one. (default: true)

get_tutorial read-only

Read-only: list embedded TouchDesigner tutorials, search tutorial metadata/content, or retrieve one by id/name. With include_content, the content is capped (~30K chars) and comes with a sections_available list; pass a section title to drill into just that part instead of pulling the whole document.

ParameterTypeRequiredDescription
querystringnoOptional search text to match against embedded tutorial metadata and content.
namestringnoOptional tutorial id or name to retrieve.
include_contentbooleannoWhen true, include tutorial content (capped, with a sections_available list) in returned entries. (default: false)
sectionstringnoWith include_content, drill into one section by title (from sections_available) instead of the intro overview — the cheap way to read a long tutorial.
limitintegernoMaximum tutorials to return for list and search modes. (default: 10)

search_python_api read-only

Read-only: search TouchDesigner Python API classes, methods and members from the embedded offline knowledge base. Supports class category filters and conservative stable-version compatibility filtering where compatibility metadata exists.

ParameterTypeRequiredDescription
querystringyesSearch query for TD Python classes, methods, or members.
search_inall | classes | methods | membersnoWhere to search: all, classes, methods, or members. (default: all)
categorystringnoOptional Python class category filter, e.g. General or Operator.
limitintegernoMax results per group. (default: 20)
versionstringnoOptional stable TouchDesigner version filter, e.g. 099, 2020, 2023, or 2024.

plan_td_version_migration read-only

Read-only: plan a TouchDesigner stable-version migration from offline release highlights plus operator and Python API compatibility records. Returns upgrade boundaries, focused compatibility deltas, and an operator checklist without touching TouchDesigner.

ParameterTypeRequiredDescription
from_versionstringyesCurrent TouchDesigner stable version, e.g. 099, 2023, or 2024.
to_versionstringnoTarget TouchDesigner stable version. Defaults to the current stable release.
querystringnoOptional project focus terms, e.g. web render, POP, script, DMX.
limitintegernoMaximum entries to return in each compatibility section. (default: 25)

search_touchdesigner_knowledge read-only

Read-only: search the embedded TouchDesigner knowledge router across operators, operator workflows, examples, versions, compatibility notes, technique packs, TD classes, and experimental build notes. Returns normalized results with resource URIs and tool hints for deeper lookups.

ParameterTypeRequiredDescription
querystringyesSearch text to route across TouchDesigner knowledge.
surfaceall | operators | operator_workflows | operator_examples | versions | operator_compatibility | …noKnowledge surface to search: all, operators, operator_workflows, operator_examples, versions, operator_compatibility, python_api_compatibility, techniques, td_classes, or experimentals. (default: all)
limitintegernoMaximum number of results to return. (default: 10)

manage_packages destructive

Search, list, inspect, doctor, dry-run install, stage, and uninstall manifest-driven TouchDesigner community packages. Dry-run is the default. Installs stage packages under ~/.tdmcp/packages and only import into TouchDesigner when the bridge is reachable and the package has a safe .tox import path. This tool never runs third-party scripts, pip installs, model downloads, or external app setup.

ParameterTypeRequiredDescription
actionsearch | list | info | doctor | install | uninstall | …yesPackage-manager action to run.
package_idstringnoPackage id or alias, e.g. 'mediapipe', 'raytk', or 'shader-park-td'.
querystringnoSearch query for action='search'.
installedbooleannoFor action='list', include installed state. (default: false)
dry_runbooleannoFor action='install', plan safely without downloading or mutating by default. (default: true)
project_pathstringnoTouchDesigner project COMP for optional live import. (default: /project1)
namestringnoOptional custom TD node name for live import.
pinstringnoOptional Git ref/tag to stage instead of the manifest default.
yesbooleannoAllow replacement of existing staged files / TD package target when applicable. (default: false)
allow_python_depsbooleannoAcknowledge optional Python dependency guidance; does not run pip. (default: false)
allow_externalbooleannoAcknowledge optional external dependency guidance; does not configure apps/services. (default: false)
packages_rootstringnoAdvanced override for package state/cache root. Defaults to ~/.tdmcp/packages.

document_network read-only

Document an EXISTING network: read its nodes and connections and return a readable map — counts by operator family and type, plus a Mermaid flowchart of the data flow you can paste into docs. Unlike plan_visual (which plans from a description), this describes what's actually in the project. Use it to explain or hand off a patch.

ParameterTypeRequiredDescription
pathstringnoNetwork root to document. (default: /project1)
recursivebooleannoInclude all descendants (otherwise just the direct children). (default: false)

diff_snapshots read-only

Compare two network snapshots (from snapshot_td_graph) and return a readable diff: which nodes were added or removed, which connections changed, and which parameters changed (with before/after values). Snapshot before an edit and after to see exactly what changed, or to version a patch over time. Pure analysis — touches nothing in TouchDesigner.

ParameterTypeRequiredDescription
beforeobjectyesEarlier snapshot (from snapshot_td_graph, include_params for param diffs).
afterobjectyesLater snapshot to compare against.

optimize_performance destructive

Scan a network for cook-time bottlenecks and report the slowest nodes with concrete suggestions. By default this is a read-only measurement; with apply=true it mutates flagged TOP resolutions by scale and returns the before/after sizes. Run get_td_performance when you only need metrics; use this tool when you want the bounded resolution change, and leave apply=false for a plan-only pass.

ParameterTypeRequiredDescription
pathstringnoNetwork to analyze (recursively). (default: /project1)
threshold_msnumbernoFlag nodes whose last cook took at least this many milliseconds. (default: 2)
applybooleannoIf true, actually lower the resolution of the flagged TOPs by scale. Default false = just report the bottlenecks and suggestions. (default: false)
scalenumberno(apply) Resolution multiplier for flagged TOPs (0.5 = half on each axis). (default: 0.5)

render_output mutates

Save a TOP to an image file at its native, full resolution (PNG/JPG/EXR/TIFF by extension) — for exporting a finished frame, unlike get_preview which only transfers a small inline thumbnail. The file is written by TouchDesigner on the TD machine; pass an absolute path.

ParameterTypeRequiredDescription
node_pathstringyesPath of the TOP to render to a file.
filestringyesOutput file path (written by TouchDesigner, so on the TD machine). Extension picks the format: .png/.jpg/.exr/.tiff. Use an absolute path.

record_movie mutates

Record a TOP to a movie file (.mov/.mp4) via a Movie File Out TOP — for exporting a clip or a loop, where render_output only saves a single frame. start begins recording (pass file, fps); pass seconds to auto-stop after a fixed length, or call stop to finish (stop also cleans up the recorder node). The file is written by TouchDesigner on the TD machine. For individual numbered frames, use render_output per frame.

ParameterTypeRequiredDescription
actionstart | stopnostart recording the TOP to a file, or stop the current recording. (default: start)
node_pathstringyesPath of the TOP to record.
filestringno(start) Output movie path on the TD machine, with a .mov or .mp4 extension. Absolute path recommended.
fpsnumberno(start) Frames per second. (default: 30)
secondsnumberno(start) If set, auto-stop after this many seconds (records a fixed-length loop); otherwise record until you call stop.

export_render_preset mutates

Start/stop a movie export with named VJ/editorial presets (HAP, HAP Alpha, ProRes 422/4444, NotchLC, MP4 review) while reusing record_movie's Movie File Out TOP recorder. This records a TOP to a file written by TouchDesigner and documents the expected codec/extension/fps for downstream playback tools.

ParameterTypeRequiredDescription
actionstart | stopnoStart or stop the preset recording pass. (default: start)
presethap | hap_alpha | prores_422 | prores_4444 | notchlc | mp4_reviewnoDelivery preset to document and apply. (default: hap)
node_pathstringyesPath of the TOP to record.
filestringnoOutput movie path on the TD machine. Required for action=start.
fpsnumbernoOverride the preset frame rate.
secondsnumbernoOptional fixed loop duration. Omit to record until a stop call.

check_operator_availability read-only

Reconcile the operator knowledge base against the RUNNING TouchDesigner's ground-truth creatable-optype list (GET /api/optypes). Flags which documented operators are actually creatable in this build vs deprecated/unavailable, and (optionally) which live optypes the knowledge base doesn't yet document. Pass a single operator name to check just that one. Survives TDMCP_BRIDGE_ALLOW_EXEC=0.

ParameterTypeRequiredDescription
operatorstringnoOptional single operator name/optype to check (e.g. 'noiseTOP' or 'Noise TOP'). Omit to reconcile the whole knowledge base against the live TouchDesigner.
include_kb_gapbooleannoAlso list creatable optypes the live TD exposes that the static knowledge base does not document (build/plugin drift). (default: false)

analyze_project read-only

Diagnose a network for cleanup: report likely-dead operators (zero wired outputs, unreferenced, not displayed), broken external-file dependencies (file parameters pointing at missing files), orphan COMPs, and a dependency map of which operators reference which. Read-only and conservative — every flagged item carries a human-readable reason. Complements plan_visual (which plans a build) and snapshot_td_graph (which dumps structure).

ParameterTypeRequiredDescription
pathstringnoNetwork root to analyze (the COMP whose descendants are scanned). (default: /project1)
recursivebooleannoRecurse into child COMPs (true) or only inspect the root's direct children (false). (default: true)

generate_readme read-only

Produce a Markdown project document for any COMP or project: family/type counts, custom-parameter table, inputs/outputs, child inventory, external file dependencies, and an optional preview thumbnail of the output TOP. Use include_mermaid to add a Mermaid flowchart and max_nodes to cap large inventories. Returns the full Markdown on the structured channel under markdown.

ParameterTypeRequiredDescription
pathstringnoPath of the project or COMP to document (e.g. /project1 or /project1/myComp). (default: /project1)
titlestringnoDocument title. Defaults to the COMP name when omitted.
include_previewbooleannoCapture and embed a preview thumbnail of the output TOP as a base64 inline image. (default: true)
include_mermaidbooleannoEmbed a Mermaid flowchart block in the ## Data flow section. Off by default to keep output compact. (default: false)
max_nodesintegernoMaximum child nodes to include in the Child inventory table. Nodes beyond this limit are omitted and a note is appended. Default 200. (default: 200)

edit_dat_content destructive

Surgically replace a substring inside a Text or Table DAT's .text. Without replace_all, requires exactly one match — 0 or >1 occurrences is an error, forcing the caller to add context or set replace_all. Use set_dat_content to overwrite an entire DAT's text in place; use this to make a targeted edit.

ParameterTypeRequiredDescription
dat_pathstringyesAbsolute path to the Text or Table DAT to edit (e.g. '/project1/mytext1').
old_stringstringyesExact substring to find. Must match at least once. Empty strings are rejected.
new_stringstringyesReplacement text. May be empty to delete the matched substring.
replace_allbooleannoWhen false (default), requires exactly one match — 0 or >1 occurrences is an error. Set true to replace every occurrence. (default: false)

set_dat_content destructive

Overwrite a Text or Table DAT's entire .text with new content. Unlike edit_dat_content (which makes a surgical find-and-replace), this replaces everything in one shot — use it to deploy a full script or template. Refuses to write empty/whitespace-only text unless confirm_wipe:true is passed, preventing silent data loss.

ParameterTypeRequiredDescription
dat_pathstringyesAbsolute path to the Text or Table DAT whose content will be fully replaced (e.g. '/project1/mytext1').
textstringyesThe full new contents of the DAT. Every existing character will be discarded; this string becomes the entire .text value.
confirm_wipebooleannoSet true to allow writing empty or whitespace-only text, which clears the DAT. When false (default), the tool refuses to write blank content to prevent silent data loss. (default: false)

edit_shader_live_loop destructive

Edit a GLSL/Text DAT and immediately run the practical shader feedback loop: write or surgically replace source text, inspect the shader/output node for errors, and optionally capture a compact inline preview. Uses set_dat_content/edit_dat_content under the hood so DAT write guardrails stay consistent.

ParameterTypeRequiredDescription
dat_pathstringyesAbsolute path to the GLSL/Text DAT to edit.
modeset | replacenoset overwrites the shader DAT; replace performs a surgical text replacement. (default: set)
shader_codestringnoFull shader source. Required when mode is set.
old_stringstringnoSubstring to find. Required when mode is replace.
new_stringstringnoReplacement text. Required when mode is replace.
replace_allbooleannoFor replace mode, replace all matches instead of requiring exactly one match. (default: false)
error_pathstringnoNode to inspect for errors after the edit. Defaults to preview_path, then dat_path.
recursive_errorsbooleannoIf true, check errors recursively under error_path. (default: false)
include_previewbooleannoCapture a compact inline preview after editing when preview_path is supplied. (default: true)
preview_pathstringnoTOP path to preview after the shader edit, usually the GLSL TOP output or Null TOP.
preview_widthintegernoPreview width. (default: 256)
preview_heightintegernoPreview height. (default: 256)
preview_formatjpeg | pngnoPreview encoding. (default: jpeg)
jpeg_qualityintegernoJPEG quality. (default: 75)
parent_depthintegernoUpstream depth for inline-preview error inspection. (default: 1)

set_parameter_expression mutates

Set one or more parameters on a node to an expression, bind expression, or constant value without needing the raw-Python escape hatch. Supports five modes: 'expression' (par.expr = ...), 'bind' (par.bindExpr = ...), 'constant' (par.val = ...), 'reset' (restore the parameter default via par.reset()), and 'unbind' (freeze the current evaluated value as a constant, dropping the driver). Multiple assignments are applied fail-forward — per-item failures accumulate as warnings so a partial batch still returns useful results. Batches using reset/unbind run through the exec path and require TDMCP_BRIDGE_ALLOW_EXEC=1. Use this instead of execute_python_script when TDMCP_RAW_PYTHON is off.

ParameterTypeRequiredDescription
pathstringyesFull path of the node whose parameters to set.
assignmentsobject[]yesOne or more parameter assignments.

write_agent_guide mutates

Emit a project-local CLAUDE.md / AGENTS.md seeded with tdmcp operator conventions and TouchDesigner render-coordinate rules, so a future agent working on this project starts with the right mental model. A small dynamic header (project name, node count, top families) is prepended to a curated static body. Pass output_dir to also write the file to disk on the machine running TouchDesigner. The guide is always returned in the structured result.

ParameterTypeRequiredDescription
filenamestringnoName of the guide file to emit, e.g. CLAUDE.md or AGENTS.md. Defaults to CLAUDE.md. (default: CLAUDE.md)
output_dirstringnoAbsolute path on the machine running TouchDesigner where the guide file should be written. If omitted the guide is returned in the result but not written to disk.
pathstringnoTouchDesigner project/COMP path to summarise in the guide header, e.g. /project1. A one-line dynamic summary (node count + top families) is prepended to the static body. (default: /project1)

disconnect_nodes mutates

Remove one or more input wires from a node in TouchDesigner. By default removes every incoming wire into to_path; narrow the scope with from_path (only wires from that upstream node) and/or to_input (only that input slot index). Returns the list of removed wires (input index + upstream node path), a probe of the Connector API attributes seen at runtime, and any per-wire warnings. Fatal only when to_path is not found — partial removals with per-wire warnings still succeed. The inverse of connect_nodes.

ParameterTypeRequiredDescription
to_pathstringyesThe downstream node to remove input wire(s) from.
from_pathstringnoOnly remove wires coming from this upstream node. Omit to remove ALL input wires into to_path (scoped by to_input if given).
to_inputintegernoOnly clear this input index on to_path (0-based). Omit to clear all inputs.

get_td_node_flags read-only

Read-only: report each node's operator flags (bypass / render / display / lock / allowCooking / clone) plus index-aware input wiring, network position, color and comment — the signals that explain a black/blank output that a parameter dump hides. Scan one node or a subtree (recursive); set only_problems to surface just the ops whose flags or cook errors would suppress output. Returns structuredContent for code to process.

ParameterTypeRequiredDescription
pathstringyesFull path of the node to inspect, or the COMP whose children to scan when recursive is set.
recursivebooleannoAlso scan the immediate children (depth 1) of path. Use this on a container to diagnose its whole network in one round-trip. (default: false)
only_problemsbooleannoReturn only nodes whose flags or cook errors would suppress output: bypass on, allowCooking off, or a cook error present. Conservative — display/render are reported but never used to filter (they default off on many visible ops). (default: false)
max_nodesintegernoCap the number of nodes scanned during a recursive subtree walk. (default: 200)

get_node_state_runtime read-only

Read-only: inspect a single operator's runtime telemetry — cook time, cook count, last-cook frame, resolution (TOPs), channel/sample counts (CHOPs), GPU memory usage, cook errors, and optional Info CHOP channels via include_info_chop. Complements get_td_performance (which aggregates cook times across a network) by providing deep per-op detail for the 'why is it black / why is it slow' diagnostic loop. Returns {path, type, family, cook_time_ms, cook_count, last_cook_frame, resolution, num_chans, num_samples, gpu_memory, info_chop?, errors[], warnings[], extra}. Attribute names are flagged UNVERIFIED and vary by TD build; the extra map records which attrs were actually present for live confirmation.

ParameterTypeRequiredDescription
pathstringyesFull path of the operator to inspect (e.g. '/project1/noise1').
include_info_chopbooleannoWhen true, create a temporary Info CHOP beside the operator and sample its channels for deeper per-op telemetry. Fail-forward: unreadable Info CHOP data becomes warnings.

watch_node read-only

Read-only: sample one TouchDesigner operator over a short interval and return runtime state, readable parameter values, and CHOP channel values when available. Missing TD attributes/channels are reported as warnings instead of failing the watch. Returns {path, requested_samples, collected_samples, interval_ms, window_ms, warnings[], snapshots[]} where each snapshot has {sample_index, elapsed_ms, path, type, family, state, parameters, channels, warnings}.

ParameterTypeRequiredDescription
pathstringyesFull path of the operator to sample.
samplesintegernoHow many snapshots to collect. (default: 3)
interval_msintegernoDelay between snapshots in milliseconds. (default: 100)
parameter_keysstring[]noOptional parameter-name allowlist. Omit to sample all readable parameters.
channel_keysstring[]noOptional channel-name allowlist for CHOP-like operators. Omit to sample all channels.

watch_parameter_changes mutates

Opt-in: subscribe to param.changed events for an operator's parameters. When a watched parameter's value changes in TouchDesigner (by a human or a script), the bridge broadcasts a {path, par, prev, value, frame} event on the TD event stream, forwarded to the MCP client as a logging notification. Use action='watch' to register (optionally scoped to named parameters), 'unwatch' to remove, and 'list' to see active watches. Events only arrive when the server's TD event stream is enabled (TDMCP_EVENTS); param.changed is treated as a high-frequency event (coalesced bridge-side so a slider drag can't flood). Survives TDMCP_BRIDGE_ALLOW_EXEC=0.

ParameterTypeRequiredDescription
pathstringnoOperator path to watch for parameter changes, e.g. /project1/level1. Required for action='watch'/'unwatch'; omit for action='list'.
parametersstring[]noOptional list of parameter names to watch (e.g. ['opacity','level']). Omit to watch every parameter on the operator.
actionwatch | unwatch | listno'watch' registers a subscription, 'unwatch' removes it (or just the named parameters), 'list' returns all active watches. (default: watch)

get_bridge_logs read-only

Read-only: collect recent cook errors and warnings from the running TouchDesigner project for debugging. Walks the operator tree under scope and gathers each operator's current cook errors and warnings (guaranteed). Also attempts a best-effort probe of textport/log DATs if they exist in the project. Use this when a script or cook fails and you need more context than the immediate error string — it surfaces the real Python traceback or operator cook errors without requiring a new REST endpoint. Returns {lines[], count, probe} where probe reports which log sources were reachable in this TD build.

ParameterTypeRequiredDescription
scopestringnoNetwork path to collect cook errors/warnings from (default whole project). Must be an existing operator path. (default: /)
max_linesintegernoCap how many log lines to return (1–500). (default: 100)
include_cook_errorsbooleannoInclude current operator cook errors/warnings across the scope. (default: true)

inspect_op_extensions_storage read-only

Read-only: inspect what a COMP exposes — its Python storage dict (keys + values), its extension class descriptors (name, promoted flag, public members), and its custom-parameter definitions (page/name/style/default). Closes the inspect side of the reusable-component loop: use after scaffold_extension + add_custom_parameters to verify what was built, or call standalone to examine any COMP without resorting to raw Python. Returns structured data for agent code-path consumption. API names vary by TD build; the probe field records which attributes were reachable.

ParameterTypeRequiredDescription
pathstringyesCOMP to inspect.
include_storagebooleannoInclude the COMP's Python storage dict (keys + JSON-able values). (default: true)
include_extensionsbooleannoInclude extension classes + promoted members. (default: true)
include_custom_parsbooleannoInclude custom-parameter definitions (page/name/style/default). (default: true)

serialize_network read-only

Read-only: serialize a COMP's immediate children into a git-diffable JSON spec — each node's name, op type, parameters (with mode + expression, not just the evaluated value), input wires by source node name, and position — plus best-effort custom-parameter definitions. This is the serialize half of a round-trip pair: feed the output spec to rebuild_network to reconstruct the subtree. Use it to snapshot a network as text you can diff across edits or commit to version control. Returns {root, nodes[], truncated?, warnings[]}.

ParameterTypeRequiredDescription
pathstringyesRoot COMP whose children to serialize into a diffable spec.
max_nodesintegernoCap nodes serialized. (default: 200)
include_custom_paramsbooleannoInclude custom-parameter definitions (best-effort). (default: true)

bundle_dependencies destructive

Make a COMP self-contained: recursively scan its subtree for external file references (movie/image files, fonts, LUTs, externaltox links — reusing the collect_project_assets scan), COPY each existing asset into <out_dir>/assets/, rewrite each referencing parameter in the LIVE network to the copied relative path (assets/<file>), then save the COMP as a .tox beside its assets with a tdmcp-component manifest. The result is a folder you can move to another machine and open without broken links. Delta vs make_portable_tox (which saves the .tox only, leaving external assets behind) and collect_project_assets (which only reports refs). Rewriting mutates the live network — set rewrite_refs=false to copy-and-report without touching parameters.

ParameterTypeRequiredDescription
comp_pathstringyesFull path of the COMP subtree to bundle (assets are gathered recursively).
out_dirstringyesLocal folder to write the self-contained package into (created if missing). The .tox and an assets/ subfolder land here.
namestringnoPackage/.tox stem. Defaults to the last path segment of comp_path.
rewrite_refsbooleannoWhen true, rewrite each referencing parameter in the LIVE network to the copied relative path (assets/<file>) BEFORE saving the .tox, so the saved component points at the bundled copies. When false, assets are copied but the network is left untouched (a report-and-copy pass). (default: true)
include_missingbooleannoIf true, still record assets whose source file is missing on disk (they cannot be copied and their ref is not rewritten). If false, missing refs are skipped with a warning. (default: false)

collect_project_assets destructive

Scan a COMP subtree for every external file dependency (movie/image file pars, fonts, LUTs, externaltox links) and report each referenced file, the node+parameter that references it, and whether the file currently exists on disk. The TouchDesigner scan is read-only and copies/rewrites nothing in the network; when out_manifest is set, this tool writes that local JSON path and may overwrite an existing manifest. File-par detection uses par.style ('File'/'Folder') when readable, falling back to a suffix/exact name heuristic (file, fontfile, lut, externaltox, moviefile, imagefile) — both UNVERIFIED across TD builds; style_supported records whether par.style was available.

ParameterTypeRequiredDescription
parent_pathstringnoRoot of the COMP subtree to scan recursively for external file dependencies. (default: /project1)
out_manifeststringnoOptional filesystem path to write the JSON asset manifest to. Empty string means do not write a file — just return the inventory. (default: ``)
include_missing_onlybooleannoWhen true, only report assets whose referenced file does not exist on disk. (default: false)

project_documentation_site destructive

Compose a one-folder handoff/portfolio documentation PACKAGE for a network: a README.md (title, node count, per-family summary, how-to-load note), a topology.md with a Mermaid graph of the connections, and - when include_thumbnails is set - preview PNGs of output TOPs under thumbs/ linked from gallery.md, all written into out_dir. Unlike generate_readme (a single file), this assembles a small multi-file site folder for sharing or archiving a project.

ParameterTypeRequiredDescription
parent_pathstringnoThe network to document (project or COMP), e.g. /project1 or /project1/myComp. (default: /project1)
out_dirstringyesFolder to write the documentation package into (relative or absolute).
titlestringnoDocument title. Defaults to the basename of parent_path when blank. (default: ``)
include_thumbnailsbooleannoCapture preview PNGs of output TOPs into thumbs/ and link them in gallery.md. (default: false)
max_thumbnailsintegernoMaximum number of output-TOP previews to capture when include_thumbnails is set. (default: 6)

caption_top read-only

Read-only: render a TOP's preview and return a plain-text description of it — the headless 'is the output alive?' primitive. Two paths: (a) a configured vision LLM endpoint when available, (b) a DETERMINISTIC luma/colour-histogram fallback decoded from the preview PNG pixels (always works, no model needed). Reports dominant colours, mean luma, near-black fraction, a coarse classification ('black'/'very dark'/'dark'/'bright'/'colorful'/'mid'), and a friendly caption. Returns {node_path, width, height, source:'vision'|'histogram', caption, stats{...}, warnings}. Use it after a build to confirm the network is actually rendering instead of a black frame. The vision path is currently inert (no vision field on the tool context) and falls back to the histogram.

ParameterTypeRequiredDescription
node_pathstringyesPath of the TOP to caption.
widthintegernoWidth to render the preview at before describing it. Smaller is faster. (default: 320)
heightintegernoHeight to render the preview at before describing it. Smaller is faster. (default: 180)
use_visionbooleannoUse the configured vision LLM endpoint when available; else fall back to a deterministic histogram description. (default: true)

repair_network destructive

Bounded, autonomous repair: scan cook errors under a subtree, classify each, and plan a safe fix, capped at max_steps so it can never run away. Defaults to dry_run (PLAN only, no changes). Set dry_run:false to apply the known-safe fixes — resetting a broken parameter expression to constant mode, and re-enabling a bypassed/display-off op — within the same bound; risky cases (DAT syntax errors, missing inputs, unclassified errors) are always PLAN-only. Re-checks errors after applying and stops at the bound or when errors clear. Returns {parent_path, dry_run, max_steps, errors_before, errors_after, steps[], remaining[], warnings, rolled_back}. Use it as the diagnostic 'try the obvious safe fixes' loop after a build; for raw triage use summarize_td_errors / get_td_node_errors instead.

ParameterTypeRequiredDescription
parent_pathstringnoRoot of the subtree to scan + repair. (default: /project1)
max_stepsintegernoHard cap on repair attempts — the bound that prevents runaway repair. (default: 3)
dry_runbooleannoWhen true (default), only PLAN fixes (no changes applied). Set false to apply within the bound. (default: true)

lint_recipe_library read-only

Offline semantic linter for recipes/*.json. Checks schema, id/filename match, duplicate node names, unknown operator types, dangling connections, bad parents, render-outside-geometryCOMP, missing parameter nodes, unresolved control bind_to, GLSL uniforms on non-GLSL hosts, and hygiene (tags/description/preview_description). Returns a structured report; never calls TouchDesigner.

ParameterTypeRequiredDescription
recipe_idstringnoIf set, lint only this one recipe (matched by id); otherwise lint all.
severityerror | warn | infonoMinimum severity to include in the result. (default: warn)
rulesschema | id_filename_match | duplicate_node_names | unknown_operator | dangling_connection | bad_parent | …[]noSubset of rule ids to run; default runs every rule.
fail_onerror | warn | nevernoSeverity at which the tool returns isError (CLI maps to exit code). (default: error)

score_build read-only

Read-only: score a built network 0–100 on a fixed rubric (palette/motion/complexity/errors/perf) and return per-criterion sub-scores plus deterministic improvement suggestions. Optional LLM critique when llmCritique=true and ctx.llm is configured. Composes existing bridge endpoints — creates nothing.

ParameterTypeRequiredDescription
scopePathstringnoNetwork root to score. Defaults to /project1. (default: /project1)
criteriapalette | motion | complexity | errors | perf[]noSubset of rubric criteria to evaluate. Final score is the equal-weight mean of the selected ones. (default: palette,motion,complexity,errors,perf)
targetFpsnumbernoFPS target used to derive the perf budget (same semantics as get_td_performance). (default: 60)
llmCritiquebooleannoWhen true and ctx.llm is configured, attach a short paragraph of artist-readable critique. Best-effort: LLM failure never fails the tool. (default: false)
previewTopPathstringnoOverride the TOP sampled for palette/motion. Defaults to the first /scopePath/out* TOP, then any /scopePath/*_out TOP.

profile_cook_cost read-only

Read-only: sample cook times over a window (N samples × intervalMs) and rank hotspot nodes by p95 cook time. Use this to diagnose intermittent stalls that a single get_td_performance snapshot misses. Returns {path, samples, intervalMs, targetFps, frameBudgetMs, windowMs, hotspots[], warnings[]}.

ParameterTypeRequiredDescription
scopePathstringnoNetwork root to profile (recursive). (default: /project1)
samplesintegernoHow many snapshots to take across the window. (default: 30)
intervalMsintegernoDelay between snapshots in milliseconds (>= one frame at 60fps). (default: 100)
topNintegernoHow many hotspots to return, ranked desc by p95. (default: 15)
targetFpsnumbernoForwarded to get_td_performance for the per-frame budget annotation. (default: 60)

control_timeline_transport mutates

Drive the TouchDesigner project timeline: play, pause, seek to a frame, jump to a named cue, or set playback rate. Returns the timeline state after the action so a copilot can verify the change took effect. NOTE: pausing will freeze any downstream motion/feedback/frame-diff chain — expected behaviour, not a bug.

ParameterTypeRequiredDescription
actionplay | pause | seek | cue | rateyesTransport verb: play — start playback; pause — stop playback; seek — jump to a frame; cue — jump to a named cue point; rate — set playback rate.
frameintegernoTarget frame for seek (required when action='seek').
ratenumbernoPlayback rate multiplier for rate (required when action='rate'). 1.0=normal, 0.5=half, 2.0=double.
cueNamestringnoNamed cue point for cue (required when action='cue').

inspect_gpu_and_displays read-only

Read-only: returns the host GPU info (name, driver, VRAM), attached monitor topology (resolution, refresh rate, primary flag, position), and whether the project is in Perform Mode. Use to plan output mapping, dome rigs, and multi-display shows without leaving the chat. Offline-safe — returns { connected: false, reason } when TD is unreachable.

ParameterTypeRequiredDescription
includegpu | monitors | performMode[]noSubset of sections to read; omit for all three.

diagnose_hardware_environment read-only

Read-only: check whether TouchDesigner is reachable, whether display/projector topology matches expectations, and whether generated sensor/helper status DATs such as source_status or bridge_status are healthy. This is a room/hardware preflight for physical installations; it returns PASS/WARNING/FAIL/UNVERIFIED checks without mutating the TD project.

ParameterTypeRequiredDescription
expected_min_monitorsintegernoOptional minimum display/monitor count expected for the room/projector setup.
includebridge | display | status_surfaces[]noSubset of hardware checks to run. Defaults to bridge + display, and also status_surfaces when status_paths is non-empty.
status_pathsstring[]noOptional DAT paths containing generated status JSON, such as source_status or bridge_status. (default: ``)

manage_component_storage destructive

CRUD operations on a COMP operator's .storage dictionary. Actions: list (all keys+values), get (one key), set (write a key), delete (remove a key). No operators are created; the target COMP must already exist.

ParameterTypeRequiredDescription
pathstringyesFull path of the COMP whose storage dict to operate on.
actionlist | get | set | deleteyes'list' returns all keys+values; 'get' reads one key; 'set' writes one key; 'delete' removes one key.
keystringnoStorage key. Required for get/set/delete; omit for list.
valueobjectnoValue to store under 'key'. Required for set. Must be JSON-serialisable (string, number, bool, list, dict, null).

elicit_missing_args read-only

Use the schema + LLM to propose values for a tool call's missing required args.

ParameterTypeRequiredDescription
tool_namestringyesRegistered tdmcp tool name, e.g. 'create_audio_reactive'.
partial_argsobjectnoArgs already known. Missing required fields will be elicited. (default: [object Object])
contextstringnoNatural-language context the user gave (a chat message, prompt, etc.).
temperaturenumbernoSampling temperature for elicitation. Low by default for determinism. (default: 0.1)
max_fieldsintegernoCap on how many missing required fields to elicit in one call. (default: 16)

extract_palette read-only

Sample dominant colors from a TOP by capturing its preview PNG and running deterministic k-means on the decoded RGB pixels. Returns {source_top, k, width, height, pixels_sampled, hex_colors[], swatches[{hex,rgb,weight}], warnings[]} sorted by dominance (most-frequent cluster first). Feeds AI grading prompts, create_palette, and design hand-offs. Read-only; no nodes are created or modified.

ParameterTypeRequiredDescription
source_topstringyesPath of the TOP to sample colors from.
kintegernoNumber of palette colors to extract (2..16). (default: 5)
widthintegernoWidth to render the preview at before sampling (smaller is faster). (default: 128)
heightintegernoHeight to render the preview at before sampling. (default: 72)

export_sop_to_svg destructive

Walk a SOP's primitives via the bridge and emit an SVG document of polylines (each primitive becomes one &lt;polyline&gt;). Projects to x/y (drops z), auto-fits viewBox, supports stroke/fill/scale/flip_y. Writes to disk when output_path is supplied and always returns the SVG string in the report. Pen-plotter / laser / print deliverable.

ParameterTypeRequiredDescription
source_pathstringyesSOP path to export (e.g. '/project1/geo1/circle1').
output_pathstringnoFilesystem path to write the SVG to. Absolute is recommended; relative paths are resolved against the server's current working directory. Omit to only return the SVG inline.
stroke_colorstringnoCSS color for polyline strokes (default black). Accepts hex, rgb()/rgba()/hsl()/hsla(), or a named colour; anything that could break out of an SVG attribute is rejected. (default: #000000)
stroke_widthnumbernoStroke width in SVG units. (default: 1)
fill_colorstringnoCSS color for fills (default 'none' — outlines only, plotter-style). Same allowlist as stroke_color. (default: none)
scalenumbernoScale factor applied to SOP units (TD SOPs are typically [-1..1]). (default: 100)
flip_ybooleannoFlip Y so the SVG matches TD's viewport orientation. (default: true)

swap_operator destructive

Change an operator's TYPE while preserving its name, position, incoming + outgoing wires, and any parameters that exist on the new type. Snapshots wires + params, deletes the old node, creates a new node of new_type at the same parent/name/x/y, re-applies matching params (others go into dropped_parameters), and rewires connectors. Fail-forward: per-wire / per-param failures are reported as failed_inputs[] / failed_outputs[] / dropped_parameters[] rather than aborting. Returns {old_type, new_path, preserved_parameters, dropped_parameters, reconnected_inputs, reconnected_outputs, failed_inputs, failed_outputs, warnings}.

ParameterTypeRequiredDescription
node_pathstringyesPath of the node to swap (e.g. '/project1/noise1').
new_typestringyesNew operator type, e.g. 'rampTOP', 'constantCHOP'.
preserve_parametersbooleannoRe-apply parameters that exist (by name) on the new type. (default: true)

copilot_vision read-only

Capture a TOP as a preview image and ask the configured multimodal LLM a question about it. Returns {source_top, question, width, height, answer, model?, stop_reason?, warnings[]}. Uses ctx.llm.complete() with a MultimodalMessage (text + image part). Requires an LLM backend (TDMCP_LLM_BASE_URL / MCP sampling); returns a friendly error otherwise. Different from caption_top, which is deterministic-by-default — this tool ALWAYS routes through the vision model with the artist's custom question.

ParameterTypeRequiredDescription
source_topstringyesPath of the TOP to send to the vision LLM.
questionstringyesQuestion or instruction about the image (e.g. 'what colors dominate?').
widthintegernoWidth to render the preview at before sending. (default: 640)
heightintegernoHeight to render the preview at before sending. (default: 360)
max_tokensintegernoUpper bound on response tokens. (default: 512)
systemstringnoOptional system instruction (defaults to a TouchDesigner vision-assistant prompt).

get_inline_preview read-only

Read-only one-shot inspection of a TOP: small base64 thumbnail (default 256² JPEG) + parent error sweep (BFS up parent_depth hops) + top-N changed-from-default parameters + cook stats. One call instead of chaining get_preview / get_td_node_errors / get_td_node_parameters when you just want to know 'is this op alive and healthy?'. Use get_preview/render_output for delivery-grade frames; this thumbnail is intentionally tiny + lossy.

ParameterTypeRequiredDescription
pathstringyesFull path of the TOP to inspect.
widthintegernoThumbnail width in pixels (16–1024). Capped — this is for snapshots, not delivery. (default: 256)
heightintegernoThumbnail height in pixels (16–1024). (default: 256)
formatjpeg | pngnoThumbnail encoding. JPEG keeps the payload small (~8–20 KB at 256²); PNG when alpha matters. (default: jpeg)
jpeg_qualityintegernoJPEG quality 1–100. Ignored when format is png. (default: 75)
parent_depthintegernoHow many upstream hops to also check for errors. 0 = just path; 1 = path + direct inputs. (default: 1)
max_changed_paramsintegernoTop-N parameters whose value differs from the operator default, ranked alphabetic. 0 = skip. (default: 12)
include_full_paramsbooleannoIf true, also include the full parameters object (mirrors get_td_node_parameters). (default: false)

compact_graph_digest read-only

Read-only: compress a TD subtree into a structured digest under max_tokens (default 500). Returns {header, nodeCount, connectionCount, primaryOutput, families{count,topTypes}, outputChain, errors{total,topGroups}, warnings, approxTokens}. Uses getNetworkTopology + getNetworkErrors — no new bridge work. Cheaper than get_td_topology / snapshot_td_graph for planning turns.

ParameterTypeRequiredDescription
pathstringnoTD container/subtree path to digest. Defaults to /project1. (default: /project1)
max_tokensintegernoHard ceiling on approximate output tokens (chars/4 heuristic). Default 500. (default: 500)
include_errorsbooleannoInclude top-3 grouped error keys. Off for purely structural turns. (default: true)
include_output_chainbooleannoWalk the primary output TOP upstream up to output_chain_depth. (default: true)
output_chain_depthintegernoHow far upstream to walk from the output TOP. 6 fits typical tails. (default: 6)
family_top_typesintegernoPer family, list up to N most-frequent operator types. 0 = counts only. (default: 3)

get_dat_content read-only

Read a Text or Table DAT with pagination so a large table cannot flood context. Returns total row/col counts, a header (table DATs), a sliced page (offset/limit), an optional stable head preview (preview_rows), and a row_range only on a partial read. Table DATs are split on tabs/newlines client-side — that split is lossy if a cell embeds a literal tab or newline (probe live before relying on it). Use edit_dat_content/set_dat_content to write.

ParameterTypeRequiredDescription
dat_pathstringyesAbsolute path to the Text or Table DAT to read (e.g. '/project1/table1').
offsetintegernoFirst data-row index to return (0-based). For a table DAT it indexes data rows (after the header when include_header is true); for a non-table Text DAT it indexes lines. (default: 0)
limitintegernoMax rows/lines to return. Capped so a large table never floods context. (default: 100)
preview_rowsintegernoIf > 0, ALSO return the first N rows regardless of offset — a stable head preview alongside a deep page. 0 disables the separate preview. (default: 0)
include_headerbooleannoFor table DATs, treat row 0 as a header: return it in header and make offset/limit index the data rows after it. Set false to treat every row as data. (default: true)

get_parameter_menu read-only

Read-only: for each menu parameter of a node, live-fetch the menu option values (menuNames — the machine values you set with par.val), their human-readable UI labels (menuLabels), and the currently selected value (current). Use this before setting a Menu / StrMenu parameter so you pick a valid option instead of guessing. Values come straight from the running TouchDesigner build, so they are authoritative and even include dynamically-populated menus (device lists, file menus) — an empty menuNames on a known-menu parameter means the menu has not populated yet (the node has not cooked / the device is not enumerated), not that there is no menu. Requires TDMCP_BRIDGE_ALLOW_EXEC=1; when raw exec is unavailable it falls back to the bundled catalog and attaches a stale-catalog warning.

ParameterTypeRequiredDescription
pathstringyesFull path of the node whose parameter menus to read.
keysstring[]noOnly report these parameter names (case-sensitive). Omit for all menu parameters.
menu_onlybooleannoOnly return parameters that actually have a menu (Menu / StrMenu). Set false to see every parameter with its (usually empty) menu. (default: true)

Library & packaging

Local-first component, recipe and package tooling: browse libraries, inspect manifests, bundle/import recipes, package .tox components, refresh previews, and maintain a local marketplace index.

browse_library read-only

Browse built-in/vault recipes and optional local component packages. Read-only discovery step before instantiating a recipe (apply_recipe) or installing a package (install_library_package); returns the matching recipes and packages so an agent can pick one by name.

ParameterTypeRequiredDescription
querystringno
tagsstring[]no(default: ``)
package_dirstringno
include_recipesbooleanno(default: true)
include_packagesbooleanno(default: true)

inspect_component_manifest read-only

Read and validate a tdmcp component/library manifest from a package folder or file. Read-only: use it to check a package's metadata, declared assets, and docs before install_library_package or make_portable_tox; reports validation problems instead of throwing.

ParameterTypeRequiredDescription
pathstringyes

make_portable_tox destructive

Save one live TouchDesigner COMP as a portable .tox package on disk, then write a tdmcp-component manifest beside it and optionally copy docs/README files. Use this for packaging a finished component; use bundle_dependencies instead when external media must be collected and relinked. Requires a running bridge and writes/overwrites local files in out_dir; returns the saved .tox path, manifest path, README path, and warnings.

ParameterTypeRequiredDescription
comp_pathstringyesAbsolute TouchDesigner COMP path to save, for example /project1/my_component.
out_dirstringyesLocal output directory that will receive the .tox, manifest, README, and docs.
namestringnoOptional filesystem-safe package stem; defaults to the COMP name from comp_path.
docsstring[]noOptional local documentation files to copy into out_dir/docs and reference in the manifest. (default: ``)
include_readmebooleannoWrite a package README.md with node inventory, custom parameters, inputs/outputs, and external file references. (default: true)

export_recipe_bundle destructive

Write a portable JSON recipe bundle to out_file. When include_all=false, recipe_ids selects the entries; when include_all=true, the full local library is exported and recipe_ids is ignored. Unknown IDs are reported in missing rather than silently substituted. Use import_recipe_bundle to restore the bundle on another machine or publish_recipe_bundle when you need checksums/versioned handoff artifacts. This writes a local file and returns the bundle kind, version, timestamp, exported recipes, and missing IDs.

ParameterTypeRequiredDescription
out_filestringyesDestination path for the portable recipe-bundle JSON file.
recipe_idsstring[]noRecipe IDs to export when include_all=false; unknown IDs are listed in missing. (default: ``)
include_allbooleannoExport the complete local recipe library when true; otherwise export recipe_ids only. (default: false)

publish_recipe_bundle destructive

Write a local, versioned recipe-bundle publish artifact for CI upload or handoff: <name>.recipes.json, tdmcp-recipe-publish.json, and tdmcp-checksums.json. Use recipe_ids for selected recipes or include_all=true for the whole library; overwrite=false protects existing artifacts. This is a filesystem write tool and returns artifact paths, checksum entries, included recipe count, and missing ids.

ParameterTypeRequiredDescription
out_dirstringyesLocal directory where the bundle JSON, publish manifest, and checksum manifest are written.
namestringnoFilesystem-safe bundle name; becomes <name>.recipes.json after sanitization. (default: recipe-bundle)
versionstringnoSemantic version recorded in the tdmcp-recipe-publish manifest. (default: 0.1.0)
recipe_idsstring[]noRecipe ids to include when include_all is false; missing ids are reported in the bundle. (default: ``)
include_allbooleannoWhen true, publish every recipe in the loaded recipe library and ignore recipe_ids. (default: false)
overwritebooleannoWhen false, fail if any output artifact already exists; set true to replace them. (default: false)

import_recipe_bundle destructive

Import recipes from a portable JSON bundle into a recipe directory. The inverse of export_recipe_bundle: each recipe is validated before it is written, so a malformed bundle fails loudly instead of corrupting the directory. Writes files (destructive).

ParameterTypeRequiredDescription
bundle_filestringyes
out_dirstringyes
overwritebooleanno(default: false)

validate_library_asset read-only

Check that a local library asset exists on disk and is referenced by an optional manifest. Read-only pre-flight for packaging: catches missing or unreferenced files before make_portable_tox / install_library_package and returns the specific problem rather than failing later.

ParameterTypeRequiredDescription
pathstringyes
manifest_pathstringno

scaffold_recipe_template destructive

Write a minimal but valid recipe JSON template to disk as a starting point for a new recipe. Use it to bootstrap a hand-authored recipe that already passes RecipeSchema; fill in nodes/connections, then instantiate with apply_recipe. Writes a file (destructive).

ParameterTypeRequiredDescription
out_filestringyes
idstringyes
namestringyes
overwritebooleanno(default: false)

attach_docs_as_assets destructive

Copy documentation files into a package and register them in its manifest's docs list. Use after make_portable_tox to bundle a README or usage notes with a component so they travel with it; writes into the package folder (destructive).

ParameterTypeRequiredDescription
manifest_pathstringyes
docsstring[]yes
asset_dirstringno(default: docs)

local_marketplace_index destructive

Scan a local package directory and write an index of installable tdmcp packages. Use it to make a folder of components browsable and installable as a simple local marketplace; the written index is what browse_library and install_library_package consume. Writes a file (destructive).

ParameterTypeRequiredDescription
package_dirstringyes
out_filestringno

Probe live COMPs in the running project for externaltox paths and report missing or broken linked component files. Read-only diagnostic: run it when externally-linked .tox components may have moved or gone stale, before relying on them in a build.

ParameterTypeRequiredDescription
pathsstring[]no(default: ``)
parent_pathstringno(default: /project1)

refresh_asset_previews destructive

Capture fresh preview PNG assets from one or more live TOP nodes and write each target to its file_path. Use it to regenerate stale thumbnails after a network changes; pass targets as {node_path,file_path} plus optional width/height. Requires a running TouchDesigner bridge, overwrites image files, and returns written previews plus per-target warnings.

ParameterTypeRequiredDescription
targetsobject[]yesPreview capture jobs; each target maps one live TOP node to one local PNG file.
widthintegernoPreview width in pixels requested from the bridge capture helper. (default: 640)
heightintegernoPreview height in pixels requested from the bridge capture helper. (default: 360)

install_library_package destructive

Install a local tdmcp component package folder, .zip, .tox, or manifest into dest_dir/<packageName>. Use inspect_component_manifest first when validating an unknown package; use browse_library after install to discover it. This copies or extracts files on disk, refuses to replace an existing package unless overwrite=true, rejects symlinked directory trees, and returns the resolved source and destination paths.

ParameterTypeRequiredDescription
sourcestringyesLocal package folder, .zip, .tox, or manifest file.
dest_dirstringyesLocal tdmcp package library directory; the package is installed under dest_dir/<packageName>.
overwritebooleannoWhen false, fail if the destination package already exists; set true to replace it. (default: false)

diff_library_assets read-only

Offline deep diff of two saved library assets on disk (recipe JSONs, component manifests, or serialize-network spec JSONs). Reports added/removed keys and changed values (old to new); for recipes it also diffs nodes, per-node params, and connections. Does not touch TouchDesigner. Use diff_snapshots to compare two live TD graphs.

ParameterTypeRequiredDescription
a_pathstringyesFirst saved library asset on disk (recipe / component manifest / spec JSON).
b_pathstringyesSecond saved library asset to compare against the first (same kind).
modeauto | recipe | manifest | jsonnoHow to interpret both files. 'auto' picks by parsing (recipe-aware if both validate against the recipe schema, otherwise a generic deep diff). 'recipe' forces recipe-aware diffing (node/param/connection level). 'manifest' uses the same generic deep object diff as 'json' but reports mode_used='manifest' for component-manifest callers. (default: auto)

export_externalized_tree destructive

Save a COMP as a git-diffable externalized .tox tree using TouchDesigner's 'save external' (COMP.saveExternalTox). Instead of one opaque binary, the component — and, with recurse=true, every descendant COMP — is written to its own .tox file on disk with its externaltox parameter pointed at that file, so a version-controlled project shows per-node diffs. Writes files under out_dir (destructive) and mutates the live COMP's externaltox pars. out_dir is passed to the TouchDesigner process, so it must be a path that process can write to.

ParameterTypeRequiredDescription
comp_pathstringyesFull path of the COMP to externalize (its .tox is written to out_dir/<name>.tox).
out_dirstringyesLocal folder to write the externalized .tox tree into. Passed to TouchDesigner as the save target, so it must be reachable from the TD process's filesystem.
namestringnoRoot .tox stem. Defaults to the last path segment of comp_path.
recursebooleannoWhen true, externalize every descendant COMP too (each becomes its own .tox file), so the whole subtree is git-diffable. When false, only the root COMP is externalized. (default: true)

import_recipe_from_url destructive

Fetch, validate, and import a recipe or recipe-bundle JSON from an HTTPS URL into a local recipes directory (host-allowlisted, size-capped).

ParameterTypeRequiredDescription
urlstringyesHTTPS URL of a recipe or recipe-bundle JSON (e.g. a git-raw link).
out_dirstringyesRecipe directory to write imported recipes into.
overwritebooleannoOverwrite existing recipe files. (default: false)
max_bytesintegernoMaximum download size in bytes (default 1 MiB, hard cap 10 MiB). (default: 1048576)

export_palette_component destructive

Save a COMP as a .tox into TouchDesigner's native Palette folder so it appears in the Palette browser for drag-and-drop reuse.

ParameterTypeRequiredDescription
comp_pathstringyesPath to the COMP to export, e.g. /project1/base1
namestringnoFile stem for the .tox (default: the basename of comp_path)
categorystringnoPalette subfolder to group the component under (default: tdmcp)
palette_dirstringnoExplicit palette folder to use. Empty resolves TouchDesigner's user palette folder live. (default: ``)

marketplace_index_seed destructive

Write a guarded starter marketplace index JSON with optional built-in seed entries and custom package entries. Use this before local_marketplace_index when planning a local package marketplace; overwrite=false protects existing index files.

ParameterTypeRequiredDescription
out_filestringyesPath to the seed marketplace JSON file to write.
namestringno(default: tdmcp-local-marketplace)
entriesobject[]no(default: ``)
include_builtin_startersbooleannoInclude starter package ideas that can be replaced with real local package paths. (default: true)
overwritebooleannoWhen false, fail if out_file already exists. (default: false)

provenance_stamp mutates

Writes a .provenance.json sidecar next to a saved artifact (tox, recipe note, recipe bundle, component bundle). Records the sha256 checksum, file size, mtime, source COMP path, originating tdmcp tool, toolchain versions, best-effort git metadata, author, tags, and freeform notes. Offline — no TD bridge required.

ParameterTypeRequiredDescription
artifact_pathstringyesAbsolute or vault-resolved path to the file to stamp.
artifact_kindtox | recipe_note | recipe_bundle | component_bundle | othernoWhat kind of artifact this is — hint only, not validated. (default: other)
sourceobjectnoWhere/what produced this artifact. (default: [object Object])
authorstringnoAuthor label. Defaults to TDMCP_AUTHOR env var then os.userInfo().username.
tagsstring[]noFree-form tags for vault search. (default: ``)
notesstringnoShort human note to attach to the sidecar.
extraobjectnoTool-specific extras, e.g. {nodes:7, connections:9}. (default: [object Object])
overwritebooleannoReplace an existing sidecar. Set false to refuse if one exists. (default: true)
include_gitbooleannoCapture git commit/branch/dirty from the artifact's directory (best-effort). (default: true)

checksum_and_verify_pack mutates

Compute or verify SHA-256 checksums for tdmcp artifacts (.tox, .recipe.json, bundles). action=compute walks a path and writes a tdmcp-checksums.json manifest. action=verify re-hashes files and reports ok/mismatch/missing/extra. No TD bridge required.

ParameterTypeRequiredDescription
actioncompute | verifyyes
pathstringyes
manifestobjectno
manifest_outstringno
include_globsstring[]no(default: ``)
exclude_globsstring[]no(default: **/tdmcp-checksums.json,**/.DS_Store,**/node_modules/**,**/.git/**)
follow_symlinksbooleanno(default: false)
max_file_bytesintegerno(default: 2147483648)
strictbooleanno(default: true)

curated_collection_pack mutates

Bundles a curated, hand-picked set of vault assets (recipes, components, looks, raw assets) into a single portable, shareable pack with provenance + integrity. action=pack gathers items into a <name>.pack/ directory tree with a JSON manifest and checksum manifest. action=unpack restores the tree, optionally verifying integrity. Fully offline — no TD bridge required.

ParameterTypeRequiredDescription
actionpack | unpackyes
namestringyesPack identifier; becomes <name>.pack/ dir name.
out_dirstringyesAbsolute dir where the pack is written (pack) or restored into (unpack).
pack_pathstringnounpack only — path to existing <name>.pack/ or its pack.manifest.json.
itemsobject[]nopack only. Files to include. Empty is an error. (default: ``)
vault_pathstringnoRoot for resolving relative items[].path. Falls back to TDMCP_VAULT_PATH env.
include_provenancebooleannoCopy .provenance.json sidecars if present; else synthesize via provenanceStamp. (default: true)
descriptionstringnoFree-form note baked into pack.manifest.json.
tagsstring[]noPack-level tags for search. (default: ``)
overwritebooleannoReplace existing pack dir (pack) or existing files in out_dir (unpack). (default: false)
verify_on_unpackbooleannounpack only — re-run checksumAndVerifyPack after copy and fail if not OK. (default: true)

component_changelog_trail mutates

Maintains an append-only per-component revision history as a JSONL trail (&lt;component&gt;.trail.jsonl) inside the Obsidian vault, next to the .tox and its provenance sidecar. Three actions: append a new revision entry (with optional sha256 of the .tox, changed-param list, author, and timestamp); read all entries back as JSON; export the trail as a human-readable markdown changelog note rendered into the vault. Offline — no TD bridge required. Pairs with save_component_to_vault and provenance_stamp.

ParameterTypeRequiredDescription
componentPathstringyesVault-relative path to the .tox file (e.g. 'Components/MyFx.tox'). The trail is stored as a sibling file '<componentPath>.trail.jsonl'.
actionappend | read | exportnoappend: add a new revision entry. read: return all entries as JSON. export: render the trail as a markdown changelog note next to the .tox. (default: read)
entryobjectnoRequired when action='append'. Ignored for read/export.
includeShabooleannoOn append, hash the .tox bytes with sha256 and store it on the entry — lets you cross-reference with provenance_stamp's sidecar. (default: true)
exportNoteNamestringnoOn export, the markdown filename (defaults to '<component>.CHANGELOG.md' next to the .tox).

generative_classics_pack destructive

Curated technique pack of canonical generative looks (feedback tunnel, audio spectrum, noise landscape, particle galaxy, reaction-diffusion, webcam glitch). list_only=true returns the technique cards plus the list of recipes the active library can satisfy; list_only=false also writes a portable bundle JSON (import_recipe_bundle-compatible) at install_path. Pure Node — no TouchDesigner bridge required.

ParameterTypeRequiredDescription
list_onlybooleannoWhen true (default), just list the technique cards + which are available; when false, also emit the portable bundle JSON. (default: true)
install_pathstringnoWhere to write the bundle JSON when list_only=false. Defaults to 'recipes/generative_classics.pack.json' inside the cwd.
overwritebooleannoWhen list_only=false: overwrite an existing bundle file at install_path. (default: false)

CLI automation

Tools that expose local CLI automation workflows, including recording and replaying repeatable TouchDesigner actions.

macro_recorder destructive

Record the sequence of MCP tool calls to a portable JSON macro file. Actions: start | stop | list | load. Replay ships separately as run_macro_script.

ParameterTypeRequiredDescription
actionstart | stop | list | loadyes
namestringno
filestringno
redactSensitivebooleanno(default: true)
allowUnsafeRecordingbooleannoRequired when redactSensitive=false because raw scripts/secrets may be persisted. (default: false)

run_macro_script mutates

Replay a MacroRecord JSON file by dispatching each entry through the in-process tool handlers. Use dryRun to plan without invoking, stopOnError to halt on first failure, argsOverrides to shallow-merge per-tool arg replacements, and allowRawPython to opt-in to raw-Python entries (still subject to the server-side ctx gate). Redacted args from a recording may fail at the tool boundary; do not un-redact.

ParameterTypeRequiredDescription
macroPathstringyes
dryRunbooleanno(default: false)
allowRawPythonbooleanno(default: false)
stopOnErrorbooleanno(default: true)
argsOverridesobjectno

Obsidian vault

Bridge an Obsidian vault (set TDMCP_VAULT_PATH) and TouchDesigner: keep recipes, shaders, setlists, presets, moodboards and a dated show diary in Markdown and move them in and out of your project.

scaffold_vault mutates

Populate the configured Obsidian vault with a starter layout and worked examples (a README plus example recipe, setlist, shader, and moodboard notes) so you begin from a working vault instead of an empty folder. WRITES Markdown files into the vault root and its subfolders; existing files are skipped unless overwrite:true. Run this once when first setting up a vault, before save_recipe_to_vault/import_setlist/etc. Returns the vault root path and the lists of files created vs skipped. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
overwritebooleannoOverwrite starter files that already exist (otherwise they're left untouched). (default: false)

save_recipe_to_vault mutates

Capture an existing COMP's network (child nodes, non-default parameters, wiring, and text/script DAT bodies) by reading TD, then WRITE it as a reusable recipe note in the Obsidian vault at Recipes/<id>.md; list_recipes/apply_recipe then see it alongside the built-in recipes. Use this to turn a patch you already built into a template — to instantiate a template instead, use apply_recipe. Refuses to overwrite an existing note unless overwrite:true. Returns the note path, recipe id, and node/connection counts. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
idstringyesRecipe id/slug; also the note filename written under Recipes/ in the vault.
comp_pathstringnoCOMP whose direct children are captured as the recipe. (default: /project1)
namestringnoHuman-friendly title (defaults to the id).
descriptionstringnoOne-line summary stored in the recipe note's frontmatter (defaults to empty).
tagsstring[]noFree-form tags for searching/filtering the recipe later (defaults to none).
difficultybeginner | intermediate | advancednoSkill-level label saved in the recipe metadata (defaults to 'intermediate').
overwritebooleannoWhen false, refuse to replace an existing Recipes/<id>.md note; set true to overwrite it. (default: false)
preview_topstringnoOutput TOP to thumbnail for the recipe note (e.g. <comp_path>/out1). Defaults to the comp's first/last TOP child; omit a TOP entirely to skip the thumbnail.
thumbnailbooleannoCapture a preview PNG next to the recipe note and embed it. Set false to skip. (default: true)
auto_tagbooleannoWhen true, run the auto_tag_library_asset heuristic on the captured network and merge the suggested tags (union, deduped) into the recipe frontmatter before writing.

apply_shader_from_vault mutates

READ a shader note from the Obsidian vault (a glsl fragment block, optional glslvert vertex block, and optional uniforms/resolution/name frontmatter) and CREATE a GLSL TOP in TouchDesigner from it. Side effect is node creation in TD, not file writes. Use this to apply a shader you keep in the vault; to supply shader code inline instead, use create_glsl_shader. Returns the created GLSL TOP (same result as create_glsl_shader). Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
notestringyesShader note: a vault-relative path, or a name resolved against the Shaders/ folder.
parent_pathstringyesParent COMP to create the GLSL TOP inside.
namestringnoName for the GLSL TOP (defaults to the note's frontmatter name, else 'glsl1').

sync_presets_vault mutates

Bridge a COMP's manage_presets snapshots with the Obsidian vault. With action 'export' it READS TD storage and WRITES a Markdown note (diffable, shareable) under Presets/; with action 'import' it READS that note and WRITES the presets back into TD storage (merging by name). Returns the note path plus the affected preset names. Use this to version-control or share presets across machines; use manage_presets to capture/recall them live. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
actionexport | importyesexport TD presets to a vault note, or import a note's presets back into TD.
comp_pathstringnoCOMP whose presets live in storage (the manage_presets target). (default: /project1)
notestringnoVault note path (defaults to Presets/<comp>.md).

export_network_to_vault mutates

READ an existing TD network's topology and WRITE it as an Obsidian note: a Mermaid flowchart plus [[wikilinks]] for every operator and connection, so the vault's graph view becomes a clickable map of the patch. The note (Networks/<path>.md by default) is fully rewritten on each call. Use this to persist a browsable map in the vault; use document_network to get the same documentation back as a tool result without touching the vault. Returns the note path and the node/connection counts (and whether output was truncated). Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
pathstringnoNetwork root to document. (default: /project1)
recursivebooleannoInclude all descendants (otherwise just the direct children). (default: false)
notestringnoVault note path (defaults to Networks/<path>.md).

log_performance mutates

READ a snapshot of a TD network (node/connection counts plus any errors) and, optionally, a preview image of an output TOP, then WRITE a dated journal entry to Performances/<date>-<title>.md in the vault (the thumbnail is saved as a binary attachment). Use this to build a diary of your shows over time. Returns the note path, whether a thumbnail was saved, and the node/issue counts. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
titlestringnoShort title for the entry (e.g. venue or set name).
comp_pathstringnoNetwork to snapshot for the log. (default: /project1)
output_pathstringnoTOP to capture as the entry's thumbnail.
notesstringnoFree-form notes: what played, what worked.
widthintegernoThumbnail width in pixels for the captured output_path preview. (default: 640)
heightintegernoThumbnail height in pixels for the captured output_path preview. (default: 360)

import_setlist mutates

READ a setlist note (frontmatter tracks: an array of recipe ids or {title, recipe, preset, bpm, notes} objects, OR the newer scenes: an array of {id, cue, recipe, preset, steps, …} scene objects) and build each scene's recipe — CREATING the operators in TouchDesigner under parent_path — to pre-stage a show's visuals. Recipe ids resolve against both built-in and vault recipes; preset-only and cue-only scenes are skipped (recall them live via setlist_runner instead). Use dry_run:true to validate the note without touching TD. Returns the resolved note path and the lists of built vs skipped tracks. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
notestringyesSetlist note: a vault-relative path, or a name resolved against the Setlists/ folder.
parent_pathstringnoCOMP to build each track's recipe inside. (default: /project1)
dry_runbooleannoOnly resolve and report what would be built; do not touch TouchDesigner. (default: false)

bind_vault_text mutates

CREATE a Text DAT in TouchDesigner whose file parameter points at a vault note, so the note's text loads into TD (and, with sync:true, stays live as you edit it in Obsidian) — turning the vault into the text/lyrics source for your visuals. Side effect is node creation in TD plus reading the note file; it does not write to the vault. Wire the DAT into a Text TOP to render it. Returns the DAT path, the resolved note, the absolute file path, and whether sync is on. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
notestringyesVault-relative note to read into TD (lyrics, poetry, any text content).
parent_pathstringyesParent COMP to create the Text DAT inside.
namestringnoName for the Text DAT (defaults to a slug of the note).
syncbooleannoKeep the DAT synced to the file, so edits in Obsidian show up live in TD. (default: true)

generate_from_moodboard mutates

READ a moodboard note (frontmatter technique/palette/colors/speed plus a prose description) and CREATE a matching generative system in TouchDesigner via create_generative_art. Side effect is node creation in TD, not file writes; the palette/mood is passed only as a best-effort color hint. Use this to seed a system from a vault moodboard; call create_generative_art directly to specify the technique and palette inline. Returns the created generative-art network (same result as create_generative_art). Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
notestringyesMoodboard note: a vault path, or a name resolved against the Moodboards/ folder.
parent_pathstringnoCOMP to build the generative system in. (default: /project1)
techniquestringnoOverride the technique (otherwise the note's technique frontmatter, else fractal).

save_component_to_vault mutates

Save a live TouchDesigner COMP as a reusable .tox component file inside the Obsidian vault (at <folder>/<name>.tox) and write a companion markdown note with frontmatter, a description, and load instructions — completing the build→parameterize→script→package-to-library loop. The saved .tox can later be loaded back with manage_component (load action). Requires a configured TDMCP_VAULT_PATH. The target COMP must exist and be a COMP (not a non-COMP operator).

ParameterTypeRequiredDescription
comp_pathstringyesThe COMP to package as a reusable .tox component.
namestringnoComponent name (defaults to the COMP's name). Used for the .tox filename and the note title.
folderstringnoVault subfolder for the .tox + note. (default: Components)
tagsstring[]noTags for the note frontmatter (for browse_vault_library). (default: ``)
descriptionstringnoA short description stored in the note.
preview_topstringnoOutput TOP to thumbnail for the component note (e.g. <comp_path>/out1). A COMP itself can't be captured (the preview endpoint renders TOPs), so the thumbnail is skipped unless you pass an explicit TOP path here.
thumbnailbooleannoCapture a preview PNG next to the component note and embed it. Set false to skip. (default: true)
auto_tagbooleannoWhen true, inspect the COMP's child nodes via the bridge and union the auto_tag_library_asset suggestions into the note frontmatter's tags.

browse_vault_library read-only

Read-only: list the vault's recipes, shaders, presets, components, and setlists with title, tags, and description so the agent can pick from the library without opening individual notes. Filter by category (kinds) and/or a substring query. Returns a flat items array and per-category counts. No TouchDesigner connection required — reads the local vault on disk. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
kindsrecipes | shaders | presets | components | setlists | all[]noWhich library categories to list. 'all' lists every known category. (default: all)
querystringnoCase-insensitive substring filter on note title/tags.

capture_to_vault mutates

Captures a preview still from a TOP and appends it to a dated gallery note in the Obsidian vault, building a visual look-book over time. Each call writes the PNG image under <gallery>/images/ and appends a new section to <gallery>/<note>.md (defaulting to today's date so all daily captures land in one note). Use this to document looks, reference frames, or build a browsable gallery of your session's visuals. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
node_pathstringyesTOP to capture a still from.
gallerystringnoVault subfolder for the gallery note + images. (default: Gallery)
notestringnoGallery note name (defaults to today's date, so captures accumulate into one daily look-book).
captionstringnoCaption for this capture.
widthintegernoCapture width. (default: 640)
heightintegernoCapture height. (default: 360)

export_setlist_to_vault mutates

Serialize the current cues stored on a COMP (manage_cue snapshots, keyed 'tdmcp_cues') into a setlist note in the Obsidian vault, so a live-built show can be round-tripped into the vault library as a git-diffable setlist. The note frontmatter tracks array matches what import_setlist expects — each cue becomes a track with its title and optional bpm, ready for a recipe id to be added by hand. Re-import the note later with import_setlist to rebuild the visuals. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
targetstringyesCOMP whose stored cues/scenes to export as a setlist.
notestringyesSetlist note name to write (e.g. 'Friday Set').
folderstringnoVault subfolder (match import_setlist's expected location). (default: Setlists)
include_tempobooleannoCapture the project's global tempo into the note. (default: true)

generate_library_index mutates

Write one Markdown contact-sheet note of the whole vault library — recipes, shaders, presets, components, and setlists — as a grid of cards, each with its thumbnail (the <stem>.png sibling written by save_recipe_to_vault / save_component_to_vault), title, tags, and a copy-paste load snippet (e.g. apply_recipe id=…). No TouchDesigner connection required: it reads the local vault on disk and writes the index note. Filter by category (kinds) and/or a substring query. Requires a configured TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
kindsrecipes | shaders | presets | components | setlists | all[]noWhich library categories to include. 'all' = every category. (default: all)
outputstringnoVault-relative path of the contact-sheet note to write. (default: Library Index.md)
include_thumbnailsbooleannoEmbed each asset's <stem>.png sibling when present; false = text-only. (default: true)
columnsintegernoCards per row in the contact-sheet grid. (default: 3)
querystringnoCase-insensitive substring filter on title/tags.
overwritebooleannoWhen false, refuse to overwrite an existing index note. (default: true)

auto_tag_library_asset mutates

Inspect a captured library asset (a vault recipe/component note, or a live TD COMP) and emit a suggested tag set, difficulty, and one-line description from a deterministic operator-family heuristic; with write:true, merge the suggestion into the note's frontmatter (preserving '*'-pinned user tags). Use this to backfill consistent tags across a library so browse_vault_library can find by category. Requires a configured TDMCP_VAULT_PATH; target='td_comp' additionally requires the bridge.

ParameterTypeRequiredDescription
targetvault_note | td_compnoWhat to scan. 'vault_note' reads an existing note via the vault adapter; 'td_comp' captures a live COMP through the bridge. (default: vault_note)
note_pathstringnoVault-relative path of the note to tag (e.g. 'Recipes/audio_pulse.md'). Required when target='vault_note'; optional for 'td_comp'.
comp_pathstringnoCOMP path captured when target='td_comp'. (default: /project1)
category_hintrecipe | component | autonoHelps frontmatter shape; 'auto' infers from the note location (Recipes/* vs Components/*). (default: auto)
writebooleannoWhen false, returns the suggestion as a dry-run. When true, merges the suggestion into the note's frontmatter and rewrites it. (default: false)
overwrite_existing_tagsbooleannoWhen false, union with existing frontmatter.tags. When true, replace them (user-pinned tags prefixed '*' are always kept). (default: false)
max_tagsintegernoHard cap on suggested tag count after ranking. (default: 8)
min_confidencenumbernoDrop suggestions whose score falls below this threshold. (default: 0.35)
include_difficultybooleannoEmit a 'beginner'|'intermediate'|'advanced' estimate from node count + complexity. (default: true)
include_descriptionbooleannoGenerate a one-line description; only fills frontmatter.description when it is currently empty (never overwritten). (default: true)

recall_similar_work read-only

Read-only vault search: rank past memory notes by similarity to a new visual goal so the agent can reuse prior recipes, params, and prompts instead of rebuilding from scratch. Scores by query-token overlap with title/intent/prompt/tags/body, with optional tag and op boosts. Returns ranked hits with vault paths, score, matched terms, and an optional body snippet. Offline; requires TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
querystringyesFree-text goal/prompt to compare past memory notes against.
tagsstring[]noOptional tags that should boost matching notes (additive). Lowercased before match. (default: ``)
opsstring[]noOptional operator types you expect to use (e.g. audioAnalysisCHOP). Boosts notes whose 'ops' overlap. (default: ``)
limitintegernoMaximum number of hits to return after sorting. (default: 5)
min_scorenumbernoDrop hits whose normalised score is below this threshold. (default: 0.1)
include_body_snippetbooleannoWhen true, return a ~240-char body excerpt around the best-matching line. (default: true)

style_memory mutates

READ or UPDATE the long-lived Memory/style.md note in the configured Obsidian vault — the artist's standing preferences across sessions (palettes, default energy, banned moves, favourite generators, naming/layout conventions, tags). mode='show' returns a compact one-line context string suitable for feeding an LLM, 'read' returns the full structured note, 'update' field-wise merges a patch (lists union+dedup, scalars overwrite) and bumps the updated date. Touches the vault only — no TouchDesigner side effects. Requires TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
modeshow | read | updatenoshow: short compact context string (cheap to feed an LLM). read: full structured note. update: field-wise merge a patch (palettes/banned/favorites union+dedup; scalars overwrite). (default: show)
patchobjectnoPatch applied when mode='update'. Ignored for show/read.

library_lineage_graph read-only

Read-only, offline tool that scans the vault library (Recipes, Shaders, Presets, Components, Setlists), extracts lineage frontmatter (parent_recipe, source_assets, remix_of, forked_from), and emits a lineage graph. Output as JSON (machine-consumable), Mermaid (paste into docs), or Graphviz DOT. No TouchDesigner connection required.

ParameterTypeRequiredDescription
vault_pathstringnoAbsolute path override; falls back to TDMCP_VAULT_PATH.
formatjson | mermaid | dotnoOutput format. (default: json)
kindsrecipes | shaders | presets | components | setlists | all[]noCategories to scan. 'all' includes every category. (default: all)
cluster_bynone | style_tags | mood | author | difficultynoGrouping for Mermaid subgraph / DOT cluster. (default: style_tags)
include_orphansbooleannoWhen false, exclude nodes with no lineage edges. (default: true)
max_nodesintegernoSafety cap on nodes returned. (default: 500)

morph_pack mutates

Export an existing create_preset_morph container's slots ('looks') to a portable, sha256-verified JSON file in the Obsidian vault (action=pack), or re-hydrate a pack file back into a (newly built if missing) create_preset_morph container (action=unpack). Reuses the create_preset_morph engine — does not invent a new morph topology. Requires TDMCP_VAULT_PATH unless inline 'looks' are supplied on unpack.

ParameterTypeRequiredDescription
actionpack | unpackyespack: read an existing create_preset_morph container and serialise its slots to a vault JSON. unpack: re-hydrate a pack file into a (newly built if missing) create_preset_morph container, optionally rebinding to a new target.
namestringyesPack name. Used as the JSON filename (<folder>/<name>.morphpack.json) and the morph container default name on unpack.
parentstringno(pack) Parent COMP holding the existing morph container (defaults to /project1, matches create_preset_morph). (unpack) Parent COMP where the container is (re)built. (default: /project1)
containerstringno(pack) Name of the existing morph container inside parent to read from. Defaults to name. (unpack) Name to (re)build; defaults to name.
target_pathstringno(unpack) Override the target_path stored in the pack provenance (use when the pack came from a different show file and the target's path is different here). Omit to reuse pack provenance.target_path.
looksobject[]no(unpack, advanced) Inline-supply the slot set instead of reading vaultPath. Mutually exclusive with vaultPath on unpack; ignored on pack.
vault_pathstringnoVault-relative path to the pack file. Defaults to MorphPacks/&lt;name&gt;.morphpack.json. Resolved through Vault.resolve (cannot escape the vault root).
overwritebooleanno(pack) Overwrite an existing pack file at vault_path. (default: false)
mergereplace | unionno(unpack) replace: wipe presets and write only the pack's slots. union: keep existing slots and add/overwrite the pack's slots by id. (default: replace)

learn_conventions mutates

Read a TouchDesigner subtree under scope_path without changing TD, infer naming/colour/topology/parameter conventions, and write the result to the configured Obsidian vault. This is read-only on the TD side but mutates vault files: by default it writes Memory/conventions.md and may merge confident naming/layout signals into Memory/style.md. Set dry_run=true to inspect the extract without disk writes. Use learn_from_my_corpus when the source is already in the vault and load_session_profile when you only need to consume cached preferences. Requires TDMCP_VAULT_PATH and returns sampled conventions plus write flags.

ParameterTypeRequiredDescription
scope_pathstringnoRoot COMP whose subtree is sampled. Defaults to /project1. (default: /project1)
observenaming | colors | topology | params[]noWhich convention families to extract. (default: naming,colors,topology,params)
max_nodesintegernoCap on nodes walked (BFS, depth-unlimited until cap). (default: 500)
min_supportintegernoA pattern must appear at least this many times to be recorded. (default: 3)
dry_runbooleannoIf true, return the extracted conventions but do NOT write the vault note. (default: false)
also_patch_style_memorybooleannoIf a confident naming/layout signal is found, also merge it into Memory/style.md. (default: true)

merge_vaults destructive

Merge the contents of a source Obsidian vault into a target vault (defaulting to TDMCP_VAULT_PATH). Walks Recipes/, Shaders/, Presets/, Components/, Setlists/, and Memory/ folders. sha256-hashes each file pair and resolves conflicts with your chosen strategy: 'theirs' overwrites target, 'ours' keeps target, 'rename' writes a side-by-side copy, 'skip' logs and skips. dryRun=true plans without writing. Note: LF/CRLF differences count as conflicts.

ParameterTypeRequiredDescription
sourceVaultPathstringyesAbsolute path to the source vault.
targetVaultPathstringnoDefaults to the configured TDMCP_VAULT_PATH.
strategytheirs | ours | rename | skipno(default: rename)
kindsrecipes | shaders | presets | components | setlists | memory | …[]no(default: all)
dryRunbooleanno(default: false)

vault_repo_sync mutates

Read-mostly git wrapper for the configured Obsidian vault directory. Lets an artist see what's changed (status), fetch/fast-forward-only pull, push, or read recent history (log). Never auto-resolves conflicts. Never uses --force. Never invokes a shell. Conflicts are surfaced as structured data for manual resolution. Requires TDMCP_VAULT_PATH or the vault_path argument.

ParameterTypeRequiredDescription
vault_pathstringnoAbsolute path to the vault git repo. Defaults to the configured TDMCP_VAULT_PATH.
actionstatus | pull | push | lognostatus: staged/unstaged/untracked + ahead/behind counts. pull: fetch + ff-only merge; reports conflicts but never auto-resolves. push: push current branch to its upstream; reports rejections. log: last N commits on the current branch. (default: status)
remotestringnoRemote name for pull/push. (default: origin)
branchstringnoBranch for pull/push. Defaults to the currently checked-out branch.
limitintegernoMax commits returned by action:'log'. (default: 20)
timeout_msintegernoHard timeout for the git child process. (default: 30000)

variant_pack mutates

Generate N perturbed variants around an anchor parameter look and write the whole pack to the Obsidian vault as a morph_pack-compatible JSON. Probes the target COMP's customPars for slider ranges to clamp + integer-round per param, then perturbs each variant uniformly within ±delta_range × (normMax − normMin). The resulting file is consumed directly by morph_pack (action=unpack). Requires TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
namestringyesPack name. File defaults to MorphPacks/<name>.morphpack.json.
parentstringnoParent COMP recorded into provenance.container_path. (default: /project1)
comp_pathstringnoCOMP whose customPars give slider ranges for clamping. Defaults to target_path else parent.
seed_lookobjectyesAnchor look: { paramName: number }. Names must be numeric custom pars on comp_path.
countintegernoNumber of perturbed variants (1..64). (default: 8)
delta_rangenumbernoPerturbation magnitude as fraction of each param's slider span. (default: 0.15)
seedintegernoRNG seed for repeatable packs.
variant_prefixstringnoSlot id prefix. (default: ``)
include_seedbooleannoIf true, slot v00 is the seed look itself. (default: true)
target_pathstringnoRecorded into provenance.target_path so morph_pack can unpack standalone.
interpolationlinear | cosine | cubicnoRecorded into provenance. (default: linear)
vault_pathstringnoOverride default MorphPacks/<name>.morphpack.json. Resolved via Vault.resolve.
overwritebooleannoAllow replacing an existing pack file. (default: false)

learn_from_my_corpus mutates

Offline companion to learn_conventions: walks the Obsidian vault corpus (Recipes/, Components/, Looks/, Setlists/, Moodboards/) and distils palette, naming, recipe-shape, and param-default preferences into Memory/corpus_style.md (and optionally merges palettes/naming/favorite_generators into Memory/style.md). No TouchDesigner required — pure filesystem read. Requires TDMCP_VAULT_PATH (or pass vault_path).

ParameterTypeRequiredDescription
vault_pathstringnoOptional vault root override; defaults to TDMCP_VAULT_PATH.
observepalette | naming | recipe-style | param-defaults[]noWhich families to extract; subsets keep the run cheap. (default: palette,naming,recipe-style,param-defaults)
min_supportintegernoMinimum frequency for a pattern to be recorded. (default: 3)
top_k_paletteintegernoHow many most-frequent palettes to keep. (default: 5)
dry_runbooleannoIf true, return findings but do NOT write vault notes. (default: false)
also_patch_style_memorybooleannoIf confident, merge palettes/naming/favorite_generators into Memory/style.md. (default: true)

tag_and_search_library mutates

Faceted browse + tag editing over a vault library (Recipes/ + Components/ markdown notes). op='list' enumerates every asset and its tags; op='search' filters by free-text query and/or tags_any/tags_all set logic; op='tag' edits one asset's frontmatter tags (union or replace, always preserving '*'-pinned user tags); op='filter' returns assets matching a license_tier bucket (and optional SPDX license id). Pure vault I/O — no TouchDesigner bridge required. Requires TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
optag | search | list | filternoOperation: 'tag' edits one asset; 'search'/'list' read across the library; 'filter' returns assets matching a license_tier (and optional license SPDX-id). (default: search)
asset_pathstringnoVault-relative path to one asset note (e.g. 'Recipes/feedback_tunnel.md'). Required for op='tag'.
tagsstring[]noop='tag': tags to apply. Tags prefixed '*' are preserved as user-pinned. (default: ``)
replacebooleannoop='tag': when true, replace existing tags (kept '*'-pinned); when false, union. (default: false)
querystringnoop='search': free-text substring matched against id/name/description/tags (case-insensitive).
tags_anystring[]noop='search': match assets that carry at least one of these tags. (default: ``)
tags_allstring[]noop='search': match assets that carry every one of these tags. (default: ``)
foldersstring[]noVault subfolders to scan. Defaults to ['Recipes', 'Components']. (default: Recipes,Components)
limitintegernoMaximum number of matches to return. (default: 50)
license_tierpublic-domain | permissive | copyleft | proprietary | unknownnoop='filter': return only assets whose frontmatter license_tier equals this bucket.
licensestringnoop='filter' (optional refinement): also require frontmatter license to equal this SPDX-id (case-insensitive).

version_library_asset mutates

Apply a SemVer patch/minor/major bump to a vault recipe or component note, recording the change in a sidecar &lt;asset&gt;.versions.json (asset_path + current + history list with version/bump/note/timestamp) and writing the new version into the note's frontmatter version field. Pass read_only:true to inspect the sidecar without bumping. Pure vault I/O — no TouchDesigner bridge required. Requires TDMCP_VAULT_PATH.

ParameterTypeRequiredDescription
asset_pathstringyesVault-relative path to the asset note (e.g. 'Recipes/feedback_tunnel.md' or 'Components/foo.md').
bumppatch | minor | majornoSemVer bump kind. patch=0.0.X, minor=0.X.0 (resets patch), major=X.0.0 (resets minor+patch). (default: patch)
notestringnoShort human note describing what changed in this version.
read_onlybooleannoWhen true, do not bump — just read and return the current version + history (bump/note ignored). (default: false)
licensestringnoSPDX-id (e.g. 'MIT', 'CC-BY-4.0', 'LicenseRef-Custom'). Written to note frontmatter AND mirrored into the sidecar. Omit to leave the existing value untouched.
license_tierpublic-domain | permissive | copyleft | proprietary | unknownnoLicense bucket: public-domain | permissive | copyleft | proprietary | unknown. Mirrors into frontmatter + sidecar.

export_look_tox mutates

Save a COMP as a .tox inside &lt;vault&gt;/&lt;folder&gt;/&lt;slug&gt;.tox and write a sibling Markdown note (id/type=look + name + tags + assets + created + source_path). Defaults folder to Looks. The artist-publishing primitive for portable looks; integrates with browse_vault_library and tag_and_search_library via the note frontmatter. Requires TDMCP_VAULT_PATH and a running TouchDesigner bridge.

ParameterTypeRequiredDescription
source_pathstringyesCOMP path to package (e.g. '/project1/myLook').
namestringnoLook name (defaults to the COMP's name).
folderstringnoVault subfolder under TDMCP_VAULT_PATH. (default: Looks)
tagsstring[]noTags written to the note frontmatter. (default: ``)
descriptionstringnoShort human description for the note body.
assetsstring[]noVault-relative asset paths to record in the metadata sidecar. (default: ``)
licensestringnoSPDX-id of the look's license, e.g. 'MIT' or 'CC-BY-NC-4.0'. Stored in the sidecar note frontmatter.
license_tierpublic-domain | permissive | copyleft | proprietary | unknownnoLicense bucket so search/filter can group by trust level: public-domain | permissive | copyleft | proprietary | unknown.

tutorial_companion_pack mutates

Build a teaching/selling companion for a network: snapshot the COMP's topology, capture preview PNGs of its output TOPs, scaffold an N-step lesson plan in Markdown, and emit a documentary network snapshot. Writes into &lt;vault&gt;/&lt;folder&gt;/&lt;slug&gt;/ as tutorial.md + topology.json + network_snapshot.json + previews/*.png. The snapshot captures nodes + connections by TD path for reference only — it is not a RecipeSchema-compatible installable recipe. Composes existing read-only bridge calls — the artist edits the lesson body afterwards. Requires TDMCP_VAULT_PATH and a running TouchDesigner bridge.

ParameterTypeRequiredDescription
source_compstringyesCOMP whose contents are the subject of the tutorial.
namestringnoPack name; defaults to the COMP's name.
folderstringnoVault subfolder for the pack. (default: Tutorials)
lesson_countintegernoNumber of lesson steps to scaffold (1..20). (default: 5)
preview_widthintegerno(default: 480)
preview_heightintegerno(default: 270)
descriptionstringnoOne-paragraph human description for the lesson.
tagsstring[]noTags written to the pack's frontmatter. (default: ``)

scaffold_recipe_from_network read-only

Inverse of apply_recipe: walk a COMP's child network in TouchDesigner and serialize it back to a draft RecipeSchema JSON (nodes + non-default parameters + connections + cross-references). Validates against RecipeSchema before returning. When write_path is set, writes pretty JSON to that vault-relative path; otherwise returns the recipe in structuredContent. Read-only with respect to TD — no operators are created or modified.

ParameterTypeRequiredDescription
idstringyesRecipe id/slug. Also the default filename stem when write_path is set.
root_pathstringnoCOMP whose direct children are serialized into the recipe. (default: /project1)
namestringnoHuman-friendly title (defaults to the id).
descriptionstringnoRecipeSchema description (defaults to empty). (default: ``)
tagsstring[]noRecipeSchema tags. (default: ``)
difficultybeginner | intermediate | advancednoRecipeSchema difficulty. (default: intermediate)
include_defaultsbooleannoWhen true, keep every CONSTANT-mode parameter (verbose; useful for round-trip debugging). (default: false)
detect_cross_refsbooleannoWhen true, rewrite str params whose value matches a sibling node's name to the bare sibling name (the apply_recipe convention). (default: true)
write_pathstring | nullnoOptional vault-relative path to write the recipe JSON to (e.g. Recipes/myrec.json). When null, the JSON is returned in structuredContent only. (default: null)
overwritebooleannoRefuse to clobber an existing file unless true. (default: false)

AI session memory

Local session-memory helpers that let an agent load persistent taste, convention and recent-work context without re-running the heavier vault-learning tools every turn.

load_session_profile mutates

Reads ~/.tdmcp/session-profile.json (or a custom path) and returns a unified JSON snapshot that an agent should load at the start of every session. The profile caches the most recent outputs of style_memory, recall_similar_work, learn_conventions, and learn_from_my_corpus so the agent has the artist's preferences and past work at hand without running all four tools every time. If no file exists, a default skeleton is created and returned. Pass reset=true to overwrite with fresh defaults. The profile_path field in the returned object is always the resolved path that was read or written.

ParameterTypeRequiredDescription
profile_pathstringnoAbsolute path to the session-profile JSON file. Defaults to ~/.tdmcp/session-profile.json.
resetbooleannoIf true, overwrite the existing profile with the built-in defaults and return them. (default: false)

narrate_set mutates

Persist the running narration of a live VJ/show set so decisions can be recalled afterwards. mode='append' adds a timestamped line (with optional section + cue) to a markdown session log (default ~/.tdmcp/narration-<date>.md); mode='recall' reads the log back (last tail lines). Pair with the auto_vj_director prompt: instead of narrating only in chat, call narrate_set on each major move so the set leaves a diary/setlist trail. Writes a local file (not read-only). Delta vs log_performance, which writes a one-shot network snapshot rather than an append-only decision log.

ParameterTypeRequiredDescription
modeappend | recallnoappend: add a narration line to the running set log. recall: read back the log lines. (default: append)
linestringnoThe narration line to record (required for mode='append'), e.g. "holding through the build → cue 'drop' on the next bar".
sectionstringnoOptional song section/phase this line belongs to, e.g. 'intro', 'drop', 'breakdown'.
cuestringnoOptional cue name being fired/recalled, for cross-reference.
set_namestringnoSession name; picks the log file ~/.tdmcp/narration-<set_name>.md. Defaults to today's date.
log_pathstringnoExplicit path to the narration log file, overriding set_name. Honors TDMCP_NARRATION_PATH otherwise.
tailintegernoFor mode='recall': return at most the last N narration lines. (default: 50)

one_source_five_ways read-only

Turn one source node, asset, or package entry into five deterministic remix briefs: colorway, motion, texture, spatial reframe, and performance cue. Offline/read-only planning tool for agents before mutating TouchDesigner networks.

ParameterTypeRequiredDescription
source_pathstringyesTouchDesigner node path, asset id, file path, or package entry to remix.
source_summarystringnoOptional description of the source's colors, motion, structure, or performance role.
goalstringnoCreative objective for the five variants. (default: generate five distinct performance-ready variations)
intensitysubtle | balanced | extremenoHow far the variants should diverge from the source. (default: balanced)
include_tool_stepsbooleannoInclude suggested tdmcp tool steps for each variant. (default: true)