TouchDesigner Frame Plan
Tell TouchDesigner what's arriving, before anything actually arrives
- td_frame_plan_json
- manifest_line
- summary_json
MKRTouchDesignerFramePlan is a plan-builder for getting frames out of ComfyUI and into TouchDesigner. Read the name carefully: it says Plan, and it means it. This node does not send a single pixel anywhere. It assembles a JSON contract describing how an asset should land in a TouchDesigner TOP - which file, which transport, which operator to target - and hands that contract to the addon side of the MKRShift bridge.
ComfyUI + TouchDesigner is the live/audio-reactive visuals lane of this ecosystem: people feed generated frames into TD to map, modulate, and perform them in real time. The MKRShift pack approaches that as a handoff problem - a packet-first bridge where one DAT holds the JSON, an extension class (MKRShiftBridgeExt.py in addons/touchdesigner/) does the import/export, and ComfyUI-side nodes just build and parse the payloads. This node is the "what should TD do with my asset" half of that conversation. Pair it with MKRTouchDesignerImport for the roundtrip.
The inputs that matter
asset_path- where the file lives. This is the one you'll actually set by hand.transport-file,spout,ndi,shared_memory, orwebsocket. Ambition on display, but for a first integration pickfile; it needs zero extra moving parts. Spout/NDI assume you already have those pipelines running.top_name- the TOP the frame should hit (defaultmkrshiftTOP).operator_path- where in the TD project the bridge lives (default/project1/mkrshift_bridge1).asset_kind-image,image_sequence,video, ortexture.colorspace-sRGB,Linear, orNon-Color. Don't skip this for a texture asset; the wrong colorspace is how a perfectly good texture shows up too dark or double-corrected in TD.- Optional:
metadata_json,transport_plan_json, andnotesall ride along into the plan if you want to attach context.
Outputs
td_frame_plan_json- the plan itself (schemamkrshift_touchdesigner_frame_plan_v1), the thing the TD addon consumes.manifest_line- a comma-joined summary (transport, top_name, kind, colorspace, path), handy if you're logging a handoff to a manifest.summary_json- what got set and what's missing, including whether a path was provided.
Install
It's part of MKRShift Nodes. ComfyUI Manager: search MKRShift_Nodes. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Then restart. No pip deps for the node itself; the pack's only external requirement is system ffmpeg, and only if you're using its video nodes. To actually use the plan you need the TD side too - the scaffold lives in the repo at addons/touchdesigner/, shaped as a baseCOMP or .tox with a DAT for packet JSON, a DAT for the transport plan, and the extension class.
Common issues
The most common failure is expecting this node to do the transport. It won't - td_frame_plan_json is a contract, not a connection. If nothing appears in TD, check that the operator path and TOP name match what the addon actually listens on, and that your transport (file, spout, etc.) is set up outside this node. And if summary_json reports has_path: false, you forgot asset_path; the plan will happily build without one, and TD will have nothing to grab.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| asset_path | STRING | — | |
| transport | COMBO | file | 5 options: file, spout, ndi, shared_memory, websocket |
| top_name | STRING | mkrshiftTOP | — |
| operator_path | STRING | /project1/mkrshift_bridge1 | — |
| asset_kind | COMBO | image | 4 options: image, image_sequence, video, texture |
| colorspace | COMBO | sRGB | 3 options: sRGB, Linear, Non-Color |
| metadata_jsonopt | STRING | — | |
| transport_plan_jsonopt | STRING | — | |
| notesopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| td_frame_plan_json | STRING | — |
| manifest_line | STRING | — |
| summary_json | STRING | — |