> 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/controller/controller-buttons/controller-buttons/programming-a-button/value/parameter.md).

# Parameter

Targeting a parameter is one of the ways to program a button. It works similarly to how a button with the type [**Value**](/grid/controller/controller-buttons/controller-buttons/programming-a-button/value.md), but instead a button of type **Parameter** does not keep a value of its own. It reads and changes a **parameter** somewhere in the project.&#x20;

## Why Target a Parameter

Every parameter in Grid Studio can be controlled. Using a parameter as the target has three advantages:

* **One source of truth.** The parameter holds the value. Every button that targets it shows the same value.
* **No extra logic.** A press or a turn changes the parameter directly, without a workflow in between.
* **Any source can change it.** A parameter can also be changed by other systems, such as workflows or OSC. The buttons that target it update to match.

***

## Setting a Target

<figure><img src="https://1089527861-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1lzYXYTbE4lxMSWTSQTM%2Fuploads%2F5RsgpzccDPG3xs8LWpkT%2FController%20Button%20Parameter%20Target.png?alt=media&amp;token=59eb4b4f-c9e0-4f66-9974-86f298f964c1" alt=""><figcaption></figcaption></figure>

1. Select the button.
2. Set the **Type** to **Parameter**. For an encoder, set the **Mode** to **Parameter**. For a touch strip, set the **Source** to **Parameter**.
3. Set the **Target** to the parameter.
4. Set the **Value Type** to match the parameter, then set the **Value Mode**, **Step**, **Range**, and **Boundary**. See [**Values**](/grid/controller/controller-buttons/controller-buttons/programming-a-button/value.md).

### Picking the Target

There are two ways to pick the target:

* **Browse:** click the **Target** in the Inspector. A Project Tree pops up, and you can navigate through it to the parameter.
* **Drag and drop:** drag an object from the Project Tree and drop it onto the **Target**. If needed, go into the Inspector and dive into the specific parameter of that object.

{% hint style="info" %}
A parameter can be any parameter in the project, including the user parameters that can be added to an object.
{% endhint %}

***

## Several Buttons, One Parameter

Any number of buttons can target the same parameter. They can be buttons, encoders, and touch strips, on the same page, on different pages, or on different Controllers.

Because they all read and write the same parameter, they stay in sync. When one button changes the value, all the others show the new value immediately.

### Working With Shared Targets

* **Keep Range and Boundary consistent.** Each button applies its own Range and Boundary. If one button uses 1–5 and another uses 0–100 on the same parameter, they will limit the value differently and can cause confusion.
* **Use Value for private values.** If a button should not share its value with anything, use **Value** instead of **Parameter**.

### Other Sources of Change

Because the target is an ordinary parameter, it can be changed from anywhere else in Grid Studio, and the buttons follow:

* By a workflow, for example with a **Set Parameter** action
* By an Artboard widget such as a slider
* By external systems, since every parameter has its own OSC address (see **OSC Remote Control**)

This makes a button a control surface for a parameter, rather than the owner of a value.
