Create external I/O
create_external_ioBridge TouchDesigner with external devices via OSC/MIDI input/output, DMX/Art-Net lighting, RTMP streaming, and NDI/Syphon-Spout video input.
Instructions
Bridge TouchDesigner to the outside world: OSC/MIDI input (a control surface — bind incoming channels straight to parameters), OSC/MIDI output (send a CHOP's channels back out for bidirectional feedback to lighting desks, other apps or hardware — pass source_path), DMX/Art-Net output for lighting (dmx_out for any DMX desk; artnet_out for network Art-Net/sACN pixel-mapping of LED strips & stage fixtures), RTMP output to live-stream a TOP to Twitch/YouTube/OBS (rtmp_out — NVIDIA GPU on Windows only), or NDI / Syphon-Spout video input. To discover which channel a control sends (a 'MIDI learn'), wiggle it and read the input CHOP with get_td_nodes, then bind_to that channel. Validate live where possible, but real signal needs the hardware/sender present.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | What to bridge: OSC/MIDI/keyboard/gamepad/mouse input (a control surface — bind channels to parameters), OSC/MIDI output (send a CHOP's channels back out for bidirectional feedback — pass source_path), DMX/Art-Net output for lighting (dmx_out is the general DMX desk; artnet_out is a network-only Art-Net/sACN preset for pixel-mapping LED strips & stage fixtures — both send a CHOP's 0-255 channels and need source_path), RTMP output to live-stream a TOP to Twitch/YouTube/OBS-ingest (rtmp_out — pass source_path = the TOP to stream and url; needs an NVIDIA GPU on Windows), or NDI / Syphon-Spout video input. (Window/recording/NDI/Syphon *video outputs* live in setup_output.) | |
| parent_path | No | COMP to create the I/O operator in. | /project1 |
| name | No | ||
| port | No | (osc_in) UDP port to listen on / (osc_out) port to send to. Defaults to 7000. | |
| normalize | No | (midi_in) How to scale incoming MIDI values. | 0to1 |
| bind_to | No | (osc_in/midi_in) Map incoming channels to parameters. Each binding tolerates a channel that hasn't arrived yet (falls back to 0 instead of erroring). | |
| source_path | No | (dmx_out/artnet_out/osc_out/midi_out) CHOP whose channel values are sent out, or (rtmp_out) the TOP to stream. Should live in the same COMP as parent_path so the wire/source connects. | |
| interface | No | (dmx_out) DMX transport. (artnet_out forces a network protocol via `net`.) | artnet |
| net | No | (artnet_out) Network DMX protocol: Art-Net or sACN (streaming ACN). Defaults to Art-Net. | |
| universe | No | (dmx_out/artnet_out) DMX universe. | |
| net_address | No | (dmx_out/artnet_out) Target IP address for Art-Net / sACN. | |
| url | No | (rtmp_out) Full RTMP destination as {service url}/{stream key}, e.g. 'rtmp://live.twitch.tv/app/live_xxx'. If omitted but stream_key is given, prefix with rtmp_base. | |
| rtmp_base | No | (rtmp_out) Ingest base URL to combine with stream_key when url is not given (defaults to YouTube's primary ingest). | |
| stream_key | No | (rtmp_out) Stream key, appended to rtmp_base as '{rtmp_base}/{stream_key}'. | |
| fps | No | (rtmp_out) Frame rate to stream at. Defaults to 30. | |
| active | No | (rtmp_out) Start streaming immediately. Defaults off so the artist can confirm the URL before going live. | |
| source_name | No | (ndi_in/syphon_spout_in) Name of the NDI source or Spout sender to receive. |