Value Source
Reads a comp-scoped published value or texture from any other node port.
Category: Source Menu path: Source > Value Source
Ports
| Port | Type | Direction | Description |
|---|---|---|---|
out | (matches publish) | output | Resolved value from publishName. Port type updates to match the source port when a publish is selected. |
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
publishName | string | "" | 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 itglobalScale. - On Layer B, add a
ValueSource, set Publish toglobalScale, and wire it to a Transform2D'sscale_inchannel (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 aspulseColor. - On any number of consumer layers, drop a
ValueSource(pulseColor)into aSolidColor.color_inchannel. - 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
outport'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.
Related Nodes
- 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.