# Spin a wheel on stream

Make a Spin Wheel with your own segments and odds, put it on your overlay, spin it from chat with !spin, and have chat told where it lands.

Updated 27 September 2026

## What you can do

A Spin Wheel is a wheel of segments on your overlay — challenges, prizes, the next game — that spins when a flow tells it to. Bloopbot picks where it lands, fairly, and every screen showing the wheel spins the same spin and stops on the same segment at the same moment. When it stops, a flow can say the result in chat or do anything else a flow can do.

You make the wheel in the overlay editor, give it as many segments as you like up to 24, and decide how likely each one is. Your moderators spin it by typing `!spin`, or you can spin it from a channel points reward or a Stream Deck key.

## Before you start

- You need an overlay in OBS. [Add an overlay to OBS](https://bloopbot.com/docs/widgets-in-obs) shows how to add one as a Browser Source.
- Spinning a wheel comes with every channel's overlays: the **Spin a wheel** step is part of **Hosted overlays** in **Flows → Your plan**. [What your plan includes](https://bloopbot.com/docs/what-your-plan-includes) explains the panel.

## 1. Make a wheel

1. Open **Overlays** and open the overlay the wheel should appear on, then choose **Add** and drag the **Wheel** tile from **Goals & games** onto the canvas.
2. In an existing overlay, choose **Add** on the left and drag **Wheel** from **Goals & games** onto the canvas, or open it and press **Add**.
3. Select the Wheel layer. In its **Content** tab on the right, press **New wheel**. It starts with six example segments.
4. Rename it under **Wheel name** — flows find a wheel by this name, so something short like `Challenges` works best.
5. Change the segments: each row is a colour, a label and a **weight**. A bigger weight is a bigger slice and a better chance, and the percentage beside each row is its chance of landing there. **Add segment** adds one, **×** removes one. A wheel has 2 to 24 segments.
6. Press **Publish**. Studio saves the wheel and its layer in the draft while you edit; Publish puts both on stream together.

![A Wheel layer selected in the overlay editor: the Challenges wheel on the canvas, and its Content tab on the right with four segments, each showing a colour, label, weight and chance, and Publish guidance.](https://bloopbot.com/docs/screenshots/spin-wheel-panel.jpg)

_A Wheel layer selected in Studio: the Challenges wheel on the canvas, and its Content tab with four segments, their weights and each one’s chance._

The canvas shows the wheel as you edit it. To watch it spin, open **Simulate** in the top bar and press **Test spin** under **Test events**. A test spin picks its own segment on the canvas; it runs no flow and nothing is said in chat.

> **Draft changes stay in Studio**
>
> The canvas previews the wheel's new name and segments before Publish. Browser Sources on stream, including ones you open or refresh, and flows that spin the wheel keep the last published record until you press **Publish**. **Discard** restores that published record in Studio.

## 2. Choose how it looks

The Wheel layer's panel also has:

- **Wheel** — which of your wheels this layer shows. One overlay can hold several Wheel layers, each showing a different wheel.
- **Show the wheel’s name** — the name above the wheel.
- **Show where it lands under the wheel** — the landed segment's label under the wheel after a spin.
- **Keep the result up for** — how long the landed segment stays lit, 0 to 60 seconds. After that the wheel stays where it stopped.

Size the wheel by dragging its corners on the canvas, like any layer; [Arrange your overlay](https://bloopbot.com/docs/arrange-your-overlay) covers placement. The pointer sits at the top and the wheel takes your overlay theme's accent colour for its rim and cap.

Press **Publish** to put the layer on stream.

## 3. Spin it from chat

The **Mod commands** pack has two flows for the wheel. Open **Flows**, press **Add**, and add **Spin the wheel (!spin)** and **Say where the wheel lands**, each on its own. They arrive paused; switch them on.

- **Spin the wheel (!spin)**: a moderator types `!spin` and your wheel spins for 6 seconds. With several wheels, they type the wheel's name after it: `!spin Challenges`. If the wheel is still spinning, chat is told to wait for it to land.
- **Say where the wheel lands**: when a wheel stops, chat hears _🎡 The Challenges wheel landed on Hydrate!_

Only one spin runs on a wheel at a time. A `!spin` while it is still turning is refused rather than queued, so a burst of commands spins it once.

## 4. Build your own spin flows

Two steps in the node library do everything the wheel does:

- **Spin a wheel** (an action): set **Wheel** to the wheel's name — leave it blank to spin your only wheel — and **Spin for (seconds)**, from 3 to 20. It follows **busy** when the wheel is still spinning, and **error** with the reason in `$(from.<step>.message)` when there is no such wheel.
- **Wheel lands** (a trigger): runs once when a wheel stops. **Only this wheel** narrows it to one wheel by name. Its tokens are `$(segment)` (the label it landed on), `$(index)` (its number, 1 for the first segment), `$(wheel)` (the wheel's name) and `$(user)` (who spun it, when a viewer did).

To let viewers spin it with channel points, make a flow that starts from **On a reward redeemed** and adds **Spin a wheel** — [Reward redemptions](https://bloopbot.com/docs/reward-redemptions) shows how to pick the reward. To spin it from a Stream Deck key, start the flow from a webhook as [Webhooks](https://bloopbot.com/docs/webhooks) describes.

A **Wheel lands** flow can do more than talk: put **Set a variable** after it to count how often a challenge came up, or **Show alert** to play an alert for a jackpot segment, with a **Check a value** step that looks at `$(segment)` first.

## A worked example: challenge wheel

1. In your main overlay, add a Wheel layer and make a wheel called `Challenges` with four segments: **Hydrate** (weight 3), **Stretch** (weight 3), **Sing a line** (weight 2) and **Ten push-ups** (weight 1). The panel shows their chances: 33.3%, 33.3%, 22.2% and 11.1%.
2. Press **Publish** to put the wheel and its layer on stream together.
3. Install **Spin the wheel (!spin)** and **Say where the wheel lands** from **Mod commands**, and switch them on.
4. A moderator types `!spin`. The wheel spins on your overlay, slows, and stops on **Sing a line**, which lights up with its label under the wheel.
5. As it stops, chat reads _🎡 The Challenges wheel landed on Sing a line!_

## What you should see

- The wheel on your overlay, at rest, with the segments you published.
- On `!spin`, a spin of the length the flow set, landing on one segment, with that segment lit and its label underneath for as long as **Keep the result up for** says.
- The same spin on every Browser Source and preview showing the wheel, landing at the same moment — including one you open or refresh halfway through the spin.
- One chat line per spin from **Say where the wheel lands**.

![The Challenges wheel on the overlay after a spin: one segment lit under the pointer and its label, Sing a line, under the wheel.](https://bloopbot.com/docs/screenshots/spin-wheel-landed.jpg)

_The Challenges wheel after a spin: the segment under the pointer is lit and its label is shown under the wheel._

If your system asks for reduced motion, the wheel does not spin: it moves straight to where it lands and lights that segment.

## Troubleshooting

- The layer draws nothing: it has no wheel chosen, or the wheel it showed was deleted. Select the layer and pick a wheel under **Wheel**.
- `!spin` says there is no wheel: the name after `!spin` does not match any wheel. Wheel names ignore capitals but must otherwise match.
- `!spin` asks which wheel: you have more than one, so name the one you mean after `!spin`.
- Nothing happens on `!spin` from a viewer: the built-in command is for moderators and you. [Permissions and cooldowns](https://bloopbot.com/docs/permissions-and-cooldowns#permissions) shows how to open it to more people — add a cooldown if you do.
- The segments on stream are old: check the Studio preview, then press **Publish**. If you pressed **Discard**, Studio restores the last published wheel.
- Studio says a wheel was deleted elsewhere: reload Studio to pick up the current wheel list, then make your edit again.
- A spin was refused as still spinning long after it stopped: a spin stays busy until its result has been reported, which takes at most a few seconds after it lands.
- To see or tidy all your wheels at once, open **Content → Wheels**. Each wheel lists the overlays that show it — including one whose change is not published yet, marked _(unpublished)_ — with a link into the editor. A wheel no overlay shows can be deleted there; one still on an overlay cannot, so remove its Wheel layer or pick another wheel for it first.

![Content → Wheels: the Challenges wheel with its segment colours and labels, and Edit in Main linking to the overlay that shows it.](https://bloopbot.com/docs/screenshots/spin-wheels-page.jpg)

_Content → Wheels: each wheel with its segments and a link into the overlay that shows it._
