Macro Input (Boundary)
Shippingmacro_inCompound-node input boundary: surfaces one outer input port on a custom subsystem
Signature
Outputs
valueAny— Re-emits the value wired into the exposed outer port (or the typed `default` when unwired).
Parameters
| Key | Type | Default | Notes |
|---|---|---|---|
name | text | in | The outer port id this boundary exposes on the parent compound node (renaming re-exposes it). |
port_type | enum | one of: , Signal, Float, Integer, Boolean, String, Vector, Matrix, Color, Bundle, Image | |
order | int | 0 | Display order of the exposed port on the compound node. |
required | boolean | true | true → a real input port that must be wired; false → an inline editable parameter (Blender Group-Input model) plus a connectable socket. |
hold_policy | enum | linear | How a wired time-varying signal is interpolated between samples when it drives this input as a forcing function. |
default | float | Value emitted when the input is unwired, typed by port_type. An empty default on a required numeric/boolean port fails loudly rather than inventing a silent 0. | |
unit_mode | enum | fixed | Unit handling for the boundary: none / fixed / dim / any. |
unit | unit | Unit symbol or dimension source (used when unit_mode ≠ none). | |
uncertainty | boolean | false | When set, the parameter carries an editable ±σ that propagates through the compound. |
sigma | float | Default 1σ uncertainty of the parameter (when Allow ± error is on). | |
min | float | Lower bound of the numeric parameter field (empty = none). | |
max | float | Upper bound of the numeric parameter field (empty = none). | |
step | float | Drag step of the numeric parameter field (optional). | |
options | text | Enum choices for a String parameter: `a,b,c` or `val|Label,…`. |
Description
Macro Input is a compound node's input boundary bridge. Placed inside a custom (compound) node's internal graph, it surfaces one outer input port — named by its name param — and re-emits the value wired into that outer port on its value output. During a compound run the recursive executor seeds this node's slot with the outer port's value directly; the body only runs standalone (unwired outer port), where it emits the typed default.
The required flag chooses how the parent surfaces the boundary, following Blender's Group-Input model: required = true makes a real input port (a socket that must be wired), while required = false makes an inline parameter — the parent renders an editable field typed by port_type, bounded by min/max/step or chosen from options, plus a small connectable socket. Type-specific authoring fields (unit, ±σ, numeric bounds, enum options) are gated to the port type that actually uses them.
This is a structural subsystem-boundary port, not a signal-processing node; it is only used while authoring custom nodes.
Applications
- Exposing a named, typed input on a custom (compound) node — as a required port or an inline editable parameter.
- Giving a subsystem's inputs units, default values, ±σ uncertainty, numeric bounds, or enum options for its inspector UI.
- Feeding a wired time-varying signal into a subsystem as a forcing function with a chosen interpolation (hold) policy.
Neat
One node covers both a required port and an inline parameter — the `required` flag alone flips it, matching Blender's Group-Input authoring model.
Authoring fields are condition-gated by port_type using the same algebra evaluated in both the Rust and Dart condition engines, so the inspector never shows float knobs on a String or σ on a Color.
An empty default on a required numeric/boolean port fails loudly instead of inventing a silent 0 — a scientific tool refusing to fabricate data.