Queue Twitch reward videos without overlap
Reuse one macro for several Channel Point rewards, control repeated redemptions with signal concurrency, and serialize different videos through folder concurrency.
AlphaResult
This guide connects three Twitch Channel Point rewards to three OBS videos:
- A viewer redeems a reward.
- Its automation calls one shared
Show Rewardmacro. - The macro shows the corresponding OBS source for six seconds and hides it again.
- Signal concurrency controls repeated calls to the same reward.
- Folder concurrency places different reward automations in one shared queue, preventing their videos from playing over one another.
The same pattern works for sounds, images, filters, scene changes, or any other reactions that must not overlap.
Before you start
You need:
- a Twitch broadcaster account connected in Streaming Hub;
- three custom Channel Point rewards on that Twitch channel;
- a connected OBS profile;
- three video files or other media reactions;
- permission to manage OBS sources and Twitch reward events.
This guide assumes you already know how to connect Twitch and OBS, create automations, add actions, and bind OBS Slots.
Step 1. Create the Twitch rewards
Create three custom Channel Point rewards in your Twitch Creator Dashboard. Their names, prices, colors, and viewer instructions can be anything suitable for your channel.
Each reward will have a separate Streaming Hub automation. This lets every reward select a different OBS Slot while reusing the same playback logic.
Step 2. Prepare the OBS media sources
Add three Media Sources to an OBS overlay scene and name them:
reward1
reward2
reward3
This example uses the existing Prediction-Overlay scene, but that is not required. You can create a dedicated overlay scene or place the media sources directly into the scenes where they should appear.
Hide all three sources by default. Configure each Media Source to restart playback when it becomes active so every redemption begins at the first frame.
Step 3. Create the OBS Source Slots
In Streaming Hub, create and bind three OBS Source Slots:
| Source Slot | OBS source |
|---|---|
Reward 1 | reward1 |
Reward 2 | reward2 |
Reward 3 | reward3 |
The Slot names can differ from the OBS source names. In this example, the readable Reward 1–Reward 3 Slot names are the values passed to the macro.
These must be Source Slots because the macro shows and hides them. A Media Slot is needed for media-specific actions such as Restart Media, but this example starts playback by making a hidden Media Source active.
Step 4. Create the shared Show Reward macro
Open Macros and create:
Show Reward
Add one input:
| Field | Value |
|---|---|
| Name | slot_name |
| Type | String |
| Required | Enabled |
Add three actions to the macro:
Source Show
| Field | Value |
|---|---|
| Action | OBS Source Show |
| Slot | {slot_name} |
The macro input is used in place of a fixed Slot ID, allowing every reward automation to select its own source.
Pause
| Field | Value |
|---|---|
| Action | Core Pause |
| Duration | 6 |
| Unit | Seconds |
Six seconds matches the longest video in the example. Use the duration of your longest media reaction so a queued item does not start while the previous video is still visible.
Source Hide
| Field | Value |
|---|---|
| Action | OBS Source Hide |
| Slot | {slot_name} |
The complete macro is:
Source Show {slot_name}
Pause 6 Seconds
Source Hide {slot_name}
Step 5. Create the reward signals
Create three automations:
Reward 1
Reward 2
Reward 3
For each automation, select Twitch Channel Point Redeemed.
Configure:
| Field | Value |
|---|---|
| Reward Filter Mode | SelectFromList |
| Selected Reward | The corresponding Twitch reward |
Choose a different reward in each automation. Filtering by the selected reward prevents all three automations from reacting to every Channel Point redemption.
If the list is empty or outdated, reconnect Twitch or refresh the available rewards before continuing.
Step 6. Call the macro with a different Slot
Delete the default Log action and add Call Macro to every reward automation.
Select:
Show Reward
After importing the downloadable folder, reselect Show Reward in all three Call Macro actions. The export retains the source project's macro reference, but the macro you create in another project receives its own ID.
Assign the input:
| Automation | slot_name |
|---|---|
Reward 1 | Reward 1 |
Reward 2 | Reward 2 |
Reward 3 | Reward 3 |
Each automation now contains only one action. The Twitch signal decides when it runs, while the macro decides how the OBS reaction is displayed.
Test each automation once and confirm that only its corresponding video becomes visible.
Step 7. Understand the same-signal problem
Without concurrency control, several rapid redemptions can start multiple runs of the same automation:
- one run may hide a source while another run still expects it to be visible;
- the video may restart repeatedly;
- several Pause actions may remain active simultaneously;
- OBS state becomes difficult to predict.
Open an automation's Concurrency settings to decide how that individual signal handles new calls while an earlier call is still running.
Available strategies include:
- Queue — wait and run each call in order;
- Cancel Previous — stop the current run and start the newest one;
- Parallel — allow overlapping runs up to the configured limit;
- Debounce — wait for a quiet interval and keep the latest call;
- Cooldown — suppress additional calls during the configured cooldown interval.
You can also configure:
- a global cooldown;
- cooldown per user;
- a Key Selector that makes selected calls share a concurrency key;
- maximum queue length;
- overflow behavior when the queue is full;
- maximum parallel executions where the selected mode allows them.
Step 8. Why per-signal queues are not enough
Individual concurrency solves repeated calls to one automation, but it does not automatically coordinate different automations.
For example:
Reward 1startsreward1.- Before its six-second Pause finishes, another viewer redeems
Reward 2. Reward 2starts independently and showsreward2.- Both videos are now visible.
You can solve this by assigning the same Key Selector to several automations. For a group of related signals, folder concurrency provides a clearer shared boundary.
Step 9. Put the reward automations in one folder
Create a folder named:
Twitch Rewards
Move Reward 1, Reward 2, and Reward 3 into it.
Open the folder's context menu, select Folder Settings, and enable:
Enable folder concurrency
The screenshot shows both the per-signal Concurrency panel and the folder-level queue settings.
Step 10. Configure the shared folder queue
The downloadable example uses:
| Field | Value |
|---|---|
| Enable Folder Concurrency | Enabled |
| Mode | Queue |
| Debounce | 500 ms |
| Cooldown | 1000 ms |
| Maximum Queue Length | 50 |
| Queue Overflow Behavior | DropOldest |
| Maximum Parallel Per Automation | 4 |
The important setting for this workflow is Queue. Only one automation from the folder may own the shared execution slot at a time:
Reward 1 → Show/Pause/Hide → Reward 2 → Show/Pause/Hide → Reward 3
When the queue reaches its maximum length, DropOldest removes the oldest waiting item to make room for a newer call. For expensive rewards, you may prefer a shorter queue or a policy that rejects the newest item instead.
Verify the complete workflow
Test the system in stages:
- Run
Reward 1,Reward 2, andReward 3separately. - Confirm that each Call Macro value points to the correct Source Slot.
- Trigger the same reward several times and observe its individual concurrency behavior.
- Trigger two different rewards within a few seconds.
- Confirm that the second automation waits for the first macro's Show → Pause → Hide sequence.
- Confirm that only one reward video is visible at a time.
- Redeem
Reward 1twice from the same Twitch user during its cooldown and confirm that the configured restriction is applied. - Inspect Logs to see when runs enter, leave, or overflow the queue.
If it does not work
- Call Macro cannot find Show Reward: create the project-level macro from Step 4, then reselect it in all three imported actions so their Macro ID points to your project.
- No rewards appear in SelectFromList: reconnect the Twitch broadcaster account and refresh the signal settings.
- The wrong video appears: compare the Call Macro
slot_namevalue with the three OBS Source Slot names. - The source cannot be found: bind the Source Slot to the matching source in the active OBS profile.
- A video resumes from the middle: configure the OBS Media Source to restart playback when it becomes active, or extend the macro with an explicit media restart action.
- Different rewards overlap: confirm that all three automations are inside the same folder and that folder concurrency is enabled in Queue mode.
- The next video starts too early: increase the macro Pause to match the longest media duration.
- The queue grows too large: reduce Maximum Queue Length, increase the reward cooldown, or use Ignore for reactions that do not need guaranteed playback.
Adapt it
- Add a fourth reward by creating another Source Slot and passing its name to the same macro.
- Pass the display duration as a second macro input so each reward can have its own timing.
- Add a sound, filter, or text message to
Show Reward. - Use Cancel Previous for alerts where the newest event should replace the current one.
- Use Cooldown for reactions where calls received during a short restricted period may be skipped.
- Use a per-user Key Selector when every viewer should have an independent queue.
- Reuse the folder queue for donation reactions, raids, shout-outs, or any group of OBS animations that share screen space.
- Replace the fixed Pause with separate macros for short and long media reactions.
Related
Download the ready-made script
Import it into Streaming Hub, then follow this guide to add your own variables and connect the required services.
Download the Twitch Rewards folder