Layout fix for auto-spawned docked companion ops. Creating a GLSL TOP spawns docked companion DATs — <name>_pixel (your fragment shader), <name>_info, <name>_compute — beneath it. TD only carries docked ops along on a UI drag; every placement tool here sets nodeX/nodeY from Python, which moved the host alone and stranded the companions across the network with a long dock-tether line.
Changes
move_operatorandbuild_networkre-fan docked ops after placing a host. A shared_fan_dockedhelper snaps a host's docked companions into a clean row directly beneath it (_pixel/_vertexshader closest, right under the TOP) — the native spawn layout, re-applied.tidy_dockedtool — repair pass for networks already sprawled. Pass a single op, or a COMP withrecursive=trueto sweep nested COMPs. Returns{tidied, companions}.glsl_top_vec4_uniformtemplate no longer leaves an orphan DAT — it writes the starter shader into the auto-spawned_pixelDAT (pixeldat.eval()) instead of a redundant_shaderDAT, then fans.- Docked-op gotcha shipped in
CLAUDE.mdand the MCP serverinstructions.
Verified live against TouchDesigner 2025.32460.
Install
Download touchdesigner-mcp.mcpb below and double-click it in Claude Desktop, then drag td_component/touchdesigner_mcp.tox into /project1 in TouchDesigner. See the README for setup.
Full changelog: https://github.com/mrinalghosh/touchdesigner-mcp/blob/main/CHANGELOG.md