Iterator

Iterate over points or elements, executing a subgraph for each.

What it does

Iterator takes shapes, geometry, or a distance field and either replicates them into copies across a distribution, or transforms the existing elements in place without cloning. The distribution pattern, Linear, Grid, Radial, Object (onto another shape's points or surface), or Path (along a curve), works the same way for both operations, so switching between copying and re-placing needs no rebuild of the layout.

Each instance can carry its own rotation, position offset, scale, anchor point, animation time offset, and fill/stroke colour or PBR material. Wire an array or an easing curve into any of these and one value is distributed per instance.

When to use it

ParameterTypeDefaultWhat it does
sourceCollection or SDF—2D Shapes, 3D Geometry, or a Distance Field to iterate over
operationString"Replicate"Replicate creates one copy per target slot (the target's point count drives N). Transform Only re-places the source's existing elements onto the target (1:1, no copies — N comes from the source). One of: Replicate, Transform Only.
targetCollection or Primitives or Vec3 or Vec3[]"None"The point set to distribute onto. Picking a layout drops the generator that produces it into the graph, wired here — edit it like any other node. None (unwired): every element stays where it is. One of: None, Linear, Grid, Radial, Path.
distributionString"Vertex"How clones are distributed on the target: Vertex (per point — a shape's path anchors), Edge (evenly along edges / along a path's arc length), Polygon Center (per face), Surface (area-weighted scatter), Volume (interior fill), Axis (along bounding axis). One of: Vertex, Edge, Polygon Center, Surface, Volume, Axis.
distribution_countNumber100Number of clones to distribute. Edge: per edge (per PATH for a 2D shape). Axis: total along axis.
distribution_axisString"X"Axis to distribute clones along. One of: X, Y, Z.
align_to_normalBooleantrueAlign clone orientation to surface or edge normal
variantAny0Selection of which source shape to place at each position: array (per position), number (same shape everywhere), or easing curve over the position ordinal. Indices wrap by the Overflow mode. The slider is an index offset added to a wired selection; inert unwired.
overflowString"Cycle"Cycle: wrap around to first item. Clamp: repeat last item. One of: Cycle, Clamp.
rotationAny0Rotation per instance in degrees: value, array, or easing curve over the instance ordinal. The slider is an additive base under any wire.
position_offsetAny(0, 0, 0)Position offset per instance (vec3 or array). The widget is an additive base under any wire.
scaleAny1Scale per instance: value, array, or easing curve over the instance ordinal. The slider is a multiplicative base (1 = neutral) under any wire.
anchorAny(0, 0, 0)Anchor point per instance — instances rotate/scale around this point; the widget is an additive base under any wire. Under Transform Only the distribution offset is ADDED to each element's existing position (clean layout when elements share an origin; layered on top otherwise — set anchor to neutralize).
time_offsetAny0Time offset per instance in frames: value, array, or easing curve over the instance ordinal. Shifts when each clone evaluates its animation; the slider is an additive base under any wire.
fillColor or Color Field or Color[] or Field or Material or Material[] or Frame Sequencergba(0.00, 0.00, 0.00, 0.00)Fill color or texture per instance. Unwired: the swatch fills every instance (transparent = inherit the source's fill). A wire replaces the swatch.
strokeColor or Color Field or Color[] or Field or Material or Material[] or Frame Sequencergba(0.00, 0.00, 0.00, 0.00)Stroke color per instance. Unwired: the swatch strokes every instance (transparent = inherit the source's stroke). A wire replaces the swatch.
materialCollection—PBR material (connect Material node)
strengthNumber1Effect strength / wet-dry (0 = no effect, 1 = full). Editable, wirable, keyframable.

Gotchas

Fill and Stroke behave differently from the other widgets. An unwired swatch fills or strokes every instance, and fully transparent (alpha 0, the default) means inherit the source's own colour. Wiring something in replaces the swatch completely rather than composing with it.

Under Transform Only, the distribution's position is added to each element's existing position rather than replacing it. Elements that already share a common origin lay out cleanly; for elements that do not, set Anchor to pull them back to a shared point first.

Distribution set to None appears under Transform Only only. It keeps every element exactly where it is, so per-element Fill, Rotation, Scale, or Time Offset can be driven with no relayout. Under Replicate, None would stack every copy on one spot, so it falls back to Linear.

Every per-instance widget (Rotation, Scale, Position Offset, Anchor, Time Offset, Fill, Stroke) is a base, not a fallback. Left unwired, it applies uniformly to every instance. Wired, it composes with the incoming array or curve: additively for rotation, offset, anchor and time, multiplicatively for scale, so 1 stays neutral. It never overrides a wire.

Variant, which source shape goes at each position, does nothing until an array, number, or easing curve is wired into it. Its slider is an index offset added on top of that wire and has no effect while Variant is unwired, where the single source is replicated across every position.

Worked example

  1. Add an Iterator and wire a shape or geometry into Source. Leave Operation on Replicate and Distribution on Linear to see a row of copies.

  2. Raise Count and adjust Spacing/Direction to space the copies out.

  3. Switch Distribution to Grid or Radial to try a different layout, or to Object and wire a Collection into Target to scatter copies onto its points or surface.

  4. Wire an easing curve into Scale, or a colour array into Fill, to give each copy its own look instead of a uniform one.

  5. To restagger existing elements instead of cloning them, set Operation to Transform Only, which re-places what is already there onto the same distribution rather than adding copies.

See also

Stamp · Points · Spawn · Points