Follow Path

Distribute shapes along a path with position, tangent, and curvature outputs.

What it does

Follow Path places shapes along a curve, or bends geometry to trace one. Given a Path and a Progress value it reports where that point sits: position, tangent direction, curvature and total length, enough to drive a transform, animate motion along a curve, or read the curve's shape at any point.

With shapes wired in, the node distributes them itself. In Distribute mode each shape is placed rigidly along the path and rotated to match its direction, the classic text-on-path. In Warp mode the geometry's own points are bent continuously to follow the curve, so the whole shape flows along it as one ribbon.

When to use it

ParameterTypeDefaultWhat it does
shapes_inCollection—Shapes to distribute along the path
pathCurve or Geometries—Bezier curve or shape path to follow
progressAny0Position along the path (0-1). Animate to move along path. Bind From Attribute (@normalized), or wire a NumberArray (per-row positions) or an easing curve (redistribution profile); the slider then offsets the whole formation.
modeString"Distribute"Distribute = rigid per-shape placement along the path (text-on-path). Warp = bend geometry/text continuously to follow the curve. One of: Distribute, Warp.
orientBooleantrueRotate shapes to follow the path direction; also drives the `rotation` output
rotation_offsetNumber0Additional rotation offset in degrees, applied per-shape in its path-tangent frame
offsetNumber0Perpendicular offset from the path
loop_modeString"clamp"Behaviour when progress goes outside 0–1: clamp, loop, or ping_pong. One of: clamp, loop, ping_pong.
spacingString"Proportional"How to space shapes: Proportional = by advance width, Equal = even spacing, Pack = tight. Ignored while 'progress' is bound From Attribute - the bound value places each row. One of: Proportional, Equal, Pack.
stretchNumber1Stretch or compress geometry along the path
twistNumber0Twist geometry around the path over its full length (progressive)
tiltNumber0Roll the cross-section around the path direction: 0 = flat, 90 = upright (wall). Constant; adds to twist.
opacityNumber1Layer opacity (0 = transparent, 1 = opaque). Editable, wirable, keyframable.

Gotchas

Spacing (Proportional, Equal, Pack) applies in Distribute mode only, and only while Progress is not bound to an attribute. Bind Progress from an attribute, a stamped normalized value for example, and each row places at its own position, with Spacing ignored while that binding is active.

With shapes wired but no path, the shapes pass through unchanged. With a path but no shapes, position, tangent, normal, curvature and length are still reported, which is enough to drive other nodes from the curve alone.

Wire a NumberArray or an Easing Curve into Progress instead of a plain number to redistribute the whole run of shapes at once: the array gives each row its own position, the curve reshapes the density of the run. The Progress slider still works alongside either, as a master offset added to every shape.

Rotation Offset is applied inside each shape's own path-facing frame, not as a global spin. A Transform node downstream rotates the whole formation together, which is a different thing and cannot reproduce this offset.

Worked example

  1. Add a Follow Path node. Wire a curve or shape into Path.

  2. Wire your shapes (text, instances, or a repeated shape) into Shapes In.

  3. Leave Mode on Distribute for text-on-path; switch to Warp to bend the shapes' own geometry to follow the curve instead.

  4. Animate Progress from 0 to 1 to move the run along the path, or drive it from an attribute or array for per-shape placement.

  5. Raise Offset to push the run to one side of the path, and use Rotation Offset to fine-tune facing.

See also

Offset · Trim Path · Deform · Curves (lines & paths)