NarraLeaf

Nodes

The built-in node catalog, one page per palette category, with every node's signature.

The built-in catalog is 645 nodes across 28 categories. A category is the grouping you navigate in the palette, so these pages are organised the way the editor is. The nodes that Studio's built-in plugins add are listed separately, under Built-in plugins.

How to read a node

Each node is written like this:

Delay

blueprint.flow.delay · Latent

The first line under the heading is the node's type id — the value stored in the document, and what you would register from a plugin. After it come the flags that are true for that node:

FlagMeans
PureNo side effects and no exec pins. It computes its outputs when something reads them, and it is one of the conditions for use inside a Blueprint Value.
LatentSuspends the graph until it resolves. Not offered in a Blueprint Value (except Call Fn), an inline story value or a branch condition.

While Settings → General → Developer options is on, the palette also shows each node's type id on the right of its row.

Pure does not by itself mean the node works inside a Blueprint Value. That is a separate, narrower rule: the node must be pure and non-latent and belong to one of the allowed categories (Data, List, Math, Time, Text, Slider, Displayable, Element, Game, Localization), plus a short list of specific exceptions (Init and On Flush heads, non-latent Flow other than Skip Delay, local variable access, Memo, Call Fn, comments, Return Value, Get Saved Var, and five Page reads: Get Page Props, Get Page Param and the three Is Surface … reads). A Self node scoped to widgetMain is excluded regardless of its flags; inside a Blueprint Value you reach a widget through an Element literal and the Element-category reader.

Then the pin table:

PinDirectionTypeNotes
inin · exec—
durationin · datafloatSeconds. Accepts an on-card literal.
completedout · exec—Fires after the wait.
tokenout · dataTimerFeed to Skip Delay to cut the wait short.

Exec pins carry execution; data pins carry values. A type such as array<struct:nl.ending> is an array of endings, shown on the card as Ending list; the struct types are listed under Structs. Accepts an on-card literal means you can type the value into the node card instead of wiring an edge. Some nodes have dynamic pins, projected from a selected variable, a chosen fn's signature, or a case you appended. Those are described in prose, because there is no fixed table to print.

Availability

A node appearing in this catalog does not mean it appears in your palette. These filters apply:

  • Blueprint Value. A Blueprint Value offers only the nodes the rule above allows.
  • Inline story values. An inline story value or a branch condition refuses latent nodes.
  • Owner and widget capability. Self nodes only show in the blueprint of a widget that has that capability; a Set Slider Value is not offered inside a Text widget's blueprint.
  • Present bindings. An Element node only appears once the graph already holds a compatible Element, Element Flush, or Element Click node to wire it to.
  • List item context. Get List Item Index, Get List Item Key, Get List Item Count and Get List Item Props read the item an element is rendered for, so they appear only where a row can be in scope, such as the blueprint of an element inside a List item template. Get Field is offered everywhere, and reads the row when its Object is left unwired in such a place.
  • Story Action blueprints. A blueprint called from a story row is offered no node that drives the running game or its interface: no App, Localization, Network, Sound or Voice node, and almost none of Game.

When several compatible sources exist, the palette lists the node once. Adding it auto-connects to the source if there is exactly one; with more than one it leaves the target input open for you to choose.

Node families

Some nodes are variants of one operation, such as the six comparisons or the four keyboard heads. The palette lists each such set as a family.

  • Browsing. While the Search nodes box is empty, a family is one row. The row shows the family's name, and below it the category and the number of nodes, such as Math · 6 nodes. Hovering over the row lists its nodes. Choosing the row adds the family's first node, the one listed first in the table below. Element nodes are grouped the same way, with one row per family for each bound element.
  • Searching. A search lists every node of a family on its own row. Typing > or Greater Than finds Greater Than, and typing a family's name, such as Compare, lists all of its nodes.
  • Switching a placed node. The card of a node that belongs to a family has a ▾ button beside its title, Switch to another node of this kind. It lists the nodes of the family that the blueprint can hold, with a check mark beside the current one. Choosing another node changes the card in place.

When a card changes to another node of its family:

  • A wire stays connected when the new node has a matching pin that accepts it. A wire into bgmVolume on Set BGM Volume stays connected, now into soundVolume, when the card becomes Set SFX Volume.
  • A wire the new node cannot accept is removed.
  • A setting is kept when the new node has the same setting: 3 on an Integer literal stays 3 when the card becomes Float. Any other setting is removed, such as the key chosen on On Key Down when the card becomes Any Key Down, and the new node starts from its own defaults.
  • A value typed on the card moves to the matching pin when that pin takes the same type of value, and is removed otherwise.
  • Ctrl+Z (Cmd+Z on macOS) restores the previous node, its wires and its values in one step.

Families change only how the palette lists nodes. Every node keeps its own name and type id, and existing graphs are unchanged.

FamilyNodesCategory
On KeyOn Key Down, On Key Up, Any Key Down, Any Key UpEvents
On Gamepad ButtonOn Gamepad Button Down, On Gamepad Button Up, Any Gamepad Button Down, Any Gamepad Button UpEvents
LiteralString, Integer, Float, Boolean, Color, Vector2D, Rect, JSON, NullData
Convert TypeTo String, To Integer, To Float, To Boolean, To JSONData
Check TypeIs String, Is Number, Is Boolean, Is Array, Is Object, Is NullData
Trim WhitespaceTrim, Trim Start, Trim EndData
Change CaseTo Lower Case, To Upper Case, CapitalizeData
Replace TextReplace, Replace AllData
Pad TextPad Start, Pad EndData
RoundingRound, Floor, CeilMath
Random NumberRandom Integer, Random FloatMath
CompareEqual, Not Equal, Greater Than, Greater Than Or Equal, Less Than, Less Than Or EqualMath
Get Preference17 nodes: every Get … node under Preferences except Get Track Volume, starting with Get Auto ForwardGame
Set Preference17 nodes: every Set … node under Preferences except Set Track Volume, starting with Set Auto ForwardGame
Get Save InfoGet Save Time, Get Save Playtime, Get Save Line, Get Save Story, Get Save Preview, Get Save MetadataGame
Get Text StyleGet Font, Get Font Size, Get Font Weight, Get Text Color, Get Line Height, Get Text Align, Get Text Vertical Align, Get Wrap Mode, Get EffectsText, Element
Set Text StyleThe Set … nodes for the same nine propertiesText, Element
Get Image FramingGet Image Fit Mode, Get Image Flip X, Get Image Flip Y, Get Image Crop RectImage, Element
Set Image FramingThe Set … nodes for the same four propertiesImage, Element
Get Visible or EnabledGet Visible and Get Enabled of one widget type: Button, Container, Frame, Image, List, Slider, Switch or Text. As Element nodes: Get Button Visible and Get Button Enabled, and the same pair for each of those widgetsThe widget's page, Element
Set Visible or EnabledSet Visible and Set Enabled of one widget type, and the matching Element pairThe widget's page, Element

Text Style, Image Framing and Visible or Enabled are separate families for a widget's own nodes and for its Element nodes, and Visible or Enabled is a separate family for each widget type. The ▾ on a card lists only the nodes of the card's own family.

Categories

Each count is what the palette offers. A family counts as all of its nodes, so the number on a category's chip in the palette, which counts a family as one row, can be lower. Nodes hidden from the palette and kept so that older graphs still run are documented on their category's page and are not counted.

CategoryNodesCovers
Events54Entry points: lifecycle, input, Surface transitions, Broadcast.
Flow12Branching, loops, sequencing, delays.
Functions3Declaring a fn, calling it, returning from it.
Variables9Declaring and reading blueprint and persistent variables.
Data96Literals, conversion, predicates, JSON, strings, arrays, struct fields.
Math25Arithmetic, rounding, boolean logic, comparison.
Time15The clock, the calendar, and dates as text.
Game96Story control, dialog, preferences, saves, backlog.
App31Surface navigation, window, application lifetime.
Localization6The game's player-facing language, and its translation keys.
Network3HTTP requests and reading the response.
Displayable9Geometry, appearance variants, property animation.
Element137Everything above, aimed at a wired Element instead of self.
Image16Image assets and fill.
Text28Text content and typography.
Text Input3Editable text fields.
Button7Button label and pointer.
Container6Container layout and children.
Frame8The Page a Frame shows, and its params.
List32Runtime items, selection, scrolling, item context.
Slider9Value, range, and snapping.
Debug2Logging and in-graph comments.
Input2Which device the player is using, and whether an action is held.
Sound7Playing an interface clip, and the handle that reaches it again.
Voice5Playing a recorded line, and the dub language in force.
Component1The parameter that tells one placement of a component from another.
Switch9The Switch widget's checked state, and its enabled and visible flags.
Video14Playing, pausing, stopping and seeking a video widget, and its volume, mute, loop and speed.

On this page