You build networks by drawing wires between operators. Wires are the visible side of TouchDesigner’s data flow, but the data isn’t actually moving along them. The destination node pulls from the source when it needs to cook. The wire just records “here’s where to look.”

Per the Derivative wiki: a wire "doesn't actually pass or copy its data to the destination, it only informs the destination of where to get its data to operate on." See Cooking for why this matters.

Connector Geometry

Every operator has connectors on its sides:

  • Left side: inputs (data comes in)
  • Right side: outputs (data goes out)
  • Bottom: secondary inputs on a few ops (e.g. mask inputs, reference inputs)

Most ops have one of each. A few (Composite TOP, Switch CHOP, Merge CHOP) accept many inputs and stack them.

Drawing and Removing Wires

ActionHow
Create a wireClick an output connector, move to a target connector, click again, or click-and-drag in one motion
Delete a wireRight-click the wire, choose Disconnect
Toggle wire stylePress s in the Network Editor (splines vs straight lines)
Visual cook indicatorWires animate with dashes while their source is cooking

The Family-Matching Rule

Wires only connect ops of the same family: TOP→TOP, CHOP→CHOP, SOP→SOP, DAT→DAT. To bridge families you use a dedicated converter op:

From → ToUse
CHOP → DATCHOP to DAT
DAT → CHOPDAT to CHOP
TOP → CHOPTOP to CHOP
CHOP → TOPCHOP to TOP
SOP → CHOPSOP to CHOP
CHOP → SOPCHOP to SOP
TOP → SOPTrace SOP, or sample texture in vertex shader

So a typical cross-family pipeline (audio levels driving geometry) looks like Audio File In CHOP → Analyze CHOP → CHOP to SOP → Geo COMP.

Multi-Input Operators

Some ops accept a variable number of inputs and stack them in order. Order matters.

  • Composite TOP: layers in connection order (input 1 is the bottom layer)
  • Switch CHOP / Switch TOP: picks one input by index parameter
  • Merge CHOP: concatenates channels in connection order
  • Math CHOP: combines all inputs by the configured operation

Exposing I/O at the COMP Boundary

To turn a Base/Container COMP into a reusable module with its own inputs and outputs, drop In and Out ops inside it:

project1/
  myEffect/         ← Base COMP
    in1   (In TOP)  ← becomes left connector on myEffect
    blur1 (Blur TOP)
    out1  (Out TOP) ← becomes right connector on myEffect

After this, myEffect shows up in the parent network with one TOP input and one TOP output, just like a built-in operator. Same pattern works with In/Out CHOP, In/Out SOP, In/Out DAT.

Wiring Diagram Example

movie1 ──┐
         ├─→ composite1 ──→ blur1 ──→ out1
noise1 ──┘                    ↑
                            level1 (mask input via bottom connector)

Walking Wires from Python

The OP class exposes connectivity as plain lists:

n = op('blur1')
print(len(n.inputs))         # number of wired-in inputs
print(n.inputs[0].name)      # the upstream op
print(n.outputs[0].name)     # the first downstream op
n.inputConnectors            # all input connectors (wired or not)
n.outputConnectors           # all output connectors

.inputs / .outputs return only the connected upstream/downstream operators. .inputConnectors / .outputConnectors return every connector slot, wired or not. Useful when iterating to find an empty input.



(y) Return to Core Concepts | (y) Return to TouchDesigner | (y) Return to Home