Skip to content

Label Points

Renders a formatted text label next to every point — indices, coordinates, or any per-point attribute — as real vector glyph outlines.

Category: Point Ops Menu path: Point Ops > Label Points

Ports

PortTypeDirectionDescription
points_inpointsinputPoints to label
mask_inscalarFieldinputOptional selection mask, sampled at each point's position — values > 0.5 get labels. Overrides maskAttribute
outshapeoutputAll labels merged into one shape. Per-path index = source point index, glyphIndex preserved (counters fill correctly), per-path color inherited from the point's color attribute

Parameters

ParamTypeDefaultDescription
templatestring{index}Label text per point. Tokens: {index} (point array index), {x} / {y} (position), {attr:NAME} (any per-point scalar attribute, e.g. {attr:speed}). Unknown tokens render literally
decimalsscalar0Decimal places for {x} / {y} / {attr:} values (clamped 0–4)
fontFamilystringCourier NewLabel typeface
fontWeightscalar400Font weight (100–900 typical)
fontSizescalar12Label size in px
offsetvec2(8, 0)Label anchor offset from the point, px
anchorenumLeftLeft = text extends right of point + offset. Center = centered on it. Right = text extends left
maskAttributestring(empty)Name of a per-point scalar attribute; values > 0.5 get labels. Used only when mask_in is unconnected. Empty = label every point

Expose Channels

None.

How It Works

Each selected point's template is expanded, laid out through the real text engine (shaping, kerning), and converted to glyph outlines — identical strings are laid out once and stamped per point. Labels are vertically centered on point + offset; anchor controls the horizontal side. Everything merges into one shape with per-path index carrying the source point's index, so downstream nodes can still tell labels apart. Output is capped at 2,000 labels.

Selection follows the PointDelete convention: a connected mask_in field wins, otherwise maskAttribute, otherwise everything. Values > 0.5 select.

Usage Examples

Basic: Debug indices

Grid → LabelPoints ({index}) → DrawShape (fill on, stroke off) → Output. Every grid point shows its index — the fastest way to understand point ordering before wiring attribute-driven effects.

Data readout

PointAttributes (Custom target writes speed) → LabelPoints (v = {attr:speed}, decimals 1). Each point displays its own live value; keyframe or field-drive the attribute and the labels update every frame.

Creative: Coordinates HUD

TrackPoints → LabelPoints ({x}, {y}, decimals 0, offset (12, −12), Courier New) → DrawShape. Tracked features get a motion-graphics coordinate tag that follows the footage.

Tips

  • mask_in takes a scalar field — Noise or a DistanceField makes labels appear only inside a region; animate the field to reveal them.
  • Point color attributes carry through as per-path colors, so DrawShape tints each label to match its point automatically.
  • Labels are ordinary shape geometry: TextToShape-style effects (ShapeDeform, per-path ops) work on them, and per-path index distinguishes the labels.
  • Missing fonts fall back to Arial/Helvetica (same fallback chain as the Text node).
  • Keep templates short at high point counts — every unique string is a fresh text layout (identical strings are cached within the frame).
  • ConnectPoints — draw the network these labels annotate
  • PointAttributes — write the per-point attributes that {attr:NAME} reads
  • PointDelete — same mask_in / attribute selection convention
  • Text — full text layout for standalone copy (rich runs, wrapping, alignment)
  • FormatNumber — string formatting for single values instead of per-point labels