> For the complete documentation index, see [llms.txt](https://stage-precision.gitbook.io/grid/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stage-precision.gitbook.io/grid/touch-designer-integration/parameter-control/send-parameter-values-from-grid-studio.md).

# Send parameter values from Grid Studio

Send named SPNet values from Grid Studio using Workflow Actions or Modifier nodes to control parameters in TouchDesigner.

Parameter values are sent through **Workflow Actions** or **Modifier nodes** associated with an SPNet Sender.

Drag the SPNet Object into a Workflow or Modifier graph, then choose the operation for the type of value you want to send.

### 1. Create the SPNet Sender

1. Add an **SPNet Object** to the Project Tree.
2. Configure it as a **Sender**.
3. Use these connection settings:

| Setting     | Value          |
| ----------- | -------------- |
| Destination | `237.37.37.37` |
| UDP port    | `37373`        |

You can reuse an existing SPNet Sender configured for this destination.

### 2. Choose a Workflow or Modifier

| Method          | Use it for                                                                                              |
| --------------- | ------------------------------------------------------------------------------------------------------- |
| Workflow Action | Send a value when an event or action occurs, such as a button press or a change in your project logic.  |
| Modifier node   | Send values supplied by a processing chain, such as a changing parameter or a calculated control value. |

Both methods use the SPNet Object as their sending connection.

### Send through a Workflow

1. Open the Workflow you want to use.
2. Drag the **SPNet Sender Object** from the Project Tree into the Workflow.
3. From the available actions, choose the operation for the value type you want to send.
4. Configure the outgoing name and value.
5. Connect the action to the event or logic that should execute it.

For the first TouchDesigner example, send:

| Setting | Value        |
| ------- | ------------ |
| Name    | `brightness` |
| Type    | Float        |
| Value   | `0.5`        |

Start the SPNet Sender and trigger the Workflow so the send action executes.

```
Workflow Event
    → SPNet Send Action
    → SPNet Sender
    → TouchDesigner
```

The value is sent when the action executes. Trigger the action again to send another value.

### Send through a Modifier

1. Open the Modifier graph you want to use.
2. Drag the **SPNet Sender Object** from the Project Tree into the graph.
3. Choose the sending operation for the required value type.
4. Configure the outgoing name.
5. Connect the value you want to send to the SPNet node.

For example, use the name `brightness` and supply a changing numeric value from your Modifier chain.

```
Value Source
    → Modifier Processing
    → SPNet Send Node
    → SPNet Sender
    → TouchDesigner
```

Start the SPNet Sender and ensure the Modifier chain is processing its input.

### Names and value types

The outgoing name identifies the control in TouchDesigner.

For example:

| Name         | Type    | Example value |
| ------------ | ------- | ------------- |
| `brightness` | Float   | `0.5`         |
| `speed`      | Float   | `1.2`         |
| `enabled`    | Integer | `1`           |
| `title`      | String  | `Welcome`     |

Choose a value type that matches the intended control.

For numeric values, use the **SPNet Generic CHOP** in TouchDesigner. For strings, use the **SPNet Generic DAT**.

### Continue in TouchDesigner

For the brightness example, configure an SPNet Generic CHOP with:

| Parameter       | Value          |
| --------------- | -------------- |
| Data Type       | `Float`        |
| Name Filter     | `brightness`   |
| Timeout ms      | `0`            |
| Port            | `37373`        |
| Multicast Group | `237.37.37.37` |

The incoming value is available through the `brightness` channel.

{% hint style="info" %}
Timeout defaults to zero on the Generic operators. This keeps the latest value available between updates, including values sent only when a Workflow Action executes.
{% endhint %}
