Skip to content

Value Source

Reads a comp-scoped published value or texture from any other node port.

Category: Source Menu path: Source > Value Source

Ports

PortTypeDirectionDescription
out(matches publish)outputResolved value from publishName. Port type updates to match the source port when a publish is selected.

Parameters

ParamTypeDefaultDescription
publishNamestring""Name of a publish registered on the active composition. Empty = no resolution; downstream nodes get a Scalar(0.0) fallback.

Expose Channels

ValueSource has no expose channels — its single param is the publish name itself, and the node's purpose is to be a routable value source.

How It Works

Caddis compositions have a comp-scoped registry (composition.publishedValues) of name → { layerId, nodeId, portId } references. To populate it, right-click any node's output port in the node graph and pick Publish as…. The accent ring on the port indicates it's now published.

ValueSource is the consumer side. Pick a published name from the Publish dropdown (grouped by source layer, ordered by layer label), and the node's out port emits whatever NodeOutput the source port produces — Scalar, Vec2, Color, Texture, Shape, Field, etc. The output port's type updates automatically to match.

The engine evaluates layers in dependency order: any layer with a ValueSource referencing publish X is forced to evaluate after the layer that owns X. Cycles are rejected at Phase 0 with a clear error.

If a publish is missing or its source layer was deleted, ValueSource emits Scalar(0.0) and downstream consumers fall back to their stored param defaults.

Usage Examples

Basic: shared scale across layers

  • On Layer A, add a Constant (Vec2 mode) and right-click its output port → Publish as… → name it globalScale.
  • On Layer B, add a ValueSource, set Publish to globalScale, and wire it to a Transform2D's scale_in channel (toggle the E button on Transform2D first).
  • Animate Layer A's Constant value — every consuming layer scales in lockstep.

Creative: cross-layer reactive color

  • On a "control" layer, build a Time → Math → Constant(Color) chain that produces a time-driven color, and publish the Constant's output as pulseColor.
  • On any number of consumer layers, drop a ValueSource(pulseColor) into a SolidColor.color_in channel.
  • All consumer layers pulse in sync without duplicating the time math.

Tips

  • Where it lives: Publishes are per-composition. Duplicating a comp remaps its publishes onto the duplicated layer/node IDs automatically.
  • Manage from anywhere: A floating Published (N) panel appears in the bottom-left of the node graph whenever the active comp has at least one publish. Click an entry to navigate to the source node; use the ✎ to rename or × to unpublish.
  • Type-aware port: Selecting a different publish updates the out port's type and prunes any outgoing edges that are no longer compatible.
  • Stale references: If you delete a publishing node, every publish targeting it is automatically dropped. ValueSource consumers referencing those names fall back to defaults — no engine errors.
  • Motion blur: For motion-blurred publishers, ValueSource consumers see the final sub-frame value, not a per-sub-frame value. Static publishers (Constant, etc.) are stable across the shutter.
  • Layer Source — sibling pattern for cross-layer textures in the spatial chain.
  • Adjustment Source — similar comp-scoped wiring for the running composite below.
  • Constant — the most common kind of value to publish.