HomeDeveloper docsAll 44 Blueprint node types, with complete examples
Examples by kind 14 min read

All 44 Blueprint node types, with complete examples

Concrete configurations and downloadable validated graphs for every NODE_TYPES entry, from event to cooldown.

One example for each node.type

These 44 types come from NODE_TYPES in the documented revision. Every link provides a complete validated Blueprint v2 document with a path that reaches the sample node. The displayed snippet is the central node; the download includes its event, connections and required consumers.

These JSON files describe the stored Blueprint v2 subdocument. They are development fixtures, not an installable module, a complete Builder project or a campaign archive. Recreate the nodes in the editor, or use the fixtures in isolated contributor tests. This guide does not assume a JSON import button in the Smart Object editor.

Download the complete example bundle or the validator. Every example uses original synthetic data. The host's internal Python evaluator is for source development; browser modules must use the public SDK.

node.typeRoleConcrete useJSON
eventexecutionStart the interact graph; then request state:open.Complete graph
lightactionEnable a chosen native light by targetId; dynamic lighting must be available.Complete graph
soundactionPlay the chosen campaign sound at volume 0.5.Complete graph
stateactionSet the door to open; no extra event is emitted.Complete graph
interactactionRequest a referenced door’s interaction; the server executes the queued chain and enforces its limits.Complete graph
conditionbranchCheck closed and choose true → open. Connected Test overrides the fallback state check.Complete graph
sequenceexecutionRun then1 → open; append then2–then4 for ordered actions.Complete graph
spriteactionUse a campaign image on a compatible door/image Target; preserve the authored box.Complete graph
propertyvalueRead starting state → compare closed → condition → open.Complete graph
comparevalueReturn whether the state is closed; its Boolean result feeds condition.test.Complete graph
referencevalueSend an element UUID from door to a state action’s target input.Complete graph
revealactionReveal a secret door; use a compatible door target.Complete graph
barrieractionLet movement pass through a door without changing its other barrier channels.Complete graph
soundControlactionStop a selected track; choose volume for an explicit volume adjustment.Complete graph
flameactionLight a composed torch’s configured enabled components; preserve its mechanism.Complete graph
allvalueRequire two connected closed comparisons to be true; fewer than two inputs returns false.Complete graph
anyvalueAccept either of two closed comparisons; at least two inputs are required.Complete graph
getVariablevalueRead Boolean element variable ready, default true → condition → open.Complete graph
setVariableactionStore Boolean ready=true in the element scope.Complete graph
compareValuevalueCompare a Boolean value to false; an unconnected Boolean Value defaults to false.Complete graph
emitEventactionQueue signal:ready on Self; the included receiver requests state:open.Complete graph
delayexecutionWait 3 seconds before open; the evaluator exposes a continuation, the server schedules it.Complete graph
timeractionStart a 3-second one-shot timer whose expiry emits signal:ready.Complete graph
switchbranchMatch text open to case1 → open; unmatched values use default.Complete graph
randombranchChoose between two equally weighted branches; local deterministic evaluator defaults to branch1.Complete graph
elementGroupvalueSend two ordered door UUIDs to a state target; the runtime resolves each member.Complete graph
lightReferencevalueBind a native light through light → light.target.Complete graph
soundReferencevalueBind a sound through sound → sound.target.Complete graph
eventContextvalueRead trusted occupancy count → numeric comparison1 → condition → open.Complete graph
moveactionMove a compatible element one grid cell on x; dx/dy are cell units.Complete graph
rotateactionRotate a compatible element 90 degrees; region rotations must be multiples of 90.Complete graph
setInteractionactionEnable direct player interaction for a compatible door or mechanism.Complete graph
setRegionactionEnable presence detection on the region owner; a door Target is incompatible.Complete graph
setVisibilityactionShow artwork on a compatible visual Target, without changing mechanism state.Complete graph
setAppearanceactionChoose a material for a compatible dynamic surface Target; preserve its base restoration data.Complete graph
showMessageactionShow original text to the trigger audience after server authorization.Complete graph
showHandoutactionPresent an existing authorized journal to trigger; use a real campaign journal ID.Complete graph
requestRollactionAsk the trigger to roll 1d20+2 with a public result. The recipient chooses Roll; the graph continues without a result branch.Complete graph
setQuestStatusactionRequest active status for an existing campaign quest through a GM-authored action; this grants no general journal editing permission.Complete graph
cameraFocusactionFocus trigger’s camera at 25%, 40% scene coordinates.Complete graph
teleportactionMove the verified trigger token to a compatible same-scene destination; requires token context.Complete graph
counterbranchPass on the second event, preserving memory between runs.Complete graph
oncebranchPass once, then choose false on subsequent events with the same node memory.Complete graph
cooldownbranchPass immediately, then block for 10 seconds using the server clock.Complete graph

Use and verify the examples

In the editor, create a compatible owner and the nodes from the downloaded graph; bind resources through real selectors. File IDs are synthetic. Validation checks shape and evaluation predicts actions; neither resolves permissions, resource existence or target compatibility. The setRegion graph belongs to a region; setAppearance uses an explicit dynamic surface reference. Bind actual targets before live use. A predicted action is not proof of server application.

Run the fixture in a development installation

Extract the example bundle to data/blueprint-examples inside a disposable checkout of the documented host. From the checkout root, run:

sh
uv run --locked python data/blueprint-examples/check-examples.py --host .

The checker configures an in-memory database, blocks database queries and calls the real clean_blueprint and evaluate_graph functions. It validates all four object kinds, both connection kinds and all 44 node types, including requestRoll and setQuestStatus. It checks both roll visibilities, all six quest statuses and continuing execution without drawing dice or changing journals. This verifies document shape and predicted actions. Test behavior is still needed to check real targets, authorization and the complete server chain.

requestRoll validates its dice expression, label, visibility (public or gm) and audience, but only predicts a prompt. Eligible recipients explicitly roll through the native window; streamers receive no roll request. setQuestStatus binds an existing campaign quest and accepts draft, available, active, completed, failed or archived. Live execution uses an active GM authority through the journal service; interacting players gain no general journal editing permission. A synthetic UUID in resources.quest is not proof of quest ownership. The checker resumes Delay through the real continuation and evaluates Counter twice while preserving memory. Interact, Emit event and Timer request later work: the local evaluator does not execute receiver graphs. Teleport requires a real triggering token; invented browser context does not authorize movement.

Central configuration of every example

event

Start the interact graph; then request state:open.

json
{
  "id": "start",
  "type": "event",
  "x": 40,
  "y": 80,
  "event": "interact"
}

Download complete Blueprint for event

light

Enable a chosen native light by targetId; dynamic lighting must be available.

json
{
  "id": "sample",
  "type": "light",
  "x": 300,
  "y": 80,
  "targetId": "22222222-2222-4222-8222-222222222222",
  "enabled": true
}

Download complete Blueprint for light

sound

Play the chosen campaign sound at volume 0.5.

json
{
  "id": "sample",
  "type": "sound",
  "x": 300,
  "y": 80,
  "trackId": "33333333-3333-4333-8333-333333333333",
  "volume": 0.5
}

Download complete Blueprint for sound

state

Set the door to open; no extra event is emitted.

json
{
  "id": "sample",
  "type": "state",
  "x": 300,
  "y": 80,
  "targetState": "open"
}

Download complete Blueprint for state

interact

Request a referenced door’s interaction; the server executes the queued chain and enforces its limits.

json
{
  "id": "sample",
  "type": "interact",
  "x": 300,
  "y": 80
}

Download complete Blueprint for interact

condition

Check closed and choose true → open. Connected Test overrides the fallback state check.

json
{
  "id": "sample",
  "type": "condition",
  "x": 300,
  "y": 80,
  "state": "closed"
}

Download complete Blueprint for condition

sequence

Run then1 → open; append then2–then4 for ordered actions.

json
{
  "id": "sample",
  "type": "sequence",
  "x": 300,
  "y": 80
}

Download complete Blueprint for sequence

sprite

Use a campaign image on a compatible door/image Target; preserve the authored box.

json
{
  "id": "sample",
  "type": "sprite",
  "x": 300,
  "y": 80,
  "appearance": "asset",
  "assetId": "44444444-4444-4444-8444-444444444444"
}

Download complete Blueprint for sprite

property

Read starting state → compare closed → condition → open.

json
{
  "id": "sample",
  "type": "property",
  "x": 300,
  "y": 80,
  "property": "state"
}

Download complete Blueprint for property

compare

Return whether the state is closed; its Boolean result feeds condition.test.

json
{
  "id": "sample",
  "type": "compare",
  "x": 300,
  "y": 80,
  "state": "closed"
}

Download complete Blueprint for compare

reference

Send an element UUID from door to a state action’s target input.

json
{
  "id": "sample",
  "type": "reference",
  "x": 300,
  "y": 80,
  "targetId": "11111111-1111-4111-8111-111111111111"
}

Download complete Blueprint for reference

reveal

Reveal a secret door; use a compatible door target.

json
{
  "id": "sample",
  "type": "reveal",
  "x": 300,
  "y": 80
}

Download complete Blueprint for reveal

barrier

Let movement pass through a door without changing its other barrier channels.

json
{
  "id": "sample",
  "type": "barrier",
  "x": 300,
  "y": 80,
  "channel": "movement",
  "mode": "pass"
}

Download complete Blueprint for barrier

soundControl

Stop a selected track; choose volume for an explicit volume adjustment.

json
{
  "id": "sample",
  "type": "soundControl",
  "x": 300,
  "y": 80,
  "trackId": "33333333-3333-4333-8333-333333333333",
  "action": "stop",
  "volume": 0.5
}

Download complete Blueprint for soundControl

flame

Light a composed torch’s configured enabled components; preserve its mechanism.

json
{
  "id": "sample",
  "type": "flame",
  "x": 300,
  "y": 80,
  "enabled": true
}

Download complete Blueprint for flame

all

Require two connected closed comparisons to be true; fewer than two inputs returns false.

json
{
  "id": "sample",
  "type": "all",
  "x": 300,
  "y": 80
}

Download complete Blueprint for all

any

Accept either of two closed comparisons; at least two inputs are required.

json
{
  "id": "sample",
  "type": "any",
  "x": 300,
  "y": 80
}

Download complete Blueprint for any

getVariable

Read Boolean element variable ready, default true → condition → open.

json
{
  "id": "sample",
  "type": "getVariable",
  "x": 300,
  "y": 80,
  "scope": "element",
  "name": "ready",
  "valueType": "boolean",
  "default": true
}

Download complete Blueprint for getVariable

setVariable

Store Boolean ready=true in the element scope.

json
{
  "id": "sample",
  "type": "setVariable",
  "x": 300,
  "y": 80,
  "scope": "element",
  "name": "ready",
  "valueType": "boolean",
  "value": true
}

Download complete Blueprint for setVariable

compareValue

Compare a Boolean value to false; an unconnected Boolean Value defaults to false.

json
{
  "id": "sample",
  "type": "compareValue",
  "x": 300,
  "y": 80,
  "valueType": "boolean",
  "operator": "eq",
  "expected": false
}

Download complete Blueprint for compareValue

emitEvent

Queue signal:ready on Self; the included receiver requests state:open.

json
{
  "id": "sample",
  "type": "emitEvent",
  "x": 300,
  "y": 80,
  "scope": "element",
  "name": "ready"
}

Download complete Blueprint for emitEvent

delay

Wait 3 seconds before open; the evaluator exposes a continuation, the server schedules it.

json
{
  "id": "sample",
  "type": "delay",
  "x": 300,
  "y": 80,
  "seconds": 3
}

Download complete Blueprint for delay

timer

Start a 3-second one-shot timer whose expiry emits signal:ready.

json
{
  "id": "sample",
  "type": "timer",
  "x": 300,
  "y": 80,
  "name": "ready",
  "action": "start",
  "seconds": 3
}

Download complete Blueprint for timer

switch

Match text open to case1 → open; unmatched values use default.

json
{
  "id": "sample",
  "type": "switch",
  "x": 300,
  "y": 80,
  "valueType": "text",
  "value": "open",
  "cases": [
    {
      "id": "case1",
      "value": "open"
    }
  ]
}

Download complete Blueprint for switch

random

Choose between two equally weighted branches; local deterministic evaluator defaults to branch1.

json
{
  "id": "sample",
  "type": "random",
  "x": 300,
  "y": 80,
  "weights": [
    1,
    1
  ]
}

Download complete Blueprint for random

elementGroup

Send two ordered door UUIDs to a state target; the runtime resolves each member.

json
{
  "id": "sample",
  "type": "elementGroup",
  "x": 300,
  "y": 80,
  "name": "Gates",
  "memberType": "element",
  "targetIds": [
    "11111111-1111-4111-8111-111111111111",
    "11111111-1111-4111-8111-111111111112"
  ]
}

Download complete Blueprint for elementGroup

lightReference

Bind a native light through light → light.target.

json
{
  "id": "sample",
  "type": "lightReference",
  "x": 300,
  "y": 80,
  "targetId": "22222222-2222-4222-8222-222222222222"
}

Download complete Blueprint for lightReference

soundReference

Bind a sound through sound → sound.target.

json
{
  "id": "sample",
  "type": "soundReference",
  "x": 300,
  "y": 80,
  "trackId": "33333333-3333-4333-8333-333333333333"
}

Download complete Blueprint for soundReference

eventContext

Read trusted occupancy count → numeric comparison1 → condition → open.

json
{
  "id": "sample",
  "type": "eventContext",
  "x": 300,
  "y": 80,
  "property": "count"
}

Download complete Blueprint for eventContext

move

Move a compatible element one grid cell on x; dx/dy are cell units.

json
{
  "id": "sample",
  "type": "move",
  "x": 300,
  "y": 80,
  "dx": 1,
  "dy": 0
}

Download complete Blueprint for move

rotate

Rotate a compatible element 90 degrees; region rotations must be multiples of 90.

json
{
  "id": "sample",
  "type": "rotate",
  "x": 300,
  "y": 80,
  "degrees": 90
}

Download complete Blueprint for rotate

setInteraction

Enable direct player interaction for a compatible door or mechanism.

json
{
  "id": "sample",
  "type": "setInteraction",
  "x": 300,
  "y": 80,
  "enabled": true
}

Download complete Blueprint for setInteraction

setRegion

Enable presence detection on the region owner; a door Target is incompatible.

json
{
  "id": "sample",
  "type": "setRegion",
  "x": 300,
  "y": 80,
  "enabled": true
}

Download complete Blueprint for setRegion

setVisibility

Show artwork on a compatible visual Target, without changing mechanism state.

json
{
  "id": "sample",
  "type": "setVisibility",
  "x": 300,
  "y": 80,
  "visible": true
}

Download complete Blueprint for setVisibility

setAppearance

Choose a material for a compatible dynamic surface Target; preserve its base restoration data.

json
{
  "id": "sample",
  "type": "setAppearance",
  "x": 300,
  "y": 80,
  "assetId": "44444444-4444-4444-8444-444444444444"
}

Download complete Blueprint for setAppearance

showMessage

Show original text to the trigger audience after server authorization.

json
{
  "id": "sample",
  "type": "showMessage",
  "x": 300,
  "y": 80,
  "text": "The gate answers.",
  "audience": {
    "scope": "trigger"
  }
}

Download complete Blueprint for showMessage

showHandout

Present an existing authorized journal to trigger; use a real campaign journal ID.

json
{
  "id": "sample",
  "type": "showHandout",
  "x": 300,
  "y": 80,
  "journalId": "55555555-5555-4555-8555-555555555555",
  "audience": {
    "scope": "trigger"
  }
}

Download complete Blueprint for showHandout

requestRoll

Ask the trigger to roll 1d20+2 with a public result. The recipient chooses Roll; the graph continues without a result branch.

json
{
  "id": "sample",
  "type": "requestRoll",
  "x": 300,
  "y": 80,
  "expression": "1d20+2",
  "label": "Inspect the chest",
  "visibility": "public",
  "audience": {
    "scope": "trigger"
  }
}

Download complete Blueprint for requestRoll

setQuestStatus

Request active status for an existing campaign quest through a GM-authored action; this grants no general journal editing permission.

json
{
  "id": "sample",
  "type": "setQuestStatus",
  "x": 300,
  "y": 80,
  "journalId": "88888888-8888-4888-8888-888888888888",
  "status": "active"
}

Download complete Blueprint for setQuestStatus

cameraFocus

Focus trigger’s camera at 25%, 40% scene coordinates.

json
{
  "id": "sample",
  "type": "cameraFocus",
  "x": 300,
  "y": 80,
  "focusX": 25,
  "focusY": 40,
  "audience": {
    "scope": "trigger"
  }
}

Download complete Blueprint for cameraFocus

teleport

Move the verified trigger token to a compatible same-scene destination; requires token context.

json
{
  "id": "sample",
  "type": "teleport",
  "x": 300,
  "y": 80,
  "destinationId": "66666666-6666-4666-8666-666666666666"
}

Download complete Blueprint for teleport

counter

Pass on the second event, preserving memory between runs.

json
{
  "id": "sample",
  "type": "counter",
  "x": 300,
  "y": 80,
  "target": 2
}

Download complete Blueprint for counter

once

Pass once, then choose false on subsequent events with the same node memory.

json
{
  "id": "sample",
  "type": "once",
  "x": 300,
  "y": 80
}

Download complete Blueprint for once

cooldown

Pass immediately, then block for 10 seconds using the server clock.

json
{
  "id": "sample",
  "type": "cooldown",
  "x": 300,
  "y": 80,
  "seconds": 10
}

Download complete Blueprint for cooldown

Test as GM and player

Run Simulate to inspect one local event. Then use Test behavior to rehearse through the server; its changes are rolled back. Generate or update the scene as GM, then test a synthetic scene with a GM and an authorized player. Verify that a streamer cannot write. After editing the project again, use Update scene before expecting different live behavior.

For Target nodes, test a compatible real resource, a missing UUID and a resource from another campaign. For messages/handouts, test trigger audience and a second player. For memory/time, repeat with the same node and then intentionally reset memory through GM controls. Inspect every action outcome in Automation, including unsupported targets.

How to use AI to adapt any node

text
I target Gravewright 0.3.1, source 0e91fef. Adapt the complete Blueprint for node [type] to [goal]. Inspect blueprints.py, blueprint_runtime.py and the Map Builder guide. Distinguish document validation, evaluator prediction and server application. Select a compatible owner/Target and campaign-owned resources. Return complete JSON, editor steps, expected result and GM/player tests for missing target, permission denial and repetition. Preserve typed ports, memory and continuations where relevant.

All object kinds · execution/data connections