Skip to content

Attribute Name Fields

Any parameter that asks for the name of a per-element attribute is a combobox, not a text box. It lists the computed @ properties, the attributes actually flowing in from upstream, and lets you type anything else.

Twenty-one parameters across seventeen nodes take an attribute name — the fifteen listed below plus the six Apply To fields (see the Apply To block). They all render with the same widget, so learning it once covers every one of them.

NodeParameterReadsDomain
Point DeleteAttributeinper-point
Path DeleteAttributeshape_inper-path
Round CornersSelect Attributeshape_inper-vertex
Label PointsMask Attributepoints_inper-point
Point RelaxScale Attributepoints_inper-point
Trim PathDelay Attributeshape_inper-path
Shape Along PathDelay Attributeshape_inper-path
Attribute to FieldAttributeinper-point
Clone to PointsGrouppoints_inper-point
Clone to PointsGroup Byshapes_inper-path
Draw InstancesGrouppoints_inper-point
Draw InstancesOffset Attributepoints_inper-point
Point AttributesAttribute Name(creates)per-point
Shape AttributesAttribute Name(creates)per-vertex
Shape AttributesGroup Byshape_inper-path

Note the domain column: a per-path parameter searches the path attributes, not the point attributes. glyphIndex is on Path Delete's list and not on Point Delete's, because that is where it actually lives.

The dropdown

Two sections, always in the same order.

Intrinsics — the properties every element has just by existing. Computed on read, never stored, and therefore always available even on a stream that carries no attributes at all:

NameMeaning
@indexPosition in the list, starting at 0. Typing bare index reads the same value — unless something upstream deliberately wrote an index order, which then wins
@idStable ID — survives filtering and reordering
@x / @yPosition
@numTotal number of elements
@indexnorm@index as 0–1
@rand01Random 0–1, stable per element (keyed on @id)

On this stream — what the engine actually reported flowing into that input port, with the same kind dot, count and value range the Details panel shows. This section is the documentation: it tells you what the upstream node produced, at the current frame, in the place where you have to decide what to type.

You can always type a name that appears in neither list — including one nothing writes yet, so you can build a graph top-down.

What the field tells you

StateSignal
EmptyShows @none — one spelling everywhere. What empty does is the node's documentation, not its placeholder.
ResolvedKind-coloured dot, plus the value range on the right
IntrinsicAccent dot, computed on the right
Not on the streamAmber ⚠ with a tooltip naming what is available
Stream unknownNothing — see below
@ on a name-creating fieldRed, inline message, and the value is refused

An empty field is never "everything" by implication. The placeholder always states the actual behaviour, because "blank means all" is the single most common trap in tools that work this way.

A missing name is a warning, not an error. The attribute may legitimately appear later in the timeline, or you may be naming it before building the node that writes it. The value still commits.

When the stream can't be inspected, the field says nothing. The engine only serializes geometry for the selected node and one hop upstream (see Details panel), so a producer further up the chain simply isn't known here. The dropdown says "Stream not inspected" rather than showing an empty list as though the stream carried nothing.

The reserved @ namespace

Nothing may create an attribute whose name begins with @. Attribute Name on Point Attributes and Shape Attributes refuses one and shows an inline error; the value is not committed. This is what keeps "computed property" and "stored attribute" from ever being confused — an intrinsic can never be shadowed by an attribute of the same name.

Reading is the opposite: every other field on the list accepts @ names, which is the whole point of them.

The Apply To block

Six geometry nodes carry a standard Apply To row at the very top of the Properties panel, above everything else and separated by a hairline: Draw Points, Shape Smooth, Subdivide Shape, Point Relax, Points Along Path, and Point Advect. It is the same attribute name field described above, plus two rows that appear only as they become meaningful:

  • Apply To — an attribute or intrinsic name. Empty (the resting state) = the node acts on the whole stream, and the block is a single quiet row.
  • Rule — appears once a name is set. Member (value > 0.5, the group convention), Greater Than, or Less Than.
  • Value — appears under Greater Than / Less Than: the comparison threshold.

So Apply To: grp1 limits the node to a named group, and Apply To: scale · Greater Than · 4 limits it to the big points — same predicate system as Connect Points' From/To. An unresolvable name selects nothing (the typo does nothing, loudly in the field's warning state, rather than everything).

Intrinsics flip the rule automatically. Member is the tag idiom — it makes no sense next to a coordinate ("member of @x"?). So committing an intrinsic like @x into any rule-paired name field (Apply To, or Connect Points' From/To) flips a resting Member rule to Greater Than, in the same undo step: @x · Greater Than · 0 = everything right of center, read in the attribute's own units. An explicitly chosen comparator is never overridden, and renaming back to a tag leaves the rule alone.

What "acts on" means is each node's contract — Draw Points skips drawing, Point Relax pins without removing repulsion — see the node's own page.

  • Details panel — the same attribute data, for the selected node's outputs
  • docs/nodes/attribute-to-field.md — turning any attribute or intrinsic into a field
  • docs/nodes/point-attributes.md — writing attributes