Streaming Hub 0.1

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.

Alpha
IntermediateTwitchOBSUpdated 2026-07-27

Result

This guide connects three Twitch Channel Point rewards to three OBS videos:

  1. A viewer redeems a reward.
  2. Its automation calls one shared Show Reward macro.
  3. The macro shows the corresponding OBS source for six seconds and hides it again.
  4. Signal concurrency controls repeated calls to the same reward.
  5. 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 SlotOBS source
Reward 1reward1
Reward 2reward2
Reward 3reward3

The Slot names can differ from the OBS source names. In this example, the readable Reward 1Reward 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:

FieldValue
Nameslot_name
TypeString
RequiredEnabled

Add three actions to the macro:

Source Show

FieldValue
ActionOBS 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

FieldValue
ActionCore Pause
Duration6
UnitSeconds

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

FieldValue
ActionOBS 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:

FieldValue
Reward Filter ModeSelectFromList
Selected RewardThe 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:

Automationslot_name
Reward 1Reward 1
Reward 2Reward 2
Reward 3Reward 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:

  1. Reward 1 starts reward1.
  2. Before its six-second Pause finishes, another viewer redeems Reward 2.
  3. Reward 2 starts independently and shows reward2.
  4. 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.

An individual automation can control repeated calls, while the folder creates one queue shared by all three reward automations.

Step 10. Configure the shared folder queue

The downloadable example uses:

FieldValue
Enable Folder ConcurrencyEnabled
ModeQueue
Debounce500 ms
Cooldown1000 ms
Maximum Queue Length50
Queue Overflow BehaviorDropOldest
Maximum Parallel Per Automation4

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:

  1. Run Reward 1, Reward 2, and Reward 3 separately.
  2. Confirm that each Call Macro value points to the correct Source Slot.
  3. Trigger the same reward several times and observe its individual concurrency behavior.
  4. Trigger two different rewards within a few seconds.
  5. Confirm that the second automation waits for the first macro's Show → Pause → Hide sequence.
  6. Confirm that only one reward video is visible at a time.
  7. Redeem Reward 1 twice from the same Twitch user during its cooldown and confirm that the configured restriction is applied.
  8. 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_name value 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