# SceneNode \ Attributes

Every object in your scene can carry extra pieces of information called **attributes** — small named values you attach to an object and read back later. Attributes can also be grouped into named **categories**, which lets one object keep separate attributes that share a name. The nodes on this page let you add, read, check for, and remove attributes, both on their own and inside a category.

Attributes are saved with the object. Reading one never changes it; setting or removing one changes only that single attribute and leaves the rest of the object untouched. There are also event nodes that react the moment an attribute is added, changed, or removed on an object — those are documented on the **Node Attribute Events** page.

## Get a node attribute

### Get Node Attribute (String)

Reads a named attribute from a scene object and gives it back as a piece of text.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node looks for the attribute called the name you provide on the object you connect and hands its value back as a piece of text. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold text. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Text</td><td>The text stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the-"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`label`</td></tr><tr><td>**Result** output</td><td>`Forklift A`</td></tr></tbody></table>

### Get Node Attribute (Number)

Reads a named attribute from a scene object and gives it back as a number.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node looks for the attribute called the name you provide on the object you connect and hands its value back as a number. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a number. If it is missing, or what is stored cannot be read as a number, the node stops with an error instead of giving you a result — so check with **Node Has Attribute** first if you are not sure.

#### Inputs

<table id="bkmrk-port-type-what-to-co-0"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-0"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Number</td><td>The number stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--0"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`maxLoad`</td></tr><tr><td>**Value** output</td><td>`1500`</td></tr></tbody></table>

### Get Node Attribute (Boolean)

Reads a named attribute from a scene object and gives it back as a true / false value.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node looks for the attribute called the name you provide on the object you connect and hands its value back as a true / false value. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a true / false value. If it is missing, or what is stored cannot be read as a true / false value, the node stops with an error instead of giving you a result — so check with **Node Has Attribute** first if you are not sure.

Saved values of `true`, `yes` or `on` are read as true, and `false`, `no` or `off` are read as false.

#### Inputs

<table id="bkmrk-port-type-what-to-co-1"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-1"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">True / false</td><td>The true / false value stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--1"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`inspected`</td></tr><tr><td>**Result** output</td><td>`true`</td></tr></tbody></table>

### Get Node Attribute (SceneNode)

Reads a named attribute from a scene object and gives it back as a scene node.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node looks for the attribute called the name you provide on the object you connect and hands its value back as a scene node. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a scene node. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-2"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-2"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Scene node</td><td>The scene node stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--2"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`assignedTo`</td></tr><tr><td>**Result** output</td><td>`<Operator>`</td></tr></tbody></table>

### Get Node Attribute (SceneState)

Reads a named attribute from a scene object and gives it back as a scene state.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node looks for the attribute called the name you provide on the object you connect and hands its value back as a scene state. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a scene state. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-3"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-3"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Scene state</td><td>The scene state stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--3"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`savedView`</td></tr><tr><td>**Result** output</td><td>`<FrontView>`</td></tr></tbody></table>

### Get Node Attribute (Sequence)

Reads a named attribute from a scene object and gives it back as a sequence.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node looks for the attribute called the name you provide on the object you connect and hands its value back as a sequence. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a sequence. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-4"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-4"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Sequence</td><td>The sequence stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--4"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`startupRoutine`</td></tr><tr><td>**Result** output</td><td>`<PowerOn>`</td></tr></tbody></table>

### Get Node Attribute (Variable)

Reads a named attribute from a scene object and gives it back as a variable.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node looks for the attribute called the name you provide on the object you connect and hands its value back as a variable, ready to pass on to any node that works with variables. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-5"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-5"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Variable</td><td>The value stored in the attribute, handed back as a variable.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--5"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`serviceCount`</td></tr><tr><td>**Result** output</td><td>a variable holding `12`</td></tr></tbody></table>

## Set a node attribute

### Set Node Attribute (String)

Saves a piece of text onto a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node attaches the attribute called the name you provide to the object you connect and stores a piece of text in it. If the object already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-6"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Text</td><td>The text to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-6"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Text</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--6"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`label`</td></tr><tr><td>**Value** input</td><td>`Forklift A`</td></tr></tbody></table>

### Set Node Attribute (Number)

Saves a number onto a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node attaches the attribute called the name you provide to the object you connect and stores a number in it. If the object already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-7"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Number</td><td>The number to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-7"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Number</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--7"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`maxLoad`</td></tr><tr><td>**Value** input</td><td>`1500`</td></tr></tbody></table>

### Set Node Attribute (Boolean)

Saves a true / false value onto a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node attaches the attribute called the name you provide to the object you connect and stores a true / false value in it. If the object already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-8"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">True / false</td><td>The true / false value to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-8"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">True / false</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--8"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td style="white-space: nowrap;">**Attribute Name** input</td><td>`inspected`</td></tr><tr><td style="white-space: nowrap;">**Value** input</td><td>`true`</td></tr></tbody></table>

### Set Node Attribute (SceneNode)

Saves a scene node onto a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node attaches the attribute called the name you provide to the object you connect and stores a scene node in it. If the object already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-9"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene node</td><td>The scene node to save a link to.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-9"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene node</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--9"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`assignedTo`</td></tr><tr><td>**Value** input</td><td>`<Operator>`</td></tr></tbody></table>

### Set Node Attribute (SceneState)

Saves a scene state onto a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node attaches the attribute called the name you provide to the object you connect and stores a scene state in it. If the object already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-10"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene state</td><td>The scene state to save a link to.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-10"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene state</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--10"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`savedView`</td></tr><tr><td>**Value** input</td><td>`<FrontView>`</td></tr></tbody></table>

### Set Node Attribute (Sequence)

Saves a sequence onto a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node attaches the attribute called the name you provide to the object you connect and stores a sequence in it. If the object already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-11"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Sequence</td><td>The sequence to save a link to.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-11"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Sequence</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--11"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td style="white-space: nowrap;">**Attribute Name** input</td><td>`startupRoutine`</td></tr><tr><td style="white-space: nowrap;">**Value** input</td><td>`<PowerOn>`</td></tr></tbody></table>

### Set Node Attribute (Variable)

Saves the value held in a variable onto a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. This node attaches the attribute called the name you provide to the object you connect and stores the value held in the variable you give it. If the object already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-12"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Variable</td><td>The variable whose value you want to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-12"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Variable</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--12"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`serviceCount`</td></tr><tr><td>**Value** input</td><td>a variable holding `12`</td></tr></tbody></table>

## Check or remove a node attribute

### Node Has Attribute

Checks whether a scene object has an attribute with a given name.

#### What it does

This node looks at the object you connect and tells you whether it already has an attribute saved under the name you provide. You get back **true** if it does and **false** if it does not. It only checks — nothing on the object is changed.

It is handy to run before reading or changing an attribute, to be sure it is there.

#### Inputs

<table id="bkmrk-port-type-what-to-co-13"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to check.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute to look for.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-13"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">True / false</td><td>**True** if the attribute exists, otherwise **false**.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--13"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`inspected`</td></tr><tr><td>**Result** output</td><td>**true** — the attribute exists</td></tr></tbody></table>

### Remove Node Attribute

Deletes a named attribute from a scene object.

#### What it does

This node removes the attribute saved under the name you provide from the object you connect. That one attribute and its value are deleted from the object; everything else about the object stays the same.

If the object has no attribute with that name, nothing happens.

#### Inputs

<table id="bkmrk-port-type-what-to-co-14"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to remove the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute to remove.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-14"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--14"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`tempNote`</td></tr></tbody></table>

## Get a node attribute in a category

### Get Node Attribute in Category (String)

Reads a named attribute kept in a category on a scene object and gives it back as a piece of text.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node looks for the attribute called the name you provide inside the category you name, on the object you connect and hands its value back as a piece of text. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold text. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute In Category** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-15"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category the attribute is kept in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-15"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Text</td><td>The text stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--15"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`label`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>`Forklift A`</td></tr></tbody></table>

### Get Node Attribute in Category (Number)

Reads a named attribute kept in a category on a scene object and gives it back as a number.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node looks for the attribute called the name you provide inside the category you name, on the object you connect and hands its value back as a number. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a number. If it is missing, or what is stored cannot be read as a number, the node stops with an error instead of giving you a result — so check with **Node Has Attribute In Category** first if you are not sure.

#### Inputs

<table id="bkmrk-port-type-what-to-co-16"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category the attribute is kept in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-16"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Number</td><td>The number stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--16"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`maxLoad`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>`1500`</td></tr></tbody></table>

### Get Node Attribute in Category (Boolean)

Reads a named attribute kept in a category on a scene object and gives it back as a true / false value.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node looks for the attribute called the name you provide inside the category you name, on the object you connect and hands its value back as a true / false value. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a true / false value. If it is missing, or what is stored cannot be read as a true / false value, the node stops with an error instead of giving you a result — so check with **Node Has Attribute In Category** first if you are not sure.

Saved values of `true`, `yes` or `on` are read as true, and `false`, `no` or `off` are read as false.

#### Inputs

<table id="bkmrk-port-type-what-to-co-17"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category the attribute is kept in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-17"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">True / false</td><td>The true / false value stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--17"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`inspected`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>`true`</td></tr></tbody></table>

### Get Node Attribute in Category (SceneNode)

Reads a named attribute kept in a category on a scene object and gives it back as a scene node.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node looks for the attribute called the name you provide inside the category you name, on the object you connect and hands its value back as a scene node. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a scene node. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute In Category** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-18"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category the attribute is kept in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-18"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Scene node</td><td>The scene node stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--18"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`assignedTo`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>`<Operator>`</td></tr></tbody></table>

### Get Node Attribute in Category (SceneState)

Reads a named attribute kept in a category on a scene object and gives it back as a scene state.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node looks for the attribute called the name you provide inside the category you name, on the object you connect and hands its value back as a scene state. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a scene state. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute In Category** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-19"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category the attribute is kept in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-19"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Scene state</td><td>The scene state stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--19"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`savedView`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>`<FrontView>`</td></tr></tbody></table>

### Get Node Attribute in Category (Sequence)

Reads a named attribute kept in a category on a scene object and gives it back as a sequence.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node looks for the attribute called the name you provide inside the category you name, on the object you connect and hands its value back as a sequence. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist and hold a sequence. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute In Category** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-20"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category the attribute is kept in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-20"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Sequence</td><td>The sequence stored in the attribute.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--20"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`startupRoutine`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>`<PowerOn>`</td></tr></tbody></table>

### Get Node Attribute in Category (Variable)

Reads a named attribute kept in a category on a scene object and gives it back as a variable.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node looks for the attribute called the name you provide inside the category you name, on the object you connect, and hands its value back as a variable. It only reads the object — it does not change the object or the attribute in any way.

The attribute should already exist. If it is missing, you get an empty result rather than an error, so it is still worth checking with **Node Has Attribute In Category** first.

#### Inputs

<table id="bkmrk-port-type-what-to-co-21"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to read the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute you want to read.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category the attribute is kept in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-21"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Variable</td><td>The value stored in the attribute, handed back as a variable.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--21"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`serviceCount`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>a variable holding `12`</td></tr></tbody></table>

## Set a node attribute in a category

### Set Node Attribute in Category (String)

Saves a piece of text into a category on a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node attaches the attribute called the name you provide, inside the category you name, to the object you connect and stores a piece of text in it. If that category already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-22"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to keep the attribute in.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Text</td><td>The text to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-22"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Text</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--22"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td style="white-space: nowrap;">**Attribute Name** input</td><td>`label`</td></tr><tr><td style="white-space: nowrap;">**Category** input</td><td>`Maintenance`</td></tr><tr><td style="white-space: nowrap;">**Value** input</td><td>`Forklift A`</td></tr></tbody></table>

### Set Node Attribute in Category (Number)

Saves a number into a category on a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node attaches the attribute called the name you provide, inside the category you name, to the object you connect and stores a number in it. If that category already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-23"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to keep the attribute in.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Number</td><td>The number to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-23"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Number</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--23"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`maxLoad`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Value** input</td><td>`1500`</td></tr></tbody></table>

### Set Node Attribute in Category (Boolean)

Saves a true / false value into a category on a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node attaches the attribute called the name you provide, inside the category you name, to the object you connect and stores a true / false value in it. If that category already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-24"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to keep the attribute in.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">True / false</td><td>The true / false value to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-24"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">True / false</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--24"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`inspected`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Value** input</td><td>`true`</td></tr></tbody></table>

### Set Node Attribute in Category (SceneNode)

Saves a scene node into a category on a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node attaches the attribute called the name you provide, inside the category you name, to the object you connect and stores a scene node in it. If that category already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-25"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to keep the attribute in.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene node</td><td>The scene node to save a link to.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-25"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene node</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--25"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td style="white-space: nowrap;">**Attribute Name** input</td><td>`assignedTo`</td></tr><tr><td style="white-space: nowrap;">**Category** input</td><td>`Maintenance`</td></tr><tr><td style="white-space: nowrap;">**Value** input</td><td>`<Operator>`</td></tr></tbody></table>

### Set Node Attribute in Category (SceneState)

Saves a scene state into a category on a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node attaches the attribute called the name you provide, inside the category you name, to the object you connect and stores a scene state in it. If that category already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-26"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to keep the attribute in.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene state</td><td>The scene state to save a link to.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-26"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Scene state</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--26"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`savedView`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Value** input</td><td>`<FrontView>`</td></tr></tbody></table>

### Set Node Attribute in Category (Sequence)

Saves a sequence into a category on a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node attaches the attribute called the name you provide, inside the category you name, to the object you connect and stores a sequence in it. If that category already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-27"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to keep the attribute in.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Sequence</td><td>The sequence to save a link to.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-27"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Sequence</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--27"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`startupRoutine`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Value** input</td><td>`<PowerOn>`</td></tr></tbody></table>

### Set Node Attribute in Category (Variable)

Saves the value held in a variable into a category on a scene object as a named attribute.

#### What it does

Every object in your scene can carry extra pieces of information called **attributes**, each one saved under a name you choose. Attributes can also be grouped into named **categories**, so a single object can keep separate attributes that share a name in different categories. This node attaches the attribute called the name you provide, inside the category you name, to the object you connect and stores the value held in the variable you give it. If that category already has an attribute with that name, its value is replaced; if not, the attribute is created.

The value you provide is also sent straight back out, so you can keep using it further along.

#### Inputs

<table id="bkmrk-port-type-what-to-co-28"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to add or change the attribute on.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name to save the attribute under.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to keep the attribute in.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Variable</td><td>The variable whose value you want to store.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-28"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Value**</td><td style="white-space: nowrap;">Variable</td><td>The same value you stored, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--28"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`serviceCount`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Value** input</td><td>a variable holding `12`</td></tr></tbody></table>

## Check, list, or remove attributes in a category

### Node Has Attribute In Category

Checks whether a scene object has an attribute with a given name inside a category.

#### What it does

This node looks at the object you connect and tells you whether it already has an attribute saved under the name you provide inside the category you name. You get back **true** if it does and **false** if it does not. It only checks — nothing on the object is changed.

#### Inputs

<table id="bkmrk-port-type-what-to-co-29"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to check.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute to look for.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to look in.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-29"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">True / false</td><td>**True** if the attribute exists in that category, otherwise **false**.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--29"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td style="white-space: nowrap;">**Attribute Name** input</td><td>`inspected`</td></tr><tr><td style="white-space: nowrap;">**Category** input</td><td>`Maintenance`</td></tr><tr><td style="white-space: nowrap;">**Result** output</td><td>**true** — the attribute exists</td></tr></tbody></table>

### Get Node Attribute Category Names

Lists the names of the attributes kept inside a category on a scene object.

#### What it does

Attributes on an object can be grouped into named **categories**. This node looks at the object you connect and gives you back the names of the attributes that are stored inside the category you name. The names come back as a list of separate pieces of text, so you can connect a node that steps through a list to handle them one at a time. It only reads the object — nothing is changed.

#### Inputs

<table id="bkmrk-port-type-what-to-co-30"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to look at.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category whose attribute names you want.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-30"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Result**</td><td style="white-space: nowrap;">Text</td><td>The names of the attributes found in that category, returned as a list of separate pieces of text. Connect a node that steps through a list to read them one by one.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--30"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr><tr><td>**Result** output</td><td>a list of names — e.g. `inspected`, `maxLoad`, `assignedTo`</td></tr></tbody></table>

### Remove Node Attribute From Category

Deletes a named attribute that is kept in a category on a scene object.

#### What it does

This node removes the attribute saved under the name you provide, inside the category you name, from the object you connect. That one attribute and its value are deleted from that category; everything else about the object stays the same.

If no attribute with that name exists in the category, nothing happens.

#### Inputs

<table id="bkmrk-port-type-what-to-co-31"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s **Execute** output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The scene object you want to remove the attribute from.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The name of the attribute to remove.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The name of the category to remove it from.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-31"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same object you connected, passed straight through so you can keep using it.</td></tr><tr><td style="white-space: nowrap;">**Attribute Name**</td><td style="white-space: nowrap;">Text</td><td>The attribute name you provided, passed through.</td></tr><tr><td style="white-space: nowrap;">**Category**</td><td style="white-space: nowrap;">Text</td><td>The category name you provided, passed through.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-the--31"><tbody><tr><td>**SceneNode** input</td><td>the `<Forklift>` object</td></tr><tr><td>**Attribute Name** input</td><td>`tempNote`</td></tr><tr><td>**Category** input</td><td>`Maintenance`</td></tr></tbody></table>