Dials & Touch Strip
FreshOverview
Encoders on Stream Deck + combine a physical dial with a touch strip area for rich interaction and visual feedback through layouts.
Built-in Layouts
| Layout ID | Name | Description |
|---|---|---|
$X1 | Icon | Title and icon placeholders |
$A0 | Canvas | Full and partial canvas areas |
$A1 | Value | Title, icon, and numeric value |
$B1 | Indicator | Adds a bar to the $A1 design |
$B2 | Gradient | Color-mapped bar visualization |
$C1 | Double | Dual-value display |
Custom Layouts
Create custom JSON layouts within a 200x100 pixel canvas per action:
json
{
"$schema": "https://schemas.elgato.com/streamdeck/plugins/layout.json",
"id": "my-layout",
"items": [
{
"key": "title",
"type": "text",
"rect": [0, 0, 200, 30],
"text": "Volume",
"alignment": "center"
},
{
"key": "level",
"type": "bar",
"rect": [10, 40, 180, 20],
"subtype": 0
}
]
}Validation
Use the CLI validation tool to check that layout items stay within the 200x100 bounds.
Events
| Event | Trigger |
|---|---|
onDialDown | User presses the dial |
onDialUp | User releases the dial |
onDialRotate | User rotates the dial |
onTouchTap | User taps the touch strip |
typescript
@action({ UUID: "com.example.volume" })
export class VolumeAction extends SingletonAction {
override onDialRotate(ev: DialRotateEvent): void {
const { ticks } = ev.payload;
// ticks > 0 = clockwise, ticks < 0 = counter-clockwise
}
override onTouchTap(ev: TouchTapEvent): void {
// Handle touch strip tap
}
}Commands
| Command | Description |
|---|---|
setFeedbackLayout(layout) | Assign layout to action |
setFeedback(feedback) | Update layout item values |
setTriggerDescription(desc) | Configure interaction descriptions |
setImage(image?) | Set action image |
setTitle(title) | Set action title |
setSettings(settings) | Persist settings |
Updating Layout Values
typescript
await ev.action.setFeedback({
title: "Volume",
level: { value: 75 }
});Reserved Keys
The title and icon keys can be overridden by user customization in Stream Deck preferences, taking precedence over plugin-defined values.
See Also
- Touch Strip Layout Reference - Full layout item specifications