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.
| Node | Parameter | Reads | Domain |
|---|---|---|---|
| Point Delete | Attribute | in | per-point |
| Path Delete | Attribute | shape_in | per-path |
| Round Corners | Select Attribute | shape_in | per-vertex |
| Label Points | Mask Attribute | points_in | per-point |
| Point Relax | Scale Attribute | points_in | per-point |
| Trim Path | Delay Attribute | shape_in | per-path |
| Shape Along Path | Delay Attribute | shape_in | per-path |
| Attribute to Field | Attribute | in | per-point |
| Clone to Points | Group | points_in | per-point |
| Clone to Points | Group By | shapes_in | per-path |
| Draw Instances | Group | points_in | per-point |
| Draw Instances | Offset Attribute | points_in | per-point |
| Point Attributes | Attribute Name | (creates) | per-point |
| Shape Attributes | Attribute Name | (creates) | per-vertex |
| Shape Attributes | Group By | shape_in | per-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:
| Name | Meaning |
|---|---|
@index | Position in the list, starting at 0. Typing bare index reads the same value — unless something upstream deliberately wrote an index order, which then wins |
@id | Stable ID — survives filtering and reordering |
@x / @y | Position |
@num | Total number of elements |
@indexnorm | @index as 0–1 |
@rand01 | Random 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
| State | Signal |
|---|---|
| Empty | Shows @none — one spelling everywhere. What empty does is the node's documentation, not its placeholder. |
| Resolved | Kind-coloured dot, plus the value range on the right |
| Intrinsic | Accent dot, computed on the right |
| Not on the stream | Amber ⚠ with a tooltip naming what is available |
| Stream unknown | Nothing — see below |
@ on a name-creating field | Red, 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, orLess 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.
Related
- 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 fielddocs/nodes/point-attributes.md— writing attributes