Signal Source
Shippingsignal_sourceForwards workspace signal from memory registry by handle ID
Signature
Outputs
signalAny
Description
Signal Source is a terminal input node that forwards a signal held in the engine's workspace MEMORY_REGISTRY, resolved by a runtime handle ID. It has no input ports and a single signal output of type Any — the emitted value is exactly whatever the referenced registry slot currently holds (Signal, Scalar, Matrix, SignalBundle, and so on). It is the generic sibling of the specialized live sources (audio_source, gbf_source, hardware_source), which bind fixed per-channel handles; signal_source instead exposes an arbitrary named workspace entry.
The handle is runtime-bound, not a declared parameter: nothing is configured on the node face itself, and the binding is supplied by the surrounding graph/capture control. Resolution is non-blocking — a missing, unbound, or idle handle yields an empty Signal rather than raising an error, so a partially wired or not-yet-populated workspace never faults the graph.
Signal Source is a pure passthrough: it neither transforms samples nor rescales values, so physical units and per-sample uncertainty ($\sigma$) are carried through byte-for-byte from the registry entry. Timestamps, sample rate, and unit metadata are preserved unchanged.
The node is declared stateless — it holds no internal buffer and computes no history. Any apparent state (the changing contents of the referenced slot) lives in the registry, not in the node.
Examples
Forwarding a workspace entry
A capture routine writes a decimated acceleration trace into workspace slot accel_raw. A signal_source bound to that handle emits it downstream unchanged, preserving unit m/s^2 and its channel:
signal_source[accel_raw] --> smoothing --> fftIf accel_raw has not been populated yet, the output is an empty Signal and the chain simply produces no samples this evaluation.
Type-agnostic reference
Because the output port is typed Any, the same node can forward a Matrix on one run and a Signal on another depending on what the bound handle holds. Downstream nodes see the concrete CaptyseValue and dispatch accordingly.
Applications
- Re-injecting a previously captured or intermediate workspace buffer into a live processing graph without recomputing it.
- Decoupling data acquisition (which populates the registry) from analysis graphs (which read it), enabling reusable pipelines.
- Bridging externally produced results — e.g. a scripted import or a prior simulation run stored under a handle — into node-based post-processing.
- Building parameterizable dashboards where a single control rebinds many sources to different workspace entries.
Neat
Its output port is typed `Any`, so a single Signal Source can forward Scalars, Matrices, or full SignalBundles interchangeably — the type is determined entirely by the registry slot, not the node.
It is one of the few source nodes with an empty `param_specs`: the handle is injected by capture/runtime control rather than edited on the node, so two identical-looking nodes can reference different data.
Known issues
An unbound, missing, or idle handle silently yields an empty Signal instead of an error, so a mistyped handle ID produces no output rather than a diagnostic — verify the binding if a downstream chain is unexpectedly empty.