Details Panel
Glanceable, always-truthful overview of whatever data flows through the selected node. Not an editor — a mirror of engine state that helps you build a mental model as data moves through the graph.
The Details panel is the second tab in the Properties panel (the first is Parameters). Switching between nodes keeps whichever tab you last opened — selection does not reset the tab.
Domains
Details is organised by domain. A section is rendered only when the selected node has an output port of that domain's type — a Circle node shows just Geometry; a Noise node shows Raster + Values + Fields. Within a section, empty states are explicit ("No attributes on this output"), so the absence of data is always visible rather than hidden.
Domains, in display order:
- Geometry — shape and points output. Shows point count, path count, and a list of point + path attributes.
- Raster — texture output(s). Shows
width × height · formatper port. - Text — text layout data. Shows content preview, font, size, glyph/line count, bounds.
- Fields — scalar / vector / color field output(s). Shows port name and source kind (e.g.
noise (Perlin, fBm Standard),raster,constant 0.5). - Values — literal scalar / vec2 / vec3 / color output(s). Shows the raw value per port.
When a node has multiple output ports of the same domain, each appears as its own row in that domain's section (e.g. Noise emits both scalarField and vectorField under Fields).
Attribute rows
Every attribute entry follows the same row layout:
● name value scalar- Coloured dot — matches the port-type colour used in the node graph (scalar cyan, vec2 yellow, etc.).
- Name — attribute key. Built-ins (
index,curveu,rotation,scale,opacity,color,strokeWidth, …) render at full brightness. User-defined names get acustombadge. - Value summary — see below.
- Type chip —
scalar,vec2,vec3,vec4,string.
Clicking a row copies the attribute name to the clipboard — useful for typing into downstream ShapeAttributes / PointAttributes / AttributeToField Custom fields.
Value summaries
The value column communicates behaviour, not detail:
| Case | Label | Tone |
|---|---|---|
| Constant (min == max) | 0.5 | constant |
| Numeric range | 0.1 → 2.5 | range |
| Vec with all components constant | (0.5, 0.3) | constant |
| Vec with any component varying | varies | varies |
| Non-numeric (string) | varies | varies |
| Missing / count 0 | — | absent |
Integer-typed attributes (index, glyphIndex, …) are detected from the bounds and render without decimals.
Ordering
Within each attribute list, built-in names sort first in declaration order, then user-defined names sort alphabetically. This keeps the always-present built-ins at predictable positions across nodes.
Raster rows
out 1920 × 1080 · RGBA · f16Engine emits a friendly format label per port: RGBA · f16 (the internal working format), RGBA · sRGB u8, R · f16, etc.
Field rows
● scalarField noise (Perlin, fBm Standard)
● vectorField noise (Perlin, fBm Standard)Fields are lazy functions — the panel shows the source kind (how the field is generated) rather than sampling it. Source labels cover: noise, random, raster, constant, sdf, gradient, oscillate, voronoi, remap, field math, attribute lookup.
Text rows
"Hello world"
11 glyphs · 1 line
Inter 400 · 48px
bounds 184 × 56Shows a truncated content preview, glyph/line counts, resolved font + size, and the layout bounding box.
Value rows
● scalar 0.47 scalar
● vec2 (0.21, 0.88) vec2Disconnected nodes
Selecting a node that isn't yet wired to the composition's Output still populates its domains. The editor sends the selected node IDs to the engine as additional reachability roots, so the engine evaluates the selected node and its upstream chain regardless of whether the chain reaches the Output node. This lets you inspect work-in-progress before fully wiring it up.
Consumer-only nodes
A small whitelist of consumer-only nodes (currently just AttributeToField) doesn't produce geometry themselves but reads attributes from upstream. Their Details panel surfaces the upstream geometry with a Consumes from <UpstreamName> label so it's obvious where the data is coming from.
Layer fallback
When no single node is selected but a layer is active, Details reflects the layer's Output node — the compositing sink. Use this to see the final layer-level data without having to click into the graph.
Live updates
Details refresh on every render — editing any upstream parameter that changes attribute values shows the new range within one frame. Selection changes also trigger a re-render, so clicking a disconnected node pulls fresh data for it immediately.