touchdesigner-mcp

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

TouchDesigner Integration (twozero MCP)

TouchDesigner 集成(twozero MCP)

CRITICAL RULES

核心规则

  1. NEVER guess parameter names. Call
    td_get_par_info
    for the op type FIRST. Your training data is wrong for TD 2025.32.
  2. If
    tdAttributeError
    fires, STOP.
    Call
    td_get_operator_info
    on the failing node before continuing.
  3. NEVER hardcode absolute paths in script callbacks. Use
    me.parent()
    /
    scriptOp.parent()
    .
  4. Prefer native MCP tools over td_execute_python. Use
    td_create_operator
    ,
    td_set_operator_pars
    ,
    td_get_errors
    etc. Only fall back to
    td_execute_python
    for complex multi-step logic.
  5. Call
    td_get_hints
    before building.
    It returns patterns specific to the op type you're working with.
  1. 绝对不要猜测参数名称。首先针对目标OP类型调用
    td_get_par_info
    。针对TD 2025.32版本,你的训练数据已失效。
  2. 若触发
    tdAttributeError
    ,立即停止操作
    。在继续之前,针对出错节点调用
    td_get_operator_info
  3. 绝对不要在脚本回调中硬编码绝对路径。使用
    me.parent()
    /
    scriptOp.parent()
  4. 优先使用原生MCP工具而非
    td_execute_python
    。使用
    td_create_operator
    td_set_operator_pars
    td_get_errors
    等工具。仅在处理复杂多步骤逻辑时才退而使用
    td_execute_python
  5. 构建前先调用
    td_get_hints
    。它会返回你正在处理的OP类型专属的模式信息。

Architecture

架构

Hermes Agent -> MCP (Streamable HTTP) -> twozero.tox (port 40404) -> TD Python
36 native tools. Free plugin (no payment/license — confirmed April 2026). Context-aware (knows selected OP, current network). Hub health check:
GET http://localhost:40404/mcp
returns JSON with instance PID, project name, TD version.
Hermes Agent -> MCP (Streamable HTTP) -> twozero.tox (port 40404) -> TD Python
内置36种原生工具。免费插件(无需付费/授权——2026年4月确认)。支持上下文感知(可识别选中的OP、当前网络)。中心健康检查:
GET http://localhost:40404/mcp
会返回包含实例PID、项目名称、TD版本的JSON数据。

Setup (Automated)

自动化设置

Run the setup script to handle everything:
bash
bash "${HERMES_HOME:-$HOME/.hermes}/skills/creative/touchdesigner-mcp/scripts/setup.sh"
The script will:
  1. Check if TD is running
  2. Download twozero.tox if not already cached
  3. Add
    twozero_td
    MCP server to Hermes config (if missing)
  4. Test the MCP connection on port 40404
  5. 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"
该脚本会执行以下操作:
  1. 检查TD是否正在运行
  2. 若未缓存则下载twozero.tox
  3. twozero_td
    MCP服务器添加到Hermes配置(若不存在)
  4. 在40404端口测试MCP连接
  5. 报告剩余的手动步骤(将.tox拖拽到TD中,启用MCP开关)

Manual steps (one-time, cannot be automated)

手动步骤(一次性操作,无法自动化)

  1. Drag
    ~/Downloads/twozero.tox
    into the TD network editor
    → click Install
  2. Enable MCP: click twozero icon → Settings → mcp → "auto start MCP" → Yes
  3. 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"
  1. ~/Downloads/twozero.tox
    拖拽到TD网络编辑器中
    → 点击安装
  2. 启用MCP:点击twozero图标 → 设置 → mcp → "自动启动MCP" → 是
  3. 重启Hermes会话以加载新的MCP服务器
设置完成后,验证连接:
bash
nc -z 127.0.0.1 40404 && echo "twozero MCP: 就绪"

Environment Notes

环境说明

  • Non-Commercial TD caps resolution at 1280×1280. Use
    outputresolution = 'custom'
    and set width/height explicitly.
  • Codecs:
    prores
    (preferred on macOS) or
    mjpa
    as fallback. H.264/H.265/AV1 require a Commercial license.
  • Always call
    td_get_par_info
    before setting params — names vary by TD version (see CRITICAL RULES #1).
  • 非商业版TD分辨率上限为1280×1280。需设置
    outputresolution = 'custom'
    并明确指定宽高。
  • 编码格式:优先使用
    prores
    (macOS推荐),备选
    mjpa
    。H.264/H.265/AV1需要商业版授权。
  • 设置参数前务必调用
    td_get_par_info
    ——参数名称会随TD版本变化(见核心规则第1条)。

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
td_execute_python
script causes "Invalid OP object" errors. See pitfalls #11b.
Use
td_create_operator
for each node (handles viewport positioning automatically):
td_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_python
:
python
undefined
重要提示:将清理和创建操作拆分为独立的MCP调用。在单个
td_execute_python
脚本中销毁并重建同名节点会导致"Invalid OP object"错误。见陷阱#11b。
使用
td_create_operator
创建每个节点(自动处理视口定位):
td_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_python
python
undefined

td_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}
undefined
for i in range(len(nodes)-1): op(nodes[i]).outputConnectors[0].connect(op(nodes[i+1]).inputConnectors[0]) result = {'created': nodes}
undefined

Step 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_python
:
python
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_python
python
op('/project1/time_driver').par.colorr.expr = "absTime.seconds % 1000.0"

Step 3: Wire

步骤3:连接节点

Use
td_execute_python
— no native wire tool exists:
python
op('/project1/bg').outputConnectors[0].connect(op('/project1/fx').inputConnectors[0])
使用
td_execute_python
——目前无原生连接工具:
python
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):
ToolWhat
td_execute_python
Run arbitrary Python in TD. Full API access.
td_create_operator
Create node with params + auto-positioning
td_set_operator_pars
Set params safely (validates, won't crash)
td_get_operator_info
Inspect one node: connections, params, errors
td_get_operators_info
Inspect multiple nodes in one call
td_get_network
See network structure at a path
td_get_errors
Find errors/warnings recursively
td_get_par_info
Get param names for an OP type (replaces discovery)
td_get_hints
Get patterns/tips before building
td_get_focus
What network is open, what's selected
Read/Write:
ToolWhat
td_read_dat
Read DAT text content
td_write_dat
Write/patch DAT content
td_read_chop
Read CHOP channel values
td_read_textport
Read TD console output
Visual:
ToolWhat
td_get_screenshot
Capture one OP viewer to file
td_get_screenshots
Capture multiple OPs at once
td_get_screen_screenshot
Capture actual screen via TD
td_navigate_to
Jump network editor to an OP
Search:
ToolWhat
td_find_op
Find ops by name/type across project
td_search
Search code, expressions, string params
System:
ToolWhat
td_get_perf
Performance profiling (FPS, slow ops)
td_list_instances
List all running TD instances
td_get_docs
In-depth docs on a TD topic
td_agents_md
Read/write per-COMP markdown docs
td_reinit_extension
Reload extension after code edit
td_clear_textport
Clear console before debug session
Input Automation:
ToolWhat
td_input_execute
Send mouse/keyboard to TD
td_input_status
Poll input queue status
td_input_clear
Stop input automation
td_op_screen_rect
Get screen coords of a node
td_click_screen_point
Click a point in a screenshot
td_screen_point_to_global
Convert screenshot pixel to absolute screen coords
The table above covers the 32 tools used in typical creative workflows. The remaining 4 tools (
td_project_quit
,
td_test_session
,
td_dev_log
,
td_clear_dev_log
) are admin/dev-mode utilities — see
references/mcp-tools.md
for the full 36-tool reference with complete parameter schemas.
核心工具(最常用):
工具功能
td_execute_python
在TD中运行任意Python脚本,支持完整API访问。
td_create_operator
创建带参数的节点,并自动定位
td_set_operator_pars
安全设置参数(会验证,不会导致崩溃)
td_get_operator_info
检查单个节点:连接关系、参数、错误信息
td_get_operators_info
一次调用检查多个节点
td_get_network
查看指定路径下的网络结构
td_get_errors
递归查找错误/警告信息
td_get_par_info
获取OP类型的参数名称(替代发现流程)
td_get_hints
构建前获取模式/技巧提示
td_get_focus
查看当前打开的网络及选中内容
读写工具:
工具功能
td_read_dat
读取DAT文本内容
td_write_dat
写入/更新DAT内容
td_read_chop
读取CHOP通道值
td_read_textport
读取TD控制台输出
视觉工具:
工具功能
td_get_screenshot
将单个OP视图捕获到文件
td_get_screenshots
同时捕获多个OP视图
td_get_screen_screenshot
通过TD捕获实际屏幕
td_navigate_to
跳转到网络编辑器中的指定OP
搜索工具:
工具功能
td_find_op
在项目中按名称/类型查找OP
td_search
搜索代码、表达式、字符串参数
系统工具:
工具功能
td_get_perf
性能分析(FPS、运行缓慢的OP)
td_list_instances
列出所有运行中的TD实例
td_get_docs
获取TD主题的详细文档
td_agents_md
读写每个COMP的markdown文档
td_reinit_extension
代码编辑后重新加载扩展
td_clear_textport
调试会话前清空控制台
输入自动化工具:
工具功能
td_input_execute
向TD发送鼠标/键盘输入
td_input_status
查询输入队列状态
td_input_clear
停止输入自动化
td_op_screen_rect
获取节点的屏幕坐标
td_click_screen_point
点击截图中的指定点
td_screen_point_to_global
将截图像素转换为绝对屏幕坐标
上表涵盖了典型创意工作流中使用的32种工具。剩余4种工具(
td_project_quit
td_test_session
td_dev_log
td_clear_dev_log
)为管理员/开发模式工具——完整的36种工具参考及参数 schema 请查看
references/mcp-tools.md

Key Implementation Rules

关键实现规则

GLSL time: No
uTDCurrentTime
in GLSL TOP. Use the Values page:
python
undefined
GLSL时间变量: GLSL TOP中没有
uTDCurrentTime
。使用值页面:
python
undefined

Call 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
undefined
python
undefined

via 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

录制前检查清单

  1. Verify FPS > 0 via
    td_get_perf
    . If FPS=0 the recording will be empty. See pitfalls #38-39.
  2. Verify shader output is not black via
    td_get_screenshot
    . Black output = shader error or missing input. See pitfalls #8, #40.
  3. If recording with audio: cue audio to start first, then delay recording by 3 frames. See pitfalls #19.
  4. Set output path before starting record — setting both in the same script can race.
  1. 通过
    td_get_perf
    验证FPS > 0
    。若FPS=0,录制内容会为空。见陷阱#38-39。
  2. 通过
    td_get_screenshot
    验证shader输出非黑色
    。黑色输出表示shader错误或缺少输入。见陷阱#8、#40。
  3. 若带音频录制: 先启动音频,再延迟3帧开始录制。见陷阱#19。
  4. 开始录制前设置输出路径——在同一脚本中同时设置可能会导致竞争条件。

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 → MovieFileOut
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 (频谱纹理,256x2)

Constant TOP (rgba32float, time) → GLSL TOP input 0
GLSL TOP → Null TOP → MovieFileOut

Critical audio-reactive rules (empirically verified)

音频响应式核心规则(经验证)

  1. TimeSlice must stay ON for AudioSpectrum. OFF = processes entire audio file → 24000+ samples → CHOP to TOP overflow.
  2. Set Output Length manually to 256 via
    outputmenu='setmanually'
    and
    outlength=256
    . Default outputs 22050 samples.
  3. 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.
  4. DO NOT use Filter CHOP either — same timeslice expansion problem with spectrum data.
  5. Smoothing belongs in the GLSL shader if needed, via temporal lerp with a feedback texture:
    mix(prevValue, newValue, 0.3)
    . This gives frame-perfect sync with zero pipeline latency.
  6. CHOP to TOP dataformat = 'r', layout = 'rowscropped'. Spectrum output is 256x2 (stereo). Sample at y=0.25 for first channel.
  7. Math gain = 10 (not 5). Raw spectrum values are ~0.19 in bass range. Gain of 10 gives usable ~5.0 for the shader.
  8. No Resample CHOP needed. Control output size via AudioSpectrum's
    outlength
    param directly.
  1. AudioSpectrum必须保持TimeSlice开启。关闭后会处理整个音频文件→24000+采样→CHOP to TOP溢出。
  2. 手动设置输出长度为256,通过
    outputmenu='setmanually'
    outlength=256
    。默认输出22050个采样。
  3. 不要使用Lag CHOP进行频谱平滑。Lag CHOP在时间切片模式下会将256个采样扩展到2400+,所有值平均后接近零(~1e-06)。shader无法获取可用数据。这是测试中音频同步失败的头号原因。
  4. 也不要使用Filter CHOP——频谱数据会遇到相同的时间切片扩展问题。
  5. 平滑处理应在GLSL shader中进行(若需要),通过反馈纹理的时间插值:
    mix(prevValue, newValue, 0.3)
    。这样可以实现帧完美同步,且无管线延迟。
  6. CHOP to TOP的dataformat = 'r',layout = 'rowscropped'。频谱输出为256x2(立体声)。在y=0.25处采样第一个通道。
  7. Math增益设为10(而非5)。原始频谱值在低音范围约为0.19。增益设为10可得到shader可用的~5.0值。
  8. 无需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
references/network-patterns.md
for complete build scripts + shader code.
glsl
// 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.md

Operator Quick Reference

Operator速查

FamilyColorPython class / MCP typeSuffix
TOPPurplenoiseTOP, glslTOP, compositeTOP, levelTop, blurTOP, textTOP, nullTOPTOP
CHOPGreenaudiofileinCHOP, audiospectrumCHOP, mathCHOP, lfoCHOP, constantCHOPCHOP
SOPBluegridSOP, sphereSOP, transformSOP, noiseSOPSOP
DATWhitetextDAT, tableDAT, scriptDAT, webserverDATDAT
MATYellowphongMAT, pbrMAT, glslMAT, constMATMAT
COMPGraygeometryCOMP, containerCOMP, cameraCOMP, lightCOMP, windowCOMPCOMP
家族颜色Python类 / MCP类型后缀
TOP紫色noiseTOP, glslTOP, compositeTOP, levelTop, blurTOP, textTOP, nullTOPTOP
CHOP绿色audiofileinCHOP, audiospectrumCHOP, mathCHOP, lfoCHOP, constantCHOPCHOP
SOP蓝色gridSOP, sphereSOP, transformSOP, noiseSOPSOP
DAT白色textDAT, tableDAT, scriptDAT, webserverDATDAT
MAT黄色phongMAT, pbrMAT, glslMAT, constMATMAT
COMP灰色geometryCOMP, containerCOMP, cameraCOMP, lightCOMP, windowCOMPCOMP

Security Notes

安全说明

  • MCP runs on localhost only (port 40404). No authentication — any local process can send commands.
  • td_execute_python
    has unrestricted access to the TD Python environment and filesystem as the TD process user.
  • setup.sh
    downloads twozero.tox from the official 404zero.com URL. Verify the download if concerned.
  • The skill never sends data outside localhost. All MCP communication is local.
  • MCP仅在本地主机运行(端口40404)。无身份验证——任何本地进程均可发送命令。
  • td_execute_python
    拥有对TD Python环境和文件系统的无限制访问权限,权限与TD进程用户一致。
  • setup.sh
    从官方404zero.com URL下载twozero.tox。若有顾虑,请验证下载文件。
  • 本技能绝不会向本地主机外发送数据。所有MCP通信均为本地通信。

References

参考文档

FileWhat
references/pitfalls.md
Hard-won lessons from real sessions
references/operators.md
All operator families with params and use cases
references/network-patterns.md
Recipes: audio-reactive, generative, GLSL, instancing
references/mcp-tools.md
Full twozero MCP tool parameter schemas
references/python-api.md
TD Python: op(), scripting, extensions
references/troubleshooting.md
Connection diagnostics, debugging
references/glsl.md
GLSL uniforms, built-in functions, shader templates
references/postfx.md
Post-FX: bloom, CRT, chromatic aberration, feedback glow
references/layout-compositor.md
HUD layout patterns, panel grids, BSP-style layouts
references/operator-tips.md
Wireframe rendering, feedback TOP setup
references/geometry-comp.md
Geometry COMP: instancing, POP vs SOP, morphing
references/audio-reactive.md
Audio band extraction, beat detection, envelope following
references/animation.md
LFOs, timers, keyframes, easing, expression-driven motion
references/midi-osc.md
MIDI/OSC controllers, TouchOSC, multi-machine sync
references/particles.md
POPs and legacy particleSOP — emission, forces, collisions
references/projection-mapping.md
Multi-window output, corner pin, mesh warp, edge blending
references/external-data.md
HTTP, WebSocket, MQTT, Serial, TCP, webserverDAT
references/panel-ui.md
Custom params, panel COMPs, button/slider/field, panelExecuteDAT
references/replicator.md
replicatorCOMP — data-driven cloning, layouts, callbacks
references/dat-scripting.md
Execute DAT family — chop/dat/parameter/panel/op/executeDAT
references/3d-scene.md
Lighting rigs, shadows, IBL/cubemaps, multi-camera, PBR
scripts/setup.sh
Automated setup script

You're not writing code. You're conducting light.
文件内容
references/pitfalls.md
实际会话中积累的经验教训
references/operators.md
所有Operator家族的参数及使用场景
references/network-patterns.md
方案示例:音频响应式、生成式、GLSL、实例化
references/mcp-tools.md
twozero MCP工具的完整参数schema
references/python-api.md
TD Python:op()、脚本编写、扩展
references/troubleshooting.md
连接诊断、调试方法
references/glsl.md
GLSL uniforms、内置函数、shader模板
references/postfx.md
后期特效: bloom、CRT、色差、反馈发光
references/layout-compositor.md
HUD布局模式、面板网格、BSP风格布局
references/operator-tips.md
线框渲染、Feedback TOP设置
references/geometry-comp.md
Geometry COMP:实例化、POP vs SOP、变形
references/audio-reactive.md
音频频段提取、节拍检测、包络跟随
references/animation.md
LFO、计时器、关键帧、缓动、表达式驱动动画
references/midi-osc.md
MIDI/OSC控制器、TouchOSC、多机同步
references/particles.md
POPs及传统particleSOP——发射、力场、碰撞
references/projection-mapping.md
多窗口输出、边角定位、网格扭曲、边缘融合
references/external-data.md
HTTP、WebSocket、MQTT、串口、TCP、webserverDAT
references/panel-ui.md
自定义参数、panel COMP、按钮/滑块/输入框、panelExecuteDAT
references/replicator.md
replicatorCOMP——数据驱动克隆、布局、回调
references/dat-scripting.md
Execute DAT家族——chop/dat/parameter/panel/op/executeDAT
references/3d-scene.md
灯光系统、阴影、IBL/立方体贴图、多相机、PBR
scripts/setup.sh
自动化设置脚本

你不是在写代码,你是在操控光影。