Build an interactive UI Choice on Stream Deck
Display choices on Stream Deck buttons, wait for a response or continue the automation, process selections, manage per-zone queues and dismiss pending choices.
AlphaResult
Streaming Hub can temporarily turn a group of Stream Deck buttons into an interactive choice. For example, an automation can ask an operator to:
- approve or reject a donation;
- select the winner of a prediction;
- choose an OBS scene;
- confirm a potentially disruptive action.
The Choice Create action displays the available choices. A choice can pause the current automation until the operator responds, or it can let the automation continue and report the answer through the UI Choice Selected signal.
Before you start
You need:
- the Stream Deck bridge enabled in Streaming Hub;
- connector version 0.5.0 or later installed in the controller application;
- the bridge URL and token configured in the connector;
- enough controller buttons for the choices you want to display.
For installation and bridge setup, follow Stop or mute Piper TTS from Stream Deck.
Step 1. Create a UI Zone
Open the Stream Deck plugin project settings in Streaming Hub and add or verify a UI Zone. The default zone is:
| Field | Value |
|---|---|
| ID | mod |
| Description | Moderation choices |
| Start Index | 0 |
| Button Count | 4 |
A UI Zone is a logical group of buttons. Each zone has its own active choice and its own queue. Different zones can display choices at the same time without blocking one another.
Step 2. Add UI Choice buttons to the controller
In the Elgato Stream Deck or StreamDock application, add the Streaming Hub UI Choice action to every button that belongs to the zone.
Configure the buttons as follows:
| Button | UI Zone | Button Index |
|---|---|---|
| First | mod | 0 |
| Second | mod | 1 |
| Third | mod | 2 |
| Fourth | mod | 3 |
Every button in the group uses the same UI Zone and a unique Button Index.
The displayed title and image are controlled by Streaming Hub while a choice is active. When the zone queue becomes empty, the connector restores the buttons to their normal appearance.
Step 3. Create the choices
Add StreamDeck → UI Choice → Choice Create to an automation.
Configure:
| Field | Example | Purpose |
|---|---|---|
| Prompt ID | donation_moderation | Stable identifier used by UI Choice Selected and targeted dismiss actions |
| UI Zone | mod | Button group on which the choices appear |
| Execution Mode | Wait for response | Whether this automation pauses |
| Timeout | After N seconds | Whether the visible choice expires |
| Timeout Seconds | 15 | Response window after the choice becomes visible |
Add at least one item to Choices. Each item has:
- ID — the machine-readable result, such as
approve; - Title — text displayed on the Stream Deck button;
- optional visual fields such as Kind or Image.
Choices are assigned to registered buttons in ascending Button Index order.
For an approval prompt:
| Button Index | Choice ID | Title |
|---|---|---|
| 0 | approve | Approve |
| 1 | reject | Reject |
Use the Choice ID in conditions and signals. The displayed Title can change without breaking the automation.
Execution modes
Wait for response
The current automation pauses until the operator selects a choice, the response window expires, or another action dismisses the request.
The result is written to runtime values including:
runtime.prompt.result;runtime.prompt.status;runtime.prompt.timedOut;runtime.prompt.<PromptId>.result;runtime.prompt.<PromptId>.status.
Possible status values are:
Selected;TimedOut;Dismissed;Cancelled.
When a timeout is enabled, Default Choice ID determines the result returned on timeout. If it is empty, the first configured choice is used.
Continue immediately
The choice is placed in the zone queue and the current automation continues immediately. Handle the eventual operator response with a separate automation that uses UI Choice Selected.
Use this mode when the original workflow must not stop while a human decision is pending.
Step 4. Handle a non-blocking selection
Create another automation and select the StreamDeck UI Choice Selected signal.
Set:
| Field | Example |
|---|---|
| Prompt ID | donation_moderation |
| Choice | approve |
Prompt ID matches the Prompt ID from Choice Create. Choice matches the selected Choice ID. Both filters are optional, but using both identifies one semantic answer precisely. Create another automation for reject, or leave Choice empty when every choice should start the same workflow.
Do not identify an answer only by physical button position. The same mod:0 button can display approve for one Prompt ID and a completely different choice for another.
Queue behavior
Each UI Zone has one visible request and a separate pending queue.
When Choice Create runs for an occupied zone:
- the visible request remains on the buttons;
- the new request enters the zone queue;
- after selection, timeout or dismiss, the next request is displayed automatically;
- button defaults are restored only when the queue becomes empty.
Queues in different UI Zones run independently.
Priority
Expand Advanced Settings in Choice Create to set Priority.
Lower numbers are processed first:
| Priority | Meaning |
|---|---|
| 0 | Highest |
| 1 | High |
| 2 | Medium |
| 3 | Default |
| 4 and above | Progressively lower |
Negative numbers are treated as 0. Priority changes the order of pending requests only. It never interrupts the request already visible to the operator. Requests with the same priority use creation order.
Dismiss a UI Choice
Use Choice Dismiss when a request is no longer relevant.
Select a UI Zone and one Scope:
Current choice
Dismisses the visible request. The next queued request appears automatically. If the queue is empty, the buttons return to their defaults.
Entire zone
Dismisses the visible request, removes every pending request in the zone and restores the buttons.
By Prompt ID
Enter a Prompt ID and choose:
- Latest in queue — remove the most recently created matching request; if only the visible request matches, dismiss it;
- All with this Prompt ID — remove the visible and pending requests with that Prompt ID.
Requests with other Prompt IDs remain in the queue.
An automation waiting for a dismissed request resumes with status Dismissed.
Timeout and completion
When the response window expires:
- Wait for response resumes with status
TimedOutand its default choice; - Continue immediately closes without generating a false user selection;
- the next queued request becomes visible;
- the buttons are restored if no request remains.
UI Choice Selected is emitted only for a real button selection. Timeout and dismiss are completion states, not simulated operator choices.
Recommended patterns
Blocking confirmation
Use:
- Execution Mode: Wait for response;
- Timeout: After N seconds;
- a safe Default Choice ID, such as
reject.
Continue the same automation based on runtime.prompt.result.
Background operator decision
Use:
- Execution Mode: Continue immediately;
- a stable Prompt ID;
- a finite response timeout;
- one or more UI Choice Selected automations.
Long-lived control
Use Continue immediately with No timeout, and add a Choice Dismiss action to the workflow that makes the request obsolete. A no-timeout request blocks later requests in the same zone until it is selected or dismissed.
Troubleshooting
- The buttons never change: verify that the connector is version 0.5.0 or later, the bridge is connected, and the UI Zone matches on both sides.
- A choice appears on the wrong button: check for duplicate or incorrect Button Index values.
- UI Choice Selected does not run: match the exact Prompt ID and Choice ID, including spelling.
- A new choice does not appear immediately: another request is active in the same zone; check its timeout or dismiss it.
- A waiting automation never continues: make sure the active request can be selected, timed out or dismissed.
- Buttons keep old content: use Choice Dismiss with Entire zone, then verify that the current connector package is installed.