{/* Trang này được tạo tự động từ SKILL.md của kỹ năng bởi website/scripts/generate-skill-docs.py. Chỉnh sửa nguồn SKILL.md, không phải trang này. */}
Touchdesigner MCP
Điều khiển phiên bản TouchDesigner đang chạy thông qua twozero MCP — tạo toán tử, đặt tham số, kết nối dây, thực thi Python, xây dựng hình ảnh thời gian thực. 36 công cụ gốc.
Siêu dữ liệu kỹ năng
| Nguồn | Đi kèm (được cài đặt theo mặc định) |
| Đường dẫn |
skills/creative/touchdesigner-MCP ` | | Phiên bản |
1.1.0 ` | | Tác giả | kshitijk4poor | | Giấy phép | MIT | | Nền tảng | Linux, macOS, Windows | | Thẻ |
TouchDesigner
, `MCP
, `twozero
, `creative-coding
, `real-time-visuals
, `generative-art
, `audio-reactive
, `VJ
, `installation
,
GLSL |
| Kỹ năng liên quan | XPROTECTX28XPROTECTX, XPROTECTX29XPROTECTX, XPROTECTX30XPROTECTX,
Hermes-video |
Tham khảo: đầy đủ SKILL.md
Sau đây là định nghĩa kỹ năng đầy đủ mà Hermes tải khi kỹ năng này được kích hoạt. Đây là những gì tác nhân coi là hướng dẫn khi kỹ năng được kích hoạt.
Tích hợp TouchDesigner (MCP hai không)
QUY TẮC QUAN TRỌNG
- KHÔNG BAO GIỜ đoán tên tham số. Gọi
td_get_par_infocho loại hoạt động ĐẦU TIÊN. Dữ liệu đào tạo của bạn sai đối với TD 2025.32. - Nếu
tdAttributeErrorkích hoạt, hãy DỪNG. Gọitd_get_operator_infotrên nút bị lỗi trước khi tiếp tục. - KHÔNG BAO GIỜ mã hóa cứng đường dẫn tuyệt đối trong lệnh gọi lại tập lệnh. Sử dụng
me.parent()/ `scriptOp.parent()
. 4. Ưu tiên các công cụ MCP gốc hơn td_execute_Python. Sử dụng `td_create_operator
, `td_set_operator_pars
, `td_get_errors
, v.v. Chỉ quay lại
td_execute_Python cho logic nhiều bước phức tạp.
5. Gọi
td_get_hints trước khi xây dựng. Nó trả về các mẫu cụ thể cho loại hoạt động mà bạn đang làm việc.
Kiến trúc
` Hermes Agent -> MCP (Streamable HTTP) -> twozero.tox (port 40404) -> TD Python
``36 công cụ gốc. Plugin miễn phí (không thanh toán/giấy phép — được xác nhận vào tháng 4 năm 2026). Nhận biết bối cảnh (biết OP đã chọn, mạng hiện tại). Kiểm tra tình trạng trung tâm: GET http://localhost:40404/MCP
` trả về JSON với phiên bản PID, tên dự án, phiên bản TD.
Thiết lập (Tự động)
Chạy tập lệnh thiết lập để xử lý mọi thứ:
bash "$\{Hermes_HOME:-$HOME/.Hermes}/skills/creative/touchdesigner-MCP/scripts/setup.sh"
`
``Kịch bản sẽ:
1. Kiểm tra xem TD có đang chạy không
2. Tải xuống twozero.tox nếu chưa được lưu vào bộ nhớ đệm
3. Thêm máy chủ MCP
`twozero_td
` vào cấu hình Hermes (nếu thiếu)
4. Kiểm tra kết nối MCP trên cổng 40404
5. Báo cáo những bước thủ công còn lại (kéo .tox vào TD, bật chuyển đổi MCP)
### Các bước thủ công (một lần, không thể tự động hóa)
1. **Kéo
~/Downloads/twozero.tox
` vào trình chỉnh sửa mạng TD** → nhấp vào Cài đặt
2. **Bật MCP:** nhấp vào biểu tượng twozero → Cài đặt → MCP → "tự động khởi động MCP" → Có
3. **Khởi động lại phiên Hermes** để nhận máy chủ MCP mới
Sau khi thiết lập, hãy xác minh:
`
``` bash
nc -z 127.0.0.1 40404 && echo "twozero MCP: READY"
`
## Lưu ý về môi trường
- **TD phi thương mại** giới hạn độ phân giải ở 1280×1280. Sử dụng
`outputresolution = 'custom'
` và đặt chiều rộng/chiều cao một cách rõ ràng.
- **Codec:**
`prores
` (ưu tiên trên macOS) hoặc
`mjpa
` làm dự phòng. H.264/H.265/AV1 yêu cầu giấy phép Thương mại.
- Luôn gọi
`td_get_par_info
` trước khi đặt thông số - tên khác nhau tùy theo phiên bản TD (xem QUY TẮC QUAN TRỌNG #1).
## Quy trình làm việc
### Bước 0: Khám phá (trước khi xây dựng bất cứ thứ gì)
`
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.
`
``Không có nút tạm thời, không dọn dẹp. Điều này thay thế hoàn toàn điệu nhảy khám phá cũ.
### Bước 1: Dọn dẹp + Xây dựng`**QUAN TRỌNG: Chia việc dọn dẹp và tạo thành các lệnh gọi MCP RIÊNG.** Việc phá hủy và tạo lại các nút cùng tên trong một tập lệnh
`td_execute_Python
` gây ra lỗi "Đối tượng OP không hợp lệ". Xem những cạm bẫy #11b.
Sử dụng
`td_create_operator
` cho mỗi nút (tự động xử lý định vị khung nhìn):
`
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")
`
``Để tạo hoặc nối dây hàng loạt, hãy sử dụng
`td_execute_Python
:
``` python
# td_execute_Python script:
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}
`
### Bước 2: Thiết lập thông số
Thích công cụ gốc hơn (xác thực các thông số, sẽ không gặp sự cố):
`
td_set_operator_pars(path="/project1/bg", parameters=\{"roughness": 0.6, "monochrome": true})
`
``Đối với các biểu thức hoặc chế độ, hãy sử dụng
`td_execute_Python
:
``` python
op('/project1/time_driver').par.colorr.expr = "absTime.seconds % 1000.0"
`
### Bước 3: Đi dây
Sử dụng
`td_execute_Python
- không có công cụ dây gốc nào tồn tại:
`Python
op('/project1/bg').outputConnectors[0].connect(op('/project1/fx').inputConnectors[0])
`
### Bước 4: Xác minh
`
td_get_errors(path="/project1", recursive=true)
td_get_perf()
td_get_operator_info(path="/project1/out", detail="full")
`
### Bước 5: Hiển thị/Chụp
`
td_get_screenshot(path="/project1/out")
`
``Hoặc mở một cửa sổ thông qua tập lệnh:
`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()
`
## Tham khảo nhanh về công cụ MCP**Cốt lõi (sử dụng nhiều nhất):**
| Công cụ | Cái gì |
|------|------|
|
`td_execute_Python
` | Chạy Python tùy ý trong TD. Truy cập API đầy đủ. |
|
`td_create_operator
` | Tạo nút có thông số + định vị tự động |
|
`td_set_operator_pars
` | Đặt thông số an toàn (xác thực, sẽ không gặp sự cố) |
|
`td_get_operator_info
` | Kiểm tra một nút: kết nối, thông số, lỗi |
|
`td_get_operators_info
` | Kiểm tra nhiều nút trong một cuộc gọi |
|
`td_get_network
` | Xem cấu trúc mạng tại một đường dẫn |
|
`td_get_errors
` | Tìm lỗi/cảnh báo theo cách đệ quy |
|
`td_get_par_info
` | Nhận tên thông số cho loại OP (thay thế khám phá) |
|
`td_get_hints
` | Nhận các mẫu/mẹo trước khi xây dựng |
|
`td_get_focus
` | Mạng nào mở, chọn gì |
**Đọc/Ghi:**
| Công cụ | Cái gì |
|------|------|
|
`td_read_dat
` | Đọc nội dung văn bản DAT |
|
`td_write_dat
` | Viết/chắp nội dung DAT |
|
`td_read_chop
` | Đọc giá trị kênh CHOP |
|
`td_read_textport
` | Đọc đầu ra bàn điều khiển TD |
**Hình ảnh:**
| Công cụ | Cái gì |
|------|------|
|
`td_get_screenshot
` | Ghi lại một trình xem OP vào tệp |
|
`td_get_screenshots
` | Nắm bắt nhiều OP cùng một lúc |
|
`td_get_screen_screenshot
` | Chụp màn hình thực tế qua TD |
|
`td_navigate_to
` | Chuyển trình soạn thảo mạng sang OP |
**Tìm kiếm:**
| Công cụ | Cái gì |
|------|------|
|
`td_find_op
` | Tìm hoạt động theo tên/loại trong dự án |
|
`td_search
` | Tìm kiếm mã, biểu thức, thông số chuỗi |
**Hệ thống:**
| Công cụ | Cái gì |
|------|------|
|
`td_get_perf
` | Hồ sơ hiệu suất (FPS, hoạt động chậm) |
|
`td_list_instances
` | Liệt kê tất cả các phiên bản TD đang chạy |
|
`td_get_docs
` | Tài liệu chuyên sâu về một chủ đề TD |
|
`td_agents_md
` | Đọc/ghi tài liệu đánh dấu mỗi COMP |
|
`td_reinit_extension
` | Tải lại tiện ích mở rộng sau khi chỉnh sửa mã |
|
`td_clear_textport
` | Xóa bảng điều khiển trước phiên gỡ lỗi |
**Tự động hóa đầu vào:**
| Công cụ | Cái gì |
|------|------|
|
`td_input_execute
` | Gửi chuột/bàn phím tới TD |
|
`td_input_status
` | Trạng thái xếp hàng đầu vào thăm dò ý kiến |
|
`td_input_clear
` | Dừng tự động hóa đầu vào |
|
`td_op_screen_rect
` | Nhận dây màn hình của một nút |
|
`td_CLIck_screen_point
` | Nhấp vào một điểm trong ảnh chụp màn hình |
|
`td_screen_point_to_global
` | Chuyển đổi pixel ảnh chụp màn hình thành coord màn hình tuyệt đối |
Bảng trên bao gồm 32 công cụ được sử dụng trong quy trình làm việc sáng tạo điển hình. 4 công cụ còn lại (
`td_project_quit
,
`td_test_session
,
`td_dev_log
,
`td_clear_dev_log
) là các tiện ích ở chế độ quản trị viên/nhà phát triển - xem
`references/MCP-tools.md
` để tham khảo đầy đủ 36 công cụ với các lược đồ tham số hoàn chỉnh.
## Quy tắc triển khai chính`**Thời gian GLSL:** Không có
`uTDCurrentTime
` trong GLSL TOP. Sử dụng trang Giá trị:
`
`Python
# Call td_get_par_info(op_type="glslTOP") first to confirm param names
td_set_operator_pars(path="/project1/shader", parameters=\{"value0name": "uTime"})
# Then set expression via script:
# op('/project1/shader').par.value0.expr = "absTime.seconds"
# In GLSL: uniform float uTime;
`
``Dự phòng: TOP không đổi ở định dạng
`rgba32float
` (kẹp 8 bit thành 0-1, đóng băng trình đổ bóng).
**Phản hồi HÀNG ĐẦU:** Sử dụng tham chiếu tham số
`top
, không sử dụng dây đầu vào trực tiếp. "Không đủ nguồn" được giải quyết sau lần nấu đầu tiên. Dự kiến sẽ có cảnh báo "vòng lặp phụ thuộc nấu ăn".
**Độ phân giải:** Giới hạn phi thương mại ở 1280×1280. Sử dụng
`outputresolution = 'custom'
.
**Bộ đổ bóng lớn:** Viết GLSL vào
/tmp/file.glsl
, sau đó sử dụng
`td_write_dat
` hoặc
`td_execute_Python
` để tải.
**Quyền truy cập đỉnh/điểm (TD 2025.32):**
`point.P[0]
,
`point.P[1]
,
`point.P[2]
` — KHÔNG phải
.x
,
.y
,
.z
.
**Tiện ích mở rộng:** Định dạng
`ext0object
` là
"op('./datName').module.ClassName(me)"
` ở chế độ CONSTANT. Sau khi chỉnh sửa mã mở rộng bằng
`td_write_dat
, hãy gọi
`td_reinit_extension
.
**Gọi lại tập lệnh:** LUÔN LUÔN sử dụng đường dẫn tương đối qua
`me.parent()
` /
`scriptOp.parent()
.
**Làm sạch các nút:** Luôn luôn
`list(root.children)
` trước khi lặp lại + kiểm tra
`child.valid
.
## Ghi / Xuất video
``` python
# via 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
# rec.par.record = False # stop (call separately later)
`
``H.264/H.265/AV1 cần có giấy phép thương mại. Sử dụng
`prores
` trên macOS hoặc
`mjpa
` làm dự phòng.
Trích xuất khung:
`ffmpeg -i /tmp/output.mov -vframes 120 /tmp/frames/frame_%06d.png
``**TOP.save() không có tác dụng đối với hoạt ảnh** — mỗi lần chụp cùng một kết cấu GPU. Luôn sử dụng MovieFileOut.
### Trước khi ghi: Danh sách kiểm tra
1. **Xác minh FPS > 0** qua
`td_get_perf
. Nếu FPS=0 bản ghi sẽ trống. Xem những cạm bẫy #38-39.
2. **Xác minh đầu ra của trình đổ bóng không phải là màu đen** thông qua
`td_get_screenshot
. Đầu ra màu đen = lỗi đổ bóng hoặc thiếu đầu vào. Xem những cạm bẫy #8, #40.
3. **Nếu ghi có âm thanh:** đưa âm thanh bắt đầu trước, sau đó trì hoãn ghi 3 khung hình. Xem cạm bẫy #19.
4. **Đặt đường dẫn đầu ra trước khi bắt đầu ghi** — việc thiết lập cả hai trong cùng một tập lệnh có thể chạy đua.## GLSL phản ứng âm thanh (Công thức đã được chứng minh)
### Chuỗi tín hiệu chính xác (thử nghiệm vào tháng 4 năm 2026)
`
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
`
### Các quy tắc quan trọng về phản ứng âm thanh (đã được xác minh bằng thực nghiệm)
1. **TimeSlice phải BẬT** cho AudioSpectrum. TẮT = xử lý toàn bộ tệp âm thanh → hơn 24000 mẫu → CHOP tràn TOP.
2. **Đặt Độ dài đầu ra theo cách thủ công** thành 256 thông qua
`outputmenu='setmanually'
` và
`outlength=256
. Đầu ra mặc định 22050 mẫu.
3. **KHÔNG sử dụng Lag CHOP để làm mịn phổ.** Lag CHOP hoạt động ở chế độ chia thời gian và mở rộng 256 mẫu lên 2400+, lấy trung bình tất cả các giá trị về gần 0 (~1e-06). Trình đổ bóng không nhận được dữ liệu có thể sử dụng được. Đây là lỗi đồng bộ hóa âm thanh số 1 trong thử nghiệm.
4. **KHÔNG sử dụng Filter CHOP** — vấn đề mở rộng khoảng thời gian tương tự với dữ liệu phổ.
5. **Làm mịn thuộc về trình đổ bóng GLSL** nếu cần, thông qua lerp tạm thời với kết cấu phản hồi:
`mix(prevValue, newValue, 0.3)
. Điều này mang lại sự đồng bộ hóa khung hình hoàn hảo với độ trễ đường ống bằng không.
6. **CHOP to TOP dataformat = 'r'**, bố cục = 'rowscropped'. Đầu ra quang phổ là 256x2 (âm thanh nổi). Lấy mẫu tại y=0,25 cho kênh đầu tiên.
7. **Lợi ích toán học = 10** (không phải 5). Giá trị phổ thô là ~ 0,19 trong phạm vi âm trầm. Mức tăng 10 mang lại khả năng sử dụng ~ 5,0 cho trình đổ bóng.
8. **Không cần CHOP lấy mẫu lại.** Kiểm soát kích thước đầu ra trực tiếp thông qua thông số
`outlength
` của AudioSpectrum.
### Lấy mẫu phổ 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;
`
``Xem
`references/network-patterns.md
` để biết tập lệnh xây dựng hoàn chỉnh + mã đổ bóng.
## Tham khảo nhanh về người vận hành
| Gia Đình | Màu sắc | Lớp Python/loại MCP | Hậu tố |
|--------|-------|-------------|--------|
| HÀNG ĐẦU | Màu tím | noiseTOP, glslTOP, compositeTOP, levelTop, BlurTOP, textTOP, nullTOP | HÀNG ĐẦU |
| CHOP | Xanh | audiofileinCHOP, audiospectrumCHOP, mathCHOP, lfoCHOP, constantCHOP | CHOP |
| SOP | Màu xanh | lướiSOP, hình cầuSOP, biến đổiSOP, tiếng ồnSOP | SOP |
| ĐẠT | Trắng | văn bảnDAT, bảngDAT, scriptDAT, máy chủ webDAT | ĐẠT |
| MAT | Vàng | phongMAT, pbrMAT, glslMAT, constMAT | MAT |
| COMP | Xám | hình họcCOMP, containerCOMP, cameraCOMP, lightCOMP, windowCOMP | COMP |
## Ghi chú bảo mật
- MCP chỉ chạy trên localhost (port 40404). Không có xác thực - bất kỳ quy trình cục bộ nào cũng có thể gửi lệnh.
-
`td_execute_Python
` có quyền truy cập không hạn chế vào môi trường và hệ thống tệp TD Python với tư cách là người dùng quy trình TD.
-
`setup.sh
` tải xuống twozero.tox từ URL 404zero.com chính thức. Xác minh tải xuống nếu có liên quan.
- Skill không bao giờ gửi dữ liệu ra ngoài localhost. Tất cả thông tin liên lạc MCP là cục bộ.
## Tài liệu tham khảo
| Tập tin | Cái gì |
|------|------|
|
`references/pitfalls.md
` | Những bài học khó đạt được từ các buổi thực tế |
|
`references/operators.md
` | Tất cả các nhóm nhà điều hành có thông số và trường hợp sử dụng |
|
`references/network-patterns.md
` | Công thức nấu ăn: phản ứng âm thanh, tạo sinh, GLSL, kích hoạt |
|
`references/MCP-tools.md
` | Lược đồ tham số công cụ MCP twozero đầy đủ |
|
`references/Python-API.md
` | TD Python: op(), tập lệnh, tiện ích mở rộng |
|
`references/troubleshooting.md
` | Chẩn đoán kết nối, gỡ lỗi |
|
`references/glsl.md
` | Đồng phục GLSL, chức năng tích hợp, mẫu đổ bóng |
|
`references/postfx.md
` | Hậu FX: nở hoa, CRT, quang sai màu, phản hồi phát sáng |
|
`references/layout-compositor.md
` | Các mẫu bố cục HUD, lưới bảng điều khiển, bố cục kiểu BSP |
|
`references/operator-tips.md
` | Kết xuất wireframe, phản hồi Thiết lập TOP |
|
`references/geometry-comp.md
` | Hình học COMP: khởi tạo, POP vs SOP, biến hình |
|
`references/audio-reactive.md
` | Trích xuất dải âm thanh, phát hiện nhịp, theo đường bao |
|
`references/animation.md
` | LFO, bộ hẹn giờ, khung hình chính, giảm tốc, chuyển động theo biểu thức |
|
`references/midi-osc.md
` | Bộ điều khiển MIDI/OSC, TouchOSC, đồng bộ hóa nhiều máy |
|
`references/particles.md
` | POP và hạt kế thừaSOP — phát thải, lực, va chạm |
|
`references/projection-mapping.md
` | Đầu ra nhiều cửa sổ, chốt góc, dọc lưới, trộn cạnh |
|
`references/external-data.md
` | HTTP, WebSocket, MQTT, Nối tiếp, TCP, máy chủ webDAT |
|
`references/panel-ui.md
` | Thông số tùy chỉnh, bảng điều khiển COMP, nút/thanh trượt/trường, bảng điều khiểnExecuteDAT |
|
`references/replicator.md
` | replicatorCOMP — nhân bản, bố cục, gọi lại dựa trên dữ liệu |
|
`references/dat-scripting.md
` | Thực thi họ DAT — chop/dat/parameter/panel/op/executeDAT |
|
`references/3d-scene.md
` | Giàn chiếu sáng, bóng tối, IBL/khối lập phương, nhiều camera, PBR |
|
`scripts/setup.sh
` | Tập lệnh thiết lập tự động |
---
> Bạn không viết mã. Bạn đang tiến hành ánh sáng.