Offset Path
Expand or contract a shape along its vertex normals. Positive
distancepushes outward; negative contracts.
Category: Shape Ops Menu path: Shape Ops > Offset Path
Ports
| Port | Type | Direction | Description |
|---|---|---|---|
shape_in | shape | input | Source shape |
distance_in | scalar | input | Override for distance (expose channel) |
out | shape | output | Offset shape |
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
distance | scalar | 10 | Perpendicular offset in pixels. Positive expands, negative contracts. Keyframeable. |
Expose Channels
| Port | Type | Overrides |
|---|---|---|
distance_in | scalar | distance |
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
ResampleShapebefore 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_inlets you drive offset from a scalar field or Math node for animated pulsing.
Related Nodes
- 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