Skip to content

Offset Path

Expand or contract a shape along its vertex normals. Positive distance pushes outward; negative contracts.

Category: Shape Ops Menu path: Shape Ops > Offset Path

Ports

PortTypeDirectionDescription
shape_inshapeinputSource shape
distance_inscalarinputOverride for distance (expose channel)
outshapeoutputOffset shape

Parameters

ParamTypeDefaultDescription
distancescalar10Perpendicular offset in pixels. Positive expands, negative contracts. Keyframeable.

Expose Channels

PortTypeOverrides
distance_inscalardistance

How It Works

At each vertex, Offset Path computes the bisector of the two adjacent edge tangents and displaces the vertex perpendicular to the bisector by distance pixels. The displacement is scaled by 1 / sin(theta/2) so the perpendicular distance from the original edges is preserved — this is the standard miter join geometry used in stroke rendering.

A miter limit (currently fixed at 4×) clamps very acute corners from producing long spikes. At angles sharper than ~28°, the vertex stops growing outward and the corner gets a flattened (bevel-like) appearance.

For open paths, the endpoint vertices use the single incident edge's perpendicular (no bisector needed).

For bezier segments, each control point is shifted by the same vector as its nearest anchor. This is exact for circles (where the bezier approximates a true arc), and a good approximation for gently curving paths. Sharp or highly curved beziers with large offset distances will visibly deviate from the true parallel curve.

Winding convention: Outward direction is 90° CCW-rotated from the edge tangent direction. For a CCW-wound shape this points outside; for CW-wound shapes it points inward. There is no winding-aware "auto-outward" in v1 — flip the sign of distance to reverse direction.

Point IDs and attributes are preserved in place — downstream nodes that depend on stable PointId (CloneToPoints segment references, PointAttributes custom attribute keys) continue to match.

Usage Examples

Outline effect

Circle → OffsetPath (distance: 20) → DrawShape (stroke only) — creates an outline slightly larger than the original circle. Pair with the original shape behind it for a dual-stroke effect.

Expanding text

Text → TextToShape → OffsetPath (distance: animated 0 → 15) → DrawShape (fill) — letters swell outward over time. Works best on simple typefaces; complex serifs with tight curves will distort.

Shape thickening for rendering

EditableShape (line-only) → OffsetPath (distance: 5) → DrawShape (fill) — converts a 0-width line path into a filled thick stroke, useful when you need fill-rule behavior instead of DrawShape's stroke.

Offset + RoundCorners combo

Polygon (sides: 6) → OffsetPath (distance: 20) → RoundCorners (radius: 15) → DrawShape — expanded hexagon with rounded corners.

Inverted (pinch-in)

Rectangle → OffsetPath (distance: -10) — pulls the rectangle vertices inward. Good for insets and frame effects.

Tips

  • Stack with RoundCorners downstream to soften the miter joins after offsetting.
  • Offsetting does NOT resample — if you want smooth offset curves on complex beziers, run ResampleShape before Offset Path to convert to a fine polyline.
  • Negative distances on closed shapes will eventually self-intersect when |distance| exceeds the shape's inradius. Watch for visible artifacts (crossings, inverted segments) when contracting heavily.
  • For parallel-line strokes with exact perpendicular width, Offset Path is preferable to DrawShape's stroke when you need the offset geometry as a shape (for further geometric operations, not just rasterization).
  • Expose channel distance_in lets you drive offset from a scalar field or Math node for animated pulsing.
  • Round Corners — smooth the corners produced by offsetting
  • Resample Shape — convert beziers to polylines before offsetting for smoother parallel curves
  • Shape Deform — per-vertex procedural deformation (Normal mode offsets along normals too, but via a field)
  • Trim Path — another shape op — cut paths rather than offset them

Caddis — professional motion design.