Connections vs expressions

Three ways to feed a value into a node — wiring it, typing an expression, or letting a multi-input pin gather its own wires. They look alike but do different jobs.

When you want a parameter to be something other than a fixed number you typed, you have a few options. They sit right next to each other in the interface, so it's worth knowing which one to reach for.

Wire it: a connection

A connection is a wire you drag from one node's output to another node's input. The downstream node reads whatever the upstream node produces, live — change the source and the value flows through on the next cook.

Reach for a connection when the value comes from somewhere else in your graph: a number a node computed, a position from a curve, a colour from a palette node, the output of a input.midi or input.osc device. Anything an input can read, an input can be wired to.

A wired input wins over everything else. If a parameter is connected, its expression, keyframes, and typed value all sit dormant underneath — unwire it and the value underneath comes back.

Type it: a parameter expression

A parameter expression is a small formula you type into the parameter field itself, prefixed with =. It computes a value on every frame from globals like $T (time) and $F (frame):

= sin($T * 2) * 10

Reach for an expression when the value is procedural — driven by time or math rather than by another node. It's the quickest way to get continuous, hands-off motion without authoring a curve.

Expressions are single-value and self-contained: they see the time globals and constants, but not per-element attributes (@) or other nodes. For richer per-element logic, use an Expression node in the graph instead. See Parameter expressions for the full list of globals and functions.

Connections, expressions, and keyframes resolve in a fixed order: a live connection first, then an expression, then keyframes, then your typed value. Whichever is highest and present is the one you see.

Let it gather: a connection expression

Some inputs — like the inputs pin on sop.merge — accept many wires at once. Instead of dragging each one by hand, you can type a connection expression on that pin and let it wire itself.

It's not a math formula; it's a small query that names which nodes to wire in, re-evaluated as your graph changes:

This keeps a busy merge tidy and self-maintaining: reorder your layers and the wires follow, without you re-dragging anything.

Use a connection expression when which inputs you want is a rule ("all the layers below me"), and plain wires when it's a fixed, deliberate handful.

Quick guide

See also