Ad Manager
Ads sits under MONETIZE in the Pyre.Stream sidebar, and its subtitle says what it is for:
Where your ad breaks land, and how long they run.
The worst ad break is the one that lands as a match starts. Ad Manager watches your stream and moves your ad breaks into the quiet moments instead: between matches, on a halftime, on the countdown before a game starts. It never runs more than you ask it to in an hour.
That last sentence is the ceiling, and it is worth reading twice, because it is the promise the rest of the page is built around: your minutes an hour target is a limit as well as a goal, and Pyre spends it in the gaps rather than adding to it.
It moves your ads, it does not remove them
Section titled “It moves your ads, it does not remove them”This is the thing worth being blunt about. Ad Manager does not reduce the number of ads your viewers see, and it is not an ad blocker for your own channel. You set how many ad minutes an hour you want, and Pyre decides when those minutes are spent. Fewer of them land on live play, and the hour still adds up.
It is Twitch only. It rides Twitch’s ad schedule, snooze and commercial APIs, and there is nothing equivalent to point at on Kick or YouTube.
It ships off, and there are three modes once it is on
Section titled “It ships off, and there are three modes once it is on”Ad Manager is off on every channel until you turn it on. Nothing polls, nothing fires, and your channel behaves exactly like a channel that has never heard of the feature. The cockpit card says so while it is off:
Ad Manager is off. Turn it on in Ads settings and Pyre will move your ad breaks into downtime.Turning it on starts you in Auto:
When you turn this on it starts in Auto. Drop it to Suggest or Observe below if you would rather be asked.So there are four states, counting off:
| Mode | What it does |
|---|---|
| Off | The shipped state. Nothing runs, nothing is polled. |
| Auto | Pyre runs the break itself when it finds a good moment, and tells your chat it did. |
| Suggest | Pyre asks you first, on the Stream Manager card. Nothing runs until you tap it. |
| Observe | Pyre only writes down what it would have done. Nothing runs on its own. |
You can change the mode mid stream. It takes effect on the next moment Pyre finds.
Ad minutes an hour
Section titled “Ad minutes an hour”One number drives the whole machine. Pyre’s default is 9 minutes an hour, and the page explains the two facts behind it:
Pyre's default is 9 minutes an hour. Twitch pays its 55% revenue share on any hour you run at least 3 ad minutes, so anything from 3 up keeps that share and 9 clears it with room to spare. This is a ceiling as well as a target: Pyre will not bank more than this in an hour, and it counts the breaks Twitch runs on its own toward the same number.The 3 is Twitch’s number, not Pyre’s. It is the threshold for Twitch’s 55% revenue share, any target of 3 or more keeps that share, and Pyre’s own default sits well clear of it. The two used to read as one number, which made 9 look like a risk it is not.
The top of the range is Pyre’s: The most Pyre will accept is 15 minutes an hour.
Longest break Pyre may run is the second control, and it is a cap rather than a
length: Pyre often runs shorter than this, because it fits the break to the gap it found. The choices are 30, 60, 90 and 180 seconds, because
Twitch's own maximum is 180 seconds and its minimum is 30, so those are the ends of the scale.
It caps every break Pyre starts, with no exception, and the page says so under the control:
This cap applies to every break Pyre starts. When Twitch has an ad block due, Pyre clears the whole block in downtime rather than let the rest of it land mid-match, so a downtime break runs up to this number and no further.That is a change. A block-clearing break used to follow the block’s own length and ignore this number; it no longer does. See Clearing the next ad block.
A cap per moment
Section titled “A cap per moment”The Longest break Pyre may run control is the ceiling for the whole feature, but a single moment can be held tighter. Open a game’s card and each moment can carry its own cap; leave it blank and the moment follows the ad block it clears or the window it found. On a moment that fills a window rather than clearing a block, the card names the ceiling that moment can reach when no ad block is due:
up to {n}s when no ad block is due
Here {n} is that game’s window budget with Pyre’s safety margin already taken off, so
it names a length a break can actually reach rather than the raw window. Set a cap on
that moment and this line gives way to the cap you chose.
The five moments
Section titled “The five moments”A moment (a window) is a stretch of downtime long enough to hold a break. There are five kinds, and you can turn any of them off per game:
| Moment | What it is | Ships |
|---|---|---|
| Match end | Between matches, once the scoreboard is up. | On |
| Halftime | The break between halves. | On |
| Pre-match countdown | The countdown before a match starts. Only when the game shows one. | On |
| Death or spectate | While you are dead or spectating. Off until you ask for it. | Off |
| Lobby | Between matches, in the menus. Pyre only uses it to clear a whole upcoming ad block. | On |
The first four hold a single break inside a downtime window. Lobby is the odd one: it does not fill a window, it clears a whole upcoming ad block, and it has its own section below.
The shape of the games section
Section titled “The shape of the games section”The settings page draws a grid of tiles, one per game Pyre can read, plus a read-only tile for everything else. A tile is a summary: the game’s name, which detector reads it, whether it is on, and what Pyre can see of it right now. The section’s own line says what to do with them:
One tile per game Pyre can read. Open one to choose which moments it may use, and to check that Pyre can really see it.Click a tile and a detail shelf opens full width under the grid, carrying that game’s master switch, its moment chips, an Advanced settings disclosure with the per-moment length caps behind it, and the verification panel for the games Pyre reads from your screen. One shelf is open at a time. Below the grid sits a single Ad settings card for the whole channel, and the detection strips consent lives at the foot of the page.
Which game sees which moment
Section titled “Which game sees which moment”The page shows only the moments a game can actually use, so a chip you can see is a chip that can fire. The rest are here:
| Moment | CS2 | Dota 2 | Fortnite | League of Legends | Any other game |
|---|---|---|---|---|---|
| Match end | up to 45s | up to 75s | up to 45s | up to 60s | up to 45s |
| Halftime | A 15 second halftime cannot hold a 30 second ad. | Dota 2 has no halftime. | Fortnite has no halftime. | League of Legends has no halftime. | Pyre does not assume an unknown game has a halftime. |
| Pre-match countdown | follows your ad block, or the countdown when none is due | the same | the same | League does not show Pyre a countdown before a match yet, so this stays off until it can. | the same |
| Death or spectate | up to 30s | up to 30s | up to 30s | Pyre cannot tell when you are dead or spectating in League yet, so this stays off until it can. | up to 30s |
So halftime is a real class with no game behind it today. Read the quoted sentences carefully, because they are two different kinds of “no”: “has no halftime” means the game does not have that moment and never will, while “yet, so this stays off until it can” means Pyre cannot read it today and the chip can come back when it can. Only the second kind is a promise.
The four screen-read games have their own rows in Game detection on screen.
Turning a whole game off
Section titled “Turning a whole game off”Every game’s detail shelf has one switch above its moments, and it is the only control on the page that can silence a whole game at once. Turning it off means Pyre uses none of that game’s moments. It does not mean no ads while you play it: Pyre falls back to the spaced-out cadence, which still hits your target for the hour. The shelf says so directly under the switch:
This game is turned off. Its moments are kept, and Pyre falls back to the spaced-out cadence while you play it.Your moment choices are kept, so turning the game back on restores exactly what
you had rather than the defaults. And when the manager passes on a moment for this
reason, it names it: the cockpit card’s reason line reads
You have Pyre turned off for {game}.
Two more rules sit behind those numbers. Pre-match is the one window a detector can measure exactly, so when no ad block is due Pyre reads the game’s own countdown rather than a table; when a block is due, it clears the block instead, which is the rule below. And Pyre keeps 15 seconds of every window spare, so a break is finished before play resumes; death or spectate is the exception, because you asked for ads while you are dead and an overrun lands on your own respawn.
Clearing the next ad block
Section titled “Clearing the next ad block”Twitch does not schedule your ads as a steady drip; it schedules them in blocks. A block that is about to land is far better spent in downtime than dropped into the next match, so when Pyre finds a moment and a block is due, it runs the whole block at once instead of drizzling small breaks across your play.
Every moment does this now, not just the lobby. That is the second change of 2026-08-26, and it came out of a real stream: Pyre found a countdown, ran 30 seconds into it, and the two and a half minutes left in the block landed in the next match on Twitch’s own schedule. An under-sized break does not make the rest of the block evaporate. So the rule is deliberately blunt, and the trade is stated rather than hidden: ads bleeding a little into the start of a match beat ads popping up in the middle of one.
The Lobby moment keeps its own character inside that rule. It ships on, and while you sit between matches, in the menus or on the post-game screen, Pyre uses it for one thing only:
Between matches, in the menus. Pyre only uses it to clear a whole upcoming ad block.
Twitch schedules your ads in blocks. When you are in a lobby and a block is due inside this window, Pyre runs the whole block at once instead of a drip of small breaks, which reads as more ads than it is.The difference is that the other moments fill a window and clear a block when one is due, while the lobby only ever clears a block. What none of them do any more is exceed your Longest break Pyre may run: the length is the smallest of the block, that cap, and the room left in the hour.
How far ahead Pyre looks for a due block is one knob, on the target card:
Clear the next ad block up to {n} minutes early
With no detector, there is still a cadence
Section titled “With no detector, there is still a cadence”Most channels have no game detector, and the feature is built for them first:
Pyre only sees your game when the desktop app is running and the game is set up to report to it. Until then it works on a spaced-out cadence instead, which still hits your target for the hour.The cadence is the floor, not a failure. At the default 9 minutes an hour it works
out at one break roughly every 10 minutes, with up to 20% of jitter on each slot so
it never sounds like a metronome. The cockpit says the same thing in one line:
Pyre picks a spaced-out slot inside the hour, so two breaks never land together.
A window always beats the cadence: if a match ends while a cadence slot is still counting down, Pyre takes the match end.
Setting the detectors up is on The Pyre.Stream desktop app.
Games with nothing to report
Section titled “Games with nothing to report”Four games have no API, no log and nothing to paste anywhere: Overwatch, Marvel
Rivals, Dead by Daylight and Apex Legends. For those the desktop app reads
the picture instead, recognising the end screen in your own capture on your own
machine, and Ad Manager treats the result as a detector like any other. The reading
carries the Screen label, it stays capped at a prompt until you confirm it once on
your channel by playing a match with the checker open, and every way it can fail
lands on the cadence. The frames never leave your computer.
Game detection on screen is the whole story: what each of
the four games can see, what the health chip words mean, and the opt-in that is the
only way a picture ever leaves the machine.
The ledger, and what it promises
Section titled “The ledger, and what it promises”Pyre keeps a rolling hour of every ad break on your channel, and it counts both the breaks it started and the breaks Twitch started on its own. From that it derives what the hour still owes you, and the cockpit shows it as a meter:
{x} of {y} ad minutes this hour
Two promises come out of that ledger, and they are the ones worth holding Pyre to:
- The hour does not end below your target while moments were available. That is what protects your revenue share, and it is why a missed window is followed by a cadence slot rather than by silence.
- The hour never runs past your target plus one break. The ceiling is your
target plus 90 seconds, so at the default it is 10 minutes 30 seconds. Pyre will
shorten a break to fit under the ceiling rather than overshoot it, and once the
ceiling is reached it refuses:
This hour's ad ceiling is reached.
A break Pyre does not need to run says so too:
The hour's ad minutes are already banked.
The cockpit card
Section titled “The cockpit card”Everything you do while live is on the Ad Manager card in the Stream Manager. The settings page runs nothing and polls nothing; the card is the live surface.
The state chip reads one of Off, Off air, Cadence, In match,
Window open, Ad running or Cooldown. Under it, when nothing is running, is a
line saying why, because a chip alone cannot tell “the hour is spent” from “a
raid just landed”:
| You see | It means |
|---|---|
Just went live, so ads wait a few minutes. | The first ten minutes of a stream are protected. |
A raid just landed, so ads are waiting. | Within three minutes of an incoming raid, or a shoutout is still queued. |
A hype train is running, so ads are waiting. | |
An alert is still playing, so ads are waiting. | A paid alert and its read are still on screen. |
Holding ads until the match ends. | A detector says you are mid match. |
That break was too short to fit an ad. | The window could not hold 30 seconds plus the margin. |
You have this kind of break turned off for {game}. | Your own per game setting, with the game named. |
Twitch is still in its cooldown after the last break. | Twitch’s own wait between commercials. |
Waiting for the next spaced-out slot. | Cadence mode, nothing due yet. |
Two buttons. Run ads now starts a real break immediately, and by default it outranks the things that would have stopped an automatic one: a match in play, a raid, a hype train, an alert still reading, an hour whose minutes are already spent. It stays down while a break is running, while Twitch is in its cooldown, while a hold is live, while your channel is off air and while your Twitch connection needs reconnecting, because those are the refusals a click cannot argue with. It also stays down until the next status comes back, because two clicks would be two commercials. The whole rule is in When you run one yourself.
Hold stops Pyre finding moments for 15 minutes, which is the one length the card
offers, and it turns into Resume while a hold is live. From chat you can name any
number of minutes up to 180. The card counts it down:
Ads are held for {n} more minutes. Nothing you hold is lost from the hour’s target;
the ledger simply owes you the minutes when the hold lapses.
Detection: what Pyre sees, and what it is doing about it
Section titled “Detection: what Pyre sees, and what it is doing about it”The card carries a Detection block, and it is deliberately two lines in two different registers. The first is the sensor: the game, the state it is in, and how Pyre is reading it, separated by dots.
Fortnite · In match · Game logThe tier word is GSI for CS2 and Dota 2, Game log for Fortnite, LCU for League
of Legends, Screen for a game Pyre reads from your own capture, and
Low confidence for a reading Pyre could not make proper sense of. Two readings do
not name a game: No game detected means nothing is reporting at all, and
Game not named means a reading arrived without a title on it.
A reading also shows its age. Fresh, it reads in the present tense with a lit
dot. Older than 90 seconds it dims to Last seen: Fortnite · 12 min ago and drops
the state and the tier, because “In menus” is a claim about right now and a reading
that stopped arriving cannot make one. Past an hour it is No game detected again.
While you are off air it always shows the aged form, however fresh it is: a detector
reporting into an offline channel is a fact about your PC, not about your stream.
The second line is the stance, which is the manager’s own answer rather than the sensor’s. It never repeats the game, because the line above it just said so:
| Stance | When |
|---|---|
Running ads now. | A break is on screen. |
Held by you, {n} min left. | Your own hold, with Resume right below it. |
Cooling down after the last break. | Twitch’s own wait. |
Watching only. Nothing fires on its own. | Observe, which outranks any window reading. |
Not live. Nothing fires until you go live. | Off air. |
Protecting the match. | A detector says you are mid match. |
Protecting the match. (Pyre cannot see it, so it assumes one.) | Pyre can only see the game running. See Protecting a match you are already in. |
You have been out of the game a while, so ads are back on cadence. | The game is running but you have been tabbed out of it for a few minutes. |
Downtime window open at {where}. Ads can fire. | A window is open. |
Waiting for downtime. | A detector is reporting and no window has opened. |
Ads fire on cadence. | No detector, so the spaced-out cadence is the plan. |
Twitch’s next break, and the last event
Section titled “Twitch’s next break, and the last event”Two more rows finish the card. Twitch's next break names whose clock it is,
and it is always there: in {n} min when a block is due, none scheduled when none
is. It used to vanish when nothing was due, which made “Twitch has no block coming”
and “Pyre never read your schedule” look identical. It shows in Observe too, because
it is a fact about Twitch rather than about Pyre’s posture.
Last event is what the machine last decided: Ran 90s of ads at match end,
Offered 60s of ads, Would have run 30s of ads, Snoozed the next ad break.,
Let the scheduled ad break run., or a refusal in the same words the rest of the
card uses. On a break that filled a window, one more line underneath states the
block rule:
Pyre clears your whole ad block in downtime, so the rest cannot land mid-match.
In Suggest, a would-fire moment becomes a prompt on this card instead of a
break: Run {n}s of ads now? with the window named, an expiry counter, and
Run it or Not now. It expires with the window it describes, which is usually
inside a minute.
When you run one yourself
Section titled “When you run one yourself”Run ads now on the card, and !adsnow in chat, are the manual routes, and three
rules govern them.
1. They override by default. A manual run is you acting, so it outranks every refusal the machine made on your behalf: a match in play, a raid, a hype train, an alert still reading, a window too short, a moment you switched off, a cadence slot that has not come round, and an hour whose target is already banked. The setting is on the Ads page under Manual runs, and both positions are spelled out because the default is the permissive one:
Match protection also applies to manual runsOff: Run ads now and !adsnow fire immediately, even mid-match. On: manual runs wait for downtime like automatic ones.The limit is on the page rather than left to be discovered from a refusal:
Either way, a manual run still waits for a break that is already playing and for Twitch's own cooldown. The full set a click can never beat is: a break already
running, Twitch’s cooldown, a hold you set (Resume it, that is one click), a channel
that is off air, a Twitch connection that needs reconnecting, Ad Manager switched
off, and the engine being unreachable.
2. They fire now or not at all. A manual run does not queue. If it has not been
acted on within 10 seconds it expires rather than arriving late, and it says so:
That request expired before it could fire. Try again. A late hold is still the
hold you meant, so Hold and Resume are exempt and stay queue tolerant. A
late commercial is an ad in the wrong minute, and there is no version of that worth
delivering.
3. They answer. Every manual run now reports its outcome instead of vanishing
into a “queued”. On the card it is a Last manual run line, naming the length on a
fire and the reason on a refusal, with the moderator’s name when it was theirs. In
your Activity feed it is one row (ran 90s of ads at your request, or
could not run ads at your request: a match was in play). And when the request came
from chat, the answer goes back to chat: @bob running 90s of ads now. or
@bob couldn't run ads: {reason}. A button press on the card gets no chat line, on
purpose: the card already shows it, and your ad accounting is not for your viewers.
What your chat is told
Section titled “What your chat is told”Announcements are on by default in Auto, they go out from your bot unless you change Who says it, and the line is yours to edit. The stock one is:
📢 Running {length}s of ads while we are {reason}. The next match stays ad free.There is an optional second line for when the break finishes, off by default
(Off by default. Some chats read it as noise.), stock text Ads are done. Back to it.
Exactly two placeholders are filled in, and the field says so under it:
Pyre fills in {length} and {reason}. Anything else in curly braces posts to chat exactly as you typed it.
{length} is the break in seconds. {reason} becomes one of five phrases:
| Moment | {reason} reads |
|---|---|
| match end | between matches |
| halftime | on the halftime break |
| pre match | waiting for the match to start |
| death / spectate | spectating |
| cadence | on a break in play |
Suggest prompts never go to public chat. They are on your card only.
Protecting a match you are already in
Section titled “Protecting a match you are already in”The other half of the feature spends nothing and runs nothing. When a detector says you are in a match and Twitch’s own break is less than 90 seconds away, Pyre spends one of your Twitch snoozes to push it out of the match.
It does not do that unconditionally, and the exception is about your money rather
than about your match. Snoozes drain your pre-roll-free time, and pre-rolls come back
for viewers arriving at your stream, so if that balance is 10 minutes or less Pyre
lets the scheduled break run and credits it to the hour instead. Same when you
have no snoozes left. The hour’s list says which happened:
let the scheduled ad break run to protect the pre-roll-free time, or
let the scheduled ad break run, no snoozes left.
This half works at any target, 0 included.
When Pyre can only see that the game is running
Section titled “When Pyre can only see that the game is running”Four games have no API, no log and nothing to answer a client: Overwatch, Marvel
Rivals, Dead by Daylight and Apex Legends. Pyre reads their end screens from your
own capture, but the desktop app can also see something much simpler and much
earlier, which is that the game is open at all. That reading now reaches the
card, at low confidence, so a creator mid Apex is no longer told No game detected.
It also changes what Pyre does. A running game with no reading of the match is assumed to be a match, and protected. Before this, those four were protected exactly never: nothing ever said “in match”, so the cadence fired straight into the fight while the card sat there naming the game. Unknown state while the game is running now means hold off, not fire.
Three things release the assumption, and each is a real observation rather than a timer running out on a guess:
- A confident downtime reading. The moment Pyre can actually see a menu, a post-match screen, a countdown or a halftime, the assumption gives way to the reading.
- Tabbing out of the game for a few minutes. Sitting in a lobby with the game
minimised while you talk to chat is prime ad time, so after three unbroken minutes
out of the game the cadence comes back and the card says
You have been out of the game a while, so ads are back on cadence.Three minutes is chosen so an ordinary mid match alt-tab (a glance at chat, a Discord ping, a death screen) never reaches it. Tab back in and the protection returns. - Closing the game. The reading stops being refreshed and ages out within about two minutes.
The trade is the same one the block rule makes, and in the same direction: a missed opportunity beats a break in a match. A lobby Pyre could not see costs you an ad slot; a match it could not see costs you the moment your stream exists for.
Games with a real reporter do not move. CS2, Dota 2, Fortnite and League always say which state they are in, so there is nothing to assume and their behaviour is exactly as it was.
The honest limits
Section titled “The honest limits”Twitch only. The whole feature rides Twitch’s own APIs.
Only you can start a commercial. Twitch’s Start Commercial endpoint takes the broadcaster’s own token and nothing else, so there is no version of this where a moderator starts an ad on Twitch’s side. Pyre’s Moderators may run ads with !adsnow switch is a Pyre-side permission that routes the request through your token, and it is off by default. While it is off, a mod who tries gets exactly this reply in your chat:
Only the broadcaster can run ads from chat. Turn on "moderators may fire" in Ads settings to change that.Detectors need the desktop app. A browser tab cannot read your game. Without the app Pyre runs the cadence, which is a working feature and not a degraded one, and every window class simply never opens. Supported today: CS2 and Dota 2 through Valve’s game state integration, Fortnite through its log, League of Legends through your own League client, Overwatch, Marvel Rivals, Dead by Daylight and Apex Legends through reading your own capture, and a local process check that notices which game is open. Nothing else is supported, whatever the moment cards make it look like.
A detector that goes quiet drops you to the cadence. It never freezes you. If a reading stops arriving for 90 seconds, Pyre stops believing it and goes back to spacing breaks on the clock.
Twitch has to be reporting a schedule. If it is not, the card says so rather than guessing:
Twitch is not reporting an ad schedule for this channel.Turn on Ads Manager in your Twitch dashboard and Pyre can plan around it.Your Twitch connection needs the commercial permission. An account connected
before this feature shipped has not granted it, and until you reconnect the card
reads Reconnect Twitch to let Pyre run ad breaks. with Until then it only watches.
underneath and a Reconnect Twitch link.
Manage it from Pyre.Bot
Section titled “Manage it from Pyre.Bot”Everything on this page except the game detectors is on the Pyre.Bot portal too, under Ads in the Monetize group. You arm and disarm, pick the posture, set the minutes an hour target, write the announcements and open the per-game tiles there exactly as you do here, and a compact status strip shows what the live engine is doing. The one thing the portal cannot give you is the game reach itself: reading your game, snoozing Twitch’s own breaks out of a live match, and clearing an ad block from a lobby all need the desktop app, so the portal shows a card that says so and links the download.
A moderator never sees Ads on a channel they moderate. Not greyed out, not read-only: the section is absent from their sidebar entirely, because the fire path runs on your own Twitch token and there is nothing a moderator could safely configure.
A Pyre platform operator helping you with a support request is a different thing, and since 2026-08-31 they can open your Ads page and change it, so a broken setup can be fixed with you rather than described to you. Two things stay yours alone even then:
- The detection strips consent, and deleting what it collected. Those are the privacy commitment, and they are not something support can switch on for you. There is no version of the page, in any hands but yours, that shows that control.
- Reporting your game state. Only your own desktop app can say what is on your screen right now. Nobody can claim it on your behalf, which means nobody can manufacture a fire window or quietly suppress your whole hour’s ad load.
See Ad Manager on Pyre.Bot and Give a moderator access.
Related
Section titled “Related”- The Stream Manager for the cockpit card the live half lives on.
- Ad Manager on Pyre.Bot to run the same setup from the bot portal.
- Ads and raids for the
!adsverbs, and for the older ad timer messages, which are a separate feature with their own switches. - The Pyre.Stream desktop app for setting up the game detectors.
- Game detection on screen for the four games Pyre reads from your own capture, and for what never leaves your machine.