touchdesigner-mcp
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTouchDesigner Integration (twozero MCP)
TouchDesigner 集成(twozero MCP)
CRITICAL RULES
核心规则
- NEVER guess parameter names. Call for the op type FIRST. Your training data is wrong for TD 2025.32.
td_get_par_info - If fires, STOP. Call
tdAttributeErroron the failing node before continuing.td_get_operator_info - NEVER hardcode absolute paths in script callbacks. Use /
me.parent().scriptOp.parent() - Prefer native MCP tools over td_execute_python. Use ,
td_create_operator,td_set_operator_parsetc. Only fall back totd_get_errorsfor complex multi-step logic.td_execute_python - Call before building. It returns patterns specific to the op type you're working with.
td_get_hints
- 绝对不要猜测参数名称。首先针对目标OP类型调用。针对TD 2025.32版本,你的训练数据已失效。
td_get_par_info - 若触发,立即停止操作。在继续之前,针对出错节点调用
tdAttributeError。td_get_operator_info - 绝对不要在脚本回调中硬编码绝对路径。使用/
me.parent()。scriptOp.parent() - 优先使用原生MCP工具而非。使用
td_execute_python、td_create_operator、td_set_operator_pars等工具。仅在处理复杂多步骤逻辑时才退而使用td_get_errors。td_execute_python - 构建前先调用。它会返回你正在处理的OP类型专属的模式信息。
td_get_hints
Architecture
架构
Hermes Agent -> MCP (Streamable HTTP) -> twozero.tox (port 40404) -> TD Python36 native tools. Free plugin (no payment/license — confirmed April 2026).
Context-aware (knows selected OP, current network).
Hub health check: returns JSON with instance PID, project name, TD version.
GET http://localhost:40404/mcpHermes Agent -> MCP (Streamable HTTP) -> twozero.tox (port 40404) -> TD Python内置36种原生工具。免费插件(无需付费/授权——2026年4月确认)。支持上下文感知(可识别选中的OP、当前网络)。中心健康检查:会返回包含实例PID、项目名称、TD版本的JSON数据。
GET http://localhost:40404/mcpSetup (Automated)
自动化设置
Run the setup script to handle everything:
bash
bash "${HERMES_HOME:-$HOME/.hermes}/skills/creative/touchdesigner-mcp/scripts/setup.sh"The script will:
- Check if TD is running
- Download twozero.tox if not already cached
- Add MCP server to Hermes config (if missing)
twozero_td - Test the MCP connection on port 40404
- Report what manual steps remain (drag .tox into TD, enable MCP toggle)
运行设置脚本即可完成所有操作:
bash
bash "${HERMES_HOME:-$HOME/.hermes}/skills/creative/touchdesigner-mcp/scripts/setup.sh"该脚本会执行以下操作:
- 检查TD是否正在运行
- 若未缓存则下载twozero.tox
- 将MCP服务器添加到Hermes配置(若不存在)
twozero_td - 在40404端口测试MCP连接
- 报告剩余的手动步骤(将.tox拖拽到TD中,启用MCP开关)
Manual steps (one-time, cannot be automated)
手动步骤(一次性操作,无法自动化)
- Drag into the TD network editor → click Install
~/Downloads/twozero.tox - Enable MCP: click twozero icon → Settings → mcp → "auto start MCP" → Yes
- Restart Hermes session to pick up the new MCP server
After setup, verify:
bash
nc -z 127.0.0.1 40404 && echo "twozero MCP: READY"- 将拖拽到TD网络编辑器中 → 点击安装
~/Downloads/twozero.tox - 启用MCP:点击twozero图标 → 设置 → mcp → "自动启动MCP" → 是
- 重启Hermes会话以加载新的MCP服务器
设置完成后,验证连接:
bash
nc -z 127.0.0.1 40404 && echo "twozero MCP: 就绪"Environment Notes
环境说明
- Non-Commercial TD caps resolution at 1280×1280. Use and set width/height explicitly.
outputresolution = 'custom' - Codecs: (preferred on macOS) or
proresas fallback. H.264/H.265/AV1 require a Commercial license.mjpa - Always call before setting params — names vary by TD version (see CRITICAL RULES #1).
td_get_par_info
- 非商业版TD分辨率上限为1280×1280。需设置并明确指定宽高。
outputresolution = 'custom' - 编码格式:优先使用(macOS推荐),备选
prores。H.264/H.265/AV1需要商业版授权。mjpa - 设置参数前务必调用——参数名称会随TD版本变化(见核心规则第1条)。
td_get_par_info
Workflow
工作流程
Step 0: Discover (before building anything)
步骤0:发现(构建前操作)
Call td_get_par_info with op_type for each type you plan to use.
Call td_get_hints with the topic you're building (e.g. "glsl", "audio reactive", "feedback").
Call td_get_focus to see where the user is and what's selected.
Call td_get_network to see what already exists.No temp nodes, no cleanup. This replaces the old discovery dance entirely.
针对你计划使用的每种OP类型调用td_get_par_info。
针对你要构建的主题调用td_get_hints(例如"glsl"、"audio reactive"、"feedback")。
调用td_get_focus查看用户当前位置及选中内容。
调用td_get_network查看已存在的节点结构。无需临时节点,无需清理操作。这完全替代了旧的发现流程。
Step 1: Clean + Build
步骤1:清理 + 构建
IMPORTANT: Split cleanup and creation into SEPARATE MCP calls. Destroying and recreating same-named nodes in one script causes "Invalid OP object" errors. See pitfalls #11b.
td_execute_pythonUse for each node (handles viewport positioning automatically):
td_create_operatortd_create_operator(type="noiseTOP", parent="/project1", name="bg", parameters={"resolutionw": 1280, "resolutionh": 720})
td_create_operator(type="levelTOP", parent="/project1", name="brightness")
td_create_operator(type="nullTOP", parent="/project1", name="out")For bulk creation or wiring, use :
td_execute_pythonpython
undefined重要提示:将清理和创建操作拆分为独立的MCP调用。在单个脚本中销毁并重建同名节点会导致"Invalid OP object"错误。见陷阱#11b。
td_execute_python使用创建每个节点(自动处理视口定位):
td_create_operatortd_create_operator(type="noiseTOP", parent="/project1", name="bg", parameters={"resolutionw": 1280, "resolutionh": 720})
td_create_operator(type="levelTOP", parent="/project1", name="brightness")
td_create_operator(type="nullTOP", parent="/project1", name="out")批量创建或连接节点时,使用:
td_execute_pythonpython
undefinedtd_execute_python script:
td_execute_python脚本:
root = op('/project1')
nodes = []
for name, optype in [('bg', noiseTOP), ('fx', levelTOP), ('out', nullTOP)]:
n = root.create(optype, name)
nodes.append(n.path)
root = op('/project1')
nodes = []
for name, optype in [('bg', noiseTOP), ('fx', levelTOP), ('out', nullTOP)]:
n = root.create(optype, name)
nodes.append(n.path)
Wire chain
链式连接
for i in range(len(nodes)-1):
op(nodes[i]).outputConnectors[0].connect(op(nodes[i+1]).inputConnectors[0])
result = {'created': nodes}
undefinedfor i in range(len(nodes)-1):
op(nodes[i]).outputConnectors[0].connect(op(nodes[i+1]).inputConnectors[0])
result = {'created': nodes}
undefinedStep 2: Set Parameters
步骤2:设置参数
Prefer the native tool (validates params, won't crash):
td_set_operator_pars(path="/project1/bg", parameters={"roughness": 0.6, "monochrome": true})For expressions or modes, use :
td_execute_pythonpython
op('/project1/time_driver').par.colorr.expr = "absTime.seconds % 1000.0"优先使用原生工具(会验证参数,不会导致崩溃):
td_set_operator_pars(path="/project1/bg", parameters={"roughness": 0.6, "monochrome": true})设置表达式或模式时,使用:
td_execute_pythonpython
op('/project1/time_driver').par.colorr.expr = "absTime.seconds % 1000.0"Step 3: Wire
步骤3:连接节点
Use — no native wire tool exists:
td_execute_pythonpython
op('/project1/bg').outputConnectors[0].connect(op('/project1/fx').inputConnectors[0])使用——目前无原生连接工具:
td_execute_pythonpython
op('/project1/bg').outputConnectors[0].connect(op('/project1/fx').inputConnectors[0])Step 4: Verify
步骤4:验证
td_get_errors(path="/project1", recursive=true)
td_get_perf()
td_get_operator_info(path="/project1/out", detail="full")td_get_errors(path="/project1", recursive=true)
td_get_perf()
td_get_operator_info(path="/project1/out", detail="full")Step 5: Display / Capture
步骤5:显示 / 捕获
td_get_screenshot(path="/project1/out")Or open a window via script:
python
win = op('/project1').create(windowCOMP, 'display')
win.par.winop = op('/project1/out').path
win.par.winw = 1280; win.par.winh = 720
win.par.winopen.pulse()td_get_screenshot(path="/project1/out")或通过脚本打开窗口:
python
win = op('/project1').create(windowCOMP, 'display')
win.par.winop = op('/project1/out').path
win.par.winw = 1280; win.par.winh = 720
win.par.winopen.pulse()MCP Tool Quick Reference
MCP工具速查
Core (use these most):
| Tool | What |
|---|---|
| Run arbitrary Python in TD. Full API access. |
| Create node with params + auto-positioning |
| Set params safely (validates, won't crash) |
| Inspect one node: connections, params, errors |
| Inspect multiple nodes in one call |
| See network structure at a path |
| Find errors/warnings recursively |
| Get param names for an OP type (replaces discovery) |
| Get patterns/tips before building |
| What network is open, what's selected |
Read/Write:
| Tool | What |
|---|---|
| Read DAT text content |
| Write/patch DAT content |
| Read CHOP channel values |
| Read TD console output |
Visual:
| Tool | What |
|---|---|
| Capture one OP viewer to file |
| Capture multiple OPs at once |
| Capture actual screen via TD |
| Jump network editor to an OP |
Search:
| Tool | What |
|---|---|
| Find ops by name/type across project |
| Search code, expressions, string params |
System:
| Tool | What |
|---|---|
| Performance profiling (FPS, slow ops) |
| List all running TD instances |
| In-depth docs on a TD topic |
| Read/write per-COMP markdown docs |
| Reload extension after code edit |
| Clear console before debug session |
Input Automation:
| Tool | What |
|---|---|
| Send mouse/keyboard to TD |
| Poll input queue status |
| Stop input automation |
| Get screen coords of a node |
| Click a point in a screenshot |
| Convert screenshot pixel to absolute screen coords |
The table above covers the 32 tools used in typical creative workflows. The remaining 4 tools (, , , ) are admin/dev-mode utilities — see for the full 36-tool reference with complete parameter schemas.
td_project_quittd_test_sessiontd_dev_logtd_clear_dev_logreferences/mcp-tools.md核心工具(最常用):
| 工具 | 功能 |
|---|---|
| 在TD中运行任意Python脚本,支持完整API访问。 |
| 创建带参数的节点,并自动定位 |
| 安全设置参数(会验证,不会导致崩溃) |
| 检查单个节点:连接关系、参数、错误信息 |
| 一次调用检查多个节点 |
| 查看指定路径下的网络结构 |
| 递归查找错误/警告信息 |
| 获取OP类型的参数名称(替代发现流程) |
| 构建前获取模式/技巧提示 |
| 查看当前打开的网络及选中内容 |
读写工具:
| 工具 | 功能 |
|---|---|
| 读取DAT文本内容 |
| 写入/更新DAT内容 |
| 读取CHOP通道值 |
| 读取TD控制台输出 |
视觉工具:
| 工具 | 功能 |
|---|---|
| 将单个OP视图捕获到文件 |
| 同时捕获多个OP视图 |
| 通过TD捕获实际屏幕 |
| 跳转到网络编辑器中的指定OP |
搜索工具:
| 工具 | 功能 |
|---|---|
| 在项目中按名称/类型查找OP |
| 搜索代码、表达式、字符串参数 |
系统工具:
| 工具 | 功能 |
|---|---|
| 性能分析(FPS、运行缓慢的OP) |
| 列出所有运行中的TD实例 |
| 获取TD主题的详细文档 |
| 读写每个COMP的markdown文档 |
| 代码编辑后重新加载扩展 |
| 调试会话前清空控制台 |
输入自动化工具:
| 工具 | 功能 |
|---|---|
| 向TD发送鼠标/键盘输入 |
| 查询输入队列状态 |
| 停止输入自动化 |
| 获取节点的屏幕坐标 |
| 点击截图中的指定点 |
| 将截图像素转换为绝对屏幕坐标 |
上表涵盖了典型创意工作流中使用的32种工具。剩余4种工具(、、、)为管理员/开发模式工具——完整的36种工具参考及参数 schema 请查看。
td_project_quittd_test_sessiontd_dev_logtd_clear_dev_logreferences/mcp-tools.mdKey Implementation Rules
关键实现规则
GLSL time: No in GLSL TOP. Use the Values page:
uTDCurrentTimepython
undefinedGLSL时间变量: GLSL TOP中没有。使用值页面:
uTDCurrentTimepython
undefinedCall td_get_par_info(op_type="glslTOP") first to confirm param names
首先调用td_get_par_info(op_type="glslTOP")确认参数名称
td_set_operator_pars(path="/project1/shader", parameters={"value0name": "uTime"})
td_set_operator_pars(path="/project1/shader", parameters={"value0name": "uTime"})
Then set expression via script:
然后通过脚本设置表达式:
op('/project1/shader').par.value0.expr = "absTime.seconds"
op('/project1/shader').par.value0.expr = "absTime.seconds"
In GLSL: uniform float uTime;
GLSL中使用: uniform float uTime;
Fallback: Constant TOP in `rgba32float` format (8-bit clamps to 0-1, freezing the shader).
**Feedback TOP:** Use `top` parameter reference, not direct input wire. "Not enough sources" resolves after first cook. "Cook dependency loop" warning is expected.
**Resolution:** Non-Commercial caps at 1280×1280. Use `outputresolution = 'custom'`.
**Large shaders:** Write GLSL to `/tmp/file.glsl`, then use `td_write_dat` or `td_execute_python` to load.
**Vertex/Point access (TD 2025.32):** `point.P[0]`, `point.P[1]`, `point.P[2]` — NOT `.x`, `.y`, `.z`.
**Extensions:** `ext0object` format is `"op('./datName').module.ClassName(me)"` in CONSTANT mode. After editing extension code with `td_write_dat`, call `td_reinit_extension`.
**Script callbacks:** ALWAYS use relative paths via `me.parent()` / `scriptOp.parent()`.
**Cleaning nodes:** Always `list(root.children)` before iterating + `child.valid` check.
备选方案:使用`rgba32float`格式的Constant TOP(8位格式会限制在0-1范围,导致 shader 冻结)。
**Feedback TOP:** 使用`top`参数引用,而非直接输入连接。首次计算后会解决“源不足”问题。“Cook dependency loop”警告属于预期情况。
**分辨率:** 非商业版上限为1280×1280。需设置`outputresolution = 'custom'`。
**大型shader:** 将GLSL代码写入`/tmp/file.glsl`,然后使用`td_write_dat`或`td_execute_python`加载。
**顶点/点访问(TD 2025.32):** 使用`point.P[0]`、`point.P[1]`、`point.P[2]`——而非`.x`、`.y`、`.z`。
**扩展:** `ext0object`格式在CONSTANT模式下为`"op('./datName').module.ClassName(me)"`。使用`td_write_dat`编辑扩展代码后,调用`td_reinit_extension`。
**脚本回调:** 务必通过`me.parent()` / `scriptOp.parent()`使用相对路径。
**清理节点:** 迭代前务必先调用`list(root.children)`并检查`child.valid`。Recording / Exporting Video
录制 / 导出视频
python
undefinedpython
undefinedvia td_execute_python:
通过td_execute_python实现:
root = op('/project1')
rec = root.create(moviefileoutTOP, 'recorder')
op('/project1/out').outputConnectors[0].connect(rec.inputConnectors[0])
rec.par.type = 'movie'
rec.par.file = '/tmp/output.mov'
rec.par.videocodec = 'prores' # Apple ProRes — NOT license-restricted on macOS
rec.par.record = True # start
root = op('/project1')
rec = root.create(moviefileoutTOP, 'recorder')
op('/project1/out').outputConnectors[0].connect(rec.inputConnectors[0])
rec.par.type = 'movie'
rec.par.file = '/tmp/output.mov'
rec.par.videocodec = 'prores' # Apple ProRes —— macOS下无需授权
rec.par.record = True # 开始录制
rec.par.record = False # stop (call separately later)
rec.par.record = False # 停止录制(稍后单独调用)
H.264/H.265/AV1 need Commercial license. Use `prores` on macOS or `mjpa` as fallback.
Extract frames: `ffmpeg -i /tmp/output.mov -vframes 120 /tmp/frames/frame_%06d.png`
**TOP.save() is useless for animation** — captures same GPU texture every time. Always use MovieFileOut.
H.264/H.265/AV1需要商业版授权。macOS下使用`prores`,备选`mjpa`。
提取帧:`ffmpeg -i /tmp/output.mov -vframes 120 /tmp/frames/frame_%06d.png`
**TOP.save()对动画无用**——每次都会捕获相同的GPU纹理。务必使用MovieFileOut。Before Recording: Checklist
录制前检查清单
- Verify FPS > 0 via . If FPS=0 the recording will be empty. See pitfalls #38-39.
td_get_perf - Verify shader output is not black via . Black output = shader error or missing input. See pitfalls #8, #40.
td_get_screenshot - If recording with audio: cue audio to start first, then delay recording by 3 frames. See pitfalls #19.
- Set output path before starting record — setting both in the same script can race.
- 通过验证FPS > 0。若FPS=0,录制内容会为空。见陷阱#38-39。
td_get_perf - 通过验证shader输出非黑色。黑色输出表示shader错误或缺少输入。见陷阱#8、#40。
td_get_screenshot - 若带音频录制: 先启动音频,再延迟3帧开始录制。见陷阱#19。
- 开始录制前设置输出路径——在同一脚本中同时设置可能会导致竞争条件。
Audio-Reactive GLSL (Proven Recipe)
音频响应式GLSL(验证有效的方案)
Correct signal chain (tested April 2026)
正确的信号链(2026年4月测试通过)
AudioFileIn CHOP (playmode=sequential)
→ AudioSpectrum CHOP (FFT=512, outputmenu=setmanually, outlength=256, timeslice=ON)
→ Math CHOP (gain=10)
→ CHOP to TOP (dataformat=r, layout=rowscropped)
→ GLSL TOP input 1 (spectrum texture, 256x2)
Constant TOP (rgba32float, time) → GLSL TOP input 0
GLSL TOP → Null TOP → MovieFileOutAudioFileIn CHOP (playmode=sequential)
→ AudioSpectrum CHOP (FFT=512, outputmenu=setmanually, outlength=256, timeslice=ON)
→ Math CHOP (gain=10)
→ CHOP to TOP (dataformat=r, layout=rowscropped)
→ GLSL TOP input 1 (频谱纹理,256x2)
Constant TOP (rgba32float, time) → GLSL TOP input 0
GLSL TOP → Null TOP → MovieFileOutCritical audio-reactive rules (empirically verified)
音频响应式核心规则(经验证)
- TimeSlice must stay ON for AudioSpectrum. OFF = processes entire audio file → 24000+ samples → CHOP to TOP overflow.
- Set Output Length manually to 256 via and
outputmenu='setmanually'. Default outputs 22050 samples.outlength=256 - DO NOT use Lag CHOP for spectrum smoothing. Lag CHOP operates in timeslice mode and expands 256 samples to 2400+, averaging all values to near-zero (~1e-06). The shader receives no usable data. This was the #1 audio sync failure in testing.
- DO NOT use Filter CHOP either — same timeslice expansion problem with spectrum data.
- Smoothing belongs in the GLSL shader if needed, via temporal lerp with a feedback texture: . This gives frame-perfect sync with zero pipeline latency.
mix(prevValue, newValue, 0.3) - CHOP to TOP dataformat = 'r', layout = 'rowscropped'. Spectrum output is 256x2 (stereo). Sample at y=0.25 for first channel.
- Math gain = 10 (not 5). Raw spectrum values are ~0.19 in bass range. Gain of 10 gives usable ~5.0 for the shader.
- No Resample CHOP needed. Control output size via AudioSpectrum's param directly.
outlength
- AudioSpectrum必须保持TimeSlice开启。关闭后会处理整个音频文件→24000+采样→CHOP to TOP溢出。
- 手动设置输出长度为256,通过和
outputmenu='setmanually'。默认输出22050个采样。outlength=256 - 不要使用Lag CHOP进行频谱平滑。Lag CHOP在时间切片模式下会将256个采样扩展到2400+,所有值平均后接近零(~1e-06)。shader无法获取可用数据。这是测试中音频同步失败的头号原因。
- 也不要使用Filter CHOP——频谱数据会遇到相同的时间切片扩展问题。
- 平滑处理应在GLSL shader中进行(若需要),通过反馈纹理的时间插值:。这样可以实现帧完美同步,且无管线延迟。
mix(prevValue, newValue, 0.3) - CHOP to TOP的dataformat = 'r',layout = 'rowscropped'。频谱输出为256x2(立体声)。在y=0.25处采样第一个通道。
- Math增益设为10(而非5)。原始频谱值在低音范围约为0.19。增益设为10可得到shader可用的~5.0值。
- 无需Resample CHOP。直接通过AudioSpectrum的参数控制输出大小。
outlength
GLSL spectrum sampling
GLSL频谱采样
glsl
// Input 0 = time (1x1 rgba32float), Input 1 = spectrum (256x2)
float iTime = texture(sTD2DInputs[0], vec2(0.5)).r;
// Sample multiple points per band and average for stability:
// NOTE: y=0.25 for first channel (stereo texture is 256x2, first row center is 0.25)
float bass = (texture(sTD2DInputs[1], vec2(0.02, 0.25)).r +
texture(sTD2DInputs[1], vec2(0.05, 0.25)).r) / 2.0;
float mid = (texture(sTD2DInputs[1], vec2(0.2, 0.25)).r +
texture(sTD2DInputs[1], vec2(0.35, 0.25)).r) / 2.0;
float hi = (texture(sTD2DInputs[1], vec2(0.6, 0.25)).r +
texture(sTD2DInputs[1], vec2(0.8, 0.25)).r) / 2.0;See for complete build scripts + shader code.
references/network-patterns.mdglsl
// Input 0 = time (1x1 rgba32float), Input 1 = spectrum (256x2)
float iTime = texture(sTD2DInputs[0], vec2(0.5)).r;
// 每个频段采样多个点并取平均值以保证稳定性:
// 注意: y=0.25对应第一个通道(立体声纹理为256x2,第一行中心为0.25)
float bass = (texture(sTD2DInputs[1], vec2(0.02, 0.25)).r +
texture(sTD2DInputs[1], vec2(0.05, 0.25)).r) / 2.0;
float mid = (texture(sTD2DInputs[1], vec2(0.2, 0.25)).r +
texture(sTD2DInputs[1], vec2(0.35, 0.25)).r) / 2.0;
float hi = (texture(sTD2DInputs[1], vec2(0.6, 0.25)).r +
texture(sTD2DInputs[1], vec2(0.8, 0.25)).r) / 2.0;完整构建脚本及shader代码请查看。
references/network-patterns.mdOperator Quick Reference
Operator速查
| Family | Color | Python class / MCP type | Suffix |
|---|---|---|---|
| TOP | Purple | noiseTOP, glslTOP, compositeTOP, levelTop, blurTOP, textTOP, nullTOP | TOP |
| CHOP | Green | audiofileinCHOP, audiospectrumCHOP, mathCHOP, lfoCHOP, constantCHOP | CHOP |
| SOP | Blue | gridSOP, sphereSOP, transformSOP, noiseSOP | SOP |
| DAT | White | textDAT, tableDAT, scriptDAT, webserverDAT | DAT |
| MAT | Yellow | phongMAT, pbrMAT, glslMAT, constMAT | MAT |
| COMP | Gray | geometryCOMP, containerCOMP, cameraCOMP, lightCOMP, windowCOMP | COMP |
| 家族 | 颜色 | Python类 / MCP类型 | 后缀 |
|---|---|---|---|
| TOP | 紫色 | noiseTOP, glslTOP, compositeTOP, levelTop, blurTOP, textTOP, nullTOP | TOP |
| CHOP | 绿色 | audiofileinCHOP, audiospectrumCHOP, mathCHOP, lfoCHOP, constantCHOP | CHOP |
| SOP | 蓝色 | gridSOP, sphereSOP, transformSOP, noiseSOP | SOP |
| DAT | 白色 | textDAT, tableDAT, scriptDAT, webserverDAT | DAT |
| MAT | 黄色 | phongMAT, pbrMAT, glslMAT, constMAT | MAT |
| COMP | 灰色 | geometryCOMP, containerCOMP, cameraCOMP, lightCOMP, windowCOMP | COMP |
Security Notes
安全说明
- MCP runs on localhost only (port 40404). No authentication — any local process can send commands.
- has unrestricted access to the TD Python environment and filesystem as the TD process user.
td_execute_python - downloads twozero.tox from the official 404zero.com URL. Verify the download if concerned.
setup.sh - The skill never sends data outside localhost. All MCP communication is local.
- MCP仅在本地主机运行(端口40404)。无身份验证——任何本地进程均可发送命令。
- 拥有对TD Python环境和文件系统的无限制访问权限,权限与TD进程用户一致。
td_execute_python - 从官方404zero.com URL下载twozero.tox。若有顾虑,请验证下载文件。
setup.sh - 本技能绝不会向本地主机外发送数据。所有MCP通信均为本地通信。
References
参考文档
| File | What |
|---|---|
| Hard-won lessons from real sessions |
| All operator families with params and use cases |
| Recipes: audio-reactive, generative, GLSL, instancing |
| Full twozero MCP tool parameter schemas |
| TD Python: op(), scripting, extensions |
| Connection diagnostics, debugging |
| GLSL uniforms, built-in functions, shader templates |
| Post-FX: bloom, CRT, chromatic aberration, feedback glow |
| HUD layout patterns, panel grids, BSP-style layouts |
| Wireframe rendering, feedback TOP setup |
| Geometry COMP: instancing, POP vs SOP, morphing |
| Audio band extraction, beat detection, envelope following |
| LFOs, timers, keyframes, easing, expression-driven motion |
| MIDI/OSC controllers, TouchOSC, multi-machine sync |
| POPs and legacy particleSOP — emission, forces, collisions |
| Multi-window output, corner pin, mesh warp, edge blending |
| HTTP, WebSocket, MQTT, Serial, TCP, webserverDAT |
| Custom params, panel COMPs, button/slider/field, panelExecuteDAT |
| replicatorCOMP — data-driven cloning, layouts, callbacks |
| Execute DAT family — chop/dat/parameter/panel/op/executeDAT |
| Lighting rigs, shadows, IBL/cubemaps, multi-camera, PBR |
| Automated setup script |
You're not writing code. You're conducting light.
| 文件 | 内容 |
|---|---|
| 实际会话中积累的经验教训 |
| 所有Operator家族的参数及使用场景 |
| 方案示例:音频响应式、生成式、GLSL、实例化 |
| twozero MCP工具的完整参数schema |
| TD Python:op()、脚本编写、扩展 |
| 连接诊断、调试方法 |
| GLSL uniforms、内置函数、shader模板 |
| 后期特效: bloom、CRT、色差、反馈发光 |
| HUD布局模式、面板网格、BSP风格布局 |
| 线框渲染、Feedback TOP设置 |
| Geometry COMP:实例化、POP vs SOP、变形 |
| 音频频段提取、节拍检测、包络跟随 |
| LFO、计时器、关键帧、缓动、表达式驱动动画 |
| MIDI/OSC控制器、TouchOSC、多机同步 |
| POPs及传统particleSOP——发射、力场、碰撞 |
| 多窗口输出、边角定位、网格扭曲、边缘融合 |
| HTTP、WebSocket、MQTT、串口、TCP、webserverDAT |
| 自定义参数、panel COMP、按钮/滑块/输入框、panelExecuteDAT |
| replicatorCOMP——数据驱动克隆、布局、回调 |
| Execute DAT家族——chop/dat/parameter/panel/op/executeDAT |
| 灯光系统、阴影、IBL/立方体贴图、多相机、PBR |
| 自动化设置脚本 |
你不是在写代码,你是在操控光影。