Предикты¶
Предикты — это витрина предикта Twitch на сцене OBS плюс пульт в кабинете. Сам предикт живёт в Twitch:
PulseCaster его не подменяет, а показывает и вызывает те же действия, что и панель предиктов на самом Twitch.
Из этого следует главное: предикт, запущенный из панели Twitch, со Stream Deck или чужим ботом, появится на сцене так же, как запущенный из кабинета. Никакой отдельной «нашей» игры нет — есть один предикт канала.
Нужна помощь разработчика?
Напишите mrgorkiy в Telegram. Укажите страницу, ожидаемый результат, что произошло и шаги для повторения. Можно приложить скриншот или короткое видео. Перед отправкой закройте токены, коды подтверждения и приватные ссылки OBS.
Что нужно, чтобы это работало¶
| Условие | Зачем | Что будет без него |
|---|---|---|
Статус Affiliate или Partner |
Twitch разрешает предикты только им | Запуск вернёт отказ Twitch |
| Подключён Twitch-аккаунт владельца | Через него идут все вызовы | Раздел скажет, что аккаунт не подключён |
Право channel:read:predictions |
Ставки зрителей приходят событиями EventSub | Проценты на сцене замрут между действиями |
Право channel:manage:predictions |
Пульт запускает и завершает предикт | Пульт покажет предикт, но кнопки будут недоступны |
Права выдаются при подключении Twitch-аккаунта владельца. Если раздел просит переподключиться — значит, токен выпущен до появления этих прав.
Кому в команде открыт раздел¶
Владельцу канала — всегда. Модератору — только если вы выдали ему зону Предикты в разделе
Модераторы. Она вынесена отдельно от зоны Счётчики и OBS намеренно: итог предикта
раздаёт баллы зрителей и не отменяется, поэтому вместе с оверлеями для сцены такое право не выдаётся само.
Что можно делать¶
На странице Владелец → Предикты две вкладки — так же устроены Голосования.
Предикты — всё, что нужно во время эфира:
- пульт:
Закрыть ставки,Отменить и вернуть баллы, выбор победителя; - итог последнего предикта;
- заготовки предиктов с запуском в одну кнопку и форма для новой заготовки.
Сцена OBS — то, что настраивается один раз:
- сроки показа на сцене после закрытия ставок и после итога;
- тумблер сумм ставок на сцене;
- оформление сцены с превью: цвета, размер текста, скругление, положение в источнике и появление;
- приватная OBS-ссылка для Browser Source и демонстрационный режим.
Как предикт ведёт себя на сцене¶
| Стадия | Что на сцене |
|---|---|
| Приём ставок идёт | предикт виден, проценты растут, идёт обратный отсчёт |
| Ставки закрыты | предикт виден ещё 5 секунд, затем источник пустеет |
| Итог подведён | предикт возвращается на 15 секунд, победитель подсвечен |
| Отменён | предикт возвращается на 15 секунд с сообщением, что баллы вернулись |
| Предикта нет | источник пустой |
5 и 15 секунд — значения по умолчанию, они настраиваются во вкладке Сцена OBS, блок Показ на сцене. Диапазон — от 0
до 3600 секунд; 0 означает «убрать сразу».
Пока идёт приём ставок, предикт виден всегда — это не настраивается: иначе зритель не поймёт, на что ставит.
Обратный отсчёт страница ведёт сама. Сервер присылает момент закрытия ставок, а не остаток, поэтому цифры идут ровно даже при коротком обрыве связи.
Заготовки¶
Заготовка — это заранее собранный предикт: заголовок, исходы и время приёма ставок. Запуск делается одной кнопкой, без набора текста в эфире.
Время приёма ставок вводится с переключателем секунды / минуты: 2 минуты и 120 секунд — одно и то же,
но в списке заготовок это видно без пересчёта в уме.
Заготовки живут в PulseCaster, а не в Twitch. Удаление заготовки не влияет на идущий предикт.
Ограничения Twitch¶
Кабинет проверяет поля теми же мерками, что и Twitch, поэтому отказ приходит до запуска, а не после.
| Поле | Ограничение |
|---|---|
| Заголовок | до 45 символов |
| Исходы | от 2 до 10, каждый до 25 символов |
| Время приёма ставок | от 30 секунд до 30 минут |
| Одновременных предиктов | ровно один на канал |
| Цвета исходов | два исхода — синий и розовый, три и больше — все синие |
Ещё несколько правил самого Twitch, которые полезно знать:
- закрытый предикт нужно завершить: если победителя не выбрать за
24часа, Twitch сам вернёт баллы; - отмена возвращает зрителям все поставленные баллы;
- подведённый итог отменить нельзя — Twitch раздаёт баллы сразу;
- пока предикт идёт или закрыт, следующий запустить не получится.
Оформление сцены¶
Во вкладке Сцена OBS блок Оформление на сцене меняет вид предикта без CSS. Слева превью, справа
настройки: нажмите на элемент превью — откроются его настройки. Кнопки Приём ставок и Итог переключают
пример, Повторить проигрывает появление ещё раз.
| Настройка | Что меняет |
|---|---|
Положение в источнике |
Сверху или Снизу прижимает плашку к краю источника OBS. Как в адресе ссылки оставляет решение параметру position в адресе, без него — сверху |
Появление |
откуда плашка выезжает: снизу, сверху, слева, справа или просто проявляется |
Панель |
цвет фона, его непрозрачность и скругление углов |
Текст |
основной цвет (вопрос и проценты), второстепенный (таймер, подписи, суммы ставок) и размер текста от 12 до 32 px; вопрос и таймер крупнее, подписи мельче — пропорции сохраняются |
Исходы |
цвета первого и второго исхода. Как в Twitch: при двух исходах второй красится своим цветом, при трёх и больше все исходы первого цвета |
Победитель |
цвет названия, полосы и значка победившего исхода после итога |
Нажмите Сохранить оформление: открытый источник в OBS подхватит изменения сам, перезагружать его и
менять ссылку не нужно. Это работает и в демонстрационном режиме: выдуманный предикт продолжает крутиться,
а цвета меняются сразу. Вернуть стандартное подставляет встроенную тему — она тоже применяется только
после сохранения.
Пока оформление не сохраняли, предикт выглядит так же, как раньше. Правила из поля Custom CSS в OBS сильнее
настроек кабинета, поэтому готовые варианты оформления ниже задают свои цвета поверх них. С ?style=none
в адресе встроенная тема отключена, и из этих настроек действует только положение.
OBS-ссылка¶
Публичная ссылка имеет вид:
Токен показывается только сразу после создания или замены. PulseCaster хранит только хэш токена, поэтому
старую полную ссылку нельзя повторно раскрыть из настроек. Если URL потерялся, нажмите Заменить ссылку
и вставьте новый адрес в OBS.
Если ссылка выключена, токен неверный или канал не совпадает, страница отдаёт 404.
Как добавить в OBS¶
- Откройте
Владелец→Предикты→ вкладкаСцена OBS. - Нажмите
Создать ссылкуи скопируйте адрес. - В OBS добавьте источник
Browser/Браузер. - Вставьте ссылку в поле URL.
- Задайте ширину
620и высоту400для двух исходов или1000для 3–10 исходов. Это стартовые размеры с запасом: проверьте длинные названия, итог и свой шрифт; при необходимости увеличьте высоту. - При желании вставьте своё оформление в поле
Custom CSS.
Кабинет обновляет состояние в фоне без замены страницы экраном загрузки и без сброса несохранённых настроек и начатой заготовки.
Страница прозрачная и приходит с готовым оформлением: если ничего не менять, предикт уже выглядит уместно на тёмной сцене. Она обновляется через SSE — перезагружать источник при запуске и завершении не нужно.
Параметры адреса¶
| Параметр | Что делает |
|---|---|
?demo=1 |
крутит выдуманный предикт по кругу: приём ставок, закрытие, итог, отмена |
?style=none |
отключает декоративную тему; для полностью собственного CSS, а не шаблонов ниже |
?position=bottom |
прижимает предикт к нижнему краю источника, если в кабинете выбрано Как в адресе ссылки |
?position=top |
прижимает к верхнему краю (так же ведёт себя адрес без параметра) |
?demo=1 нужен, чтобы подбирать CSS: настоящий предикт для этого запускать не надо. Демонстрационный
предикт живёт только на этой странице, в Twitch он не попадает и баллов не трогает.
Уберите ?demo=1 перед эфиром
Пока параметр в адресе источника, страница показывает выдуманный предикт и не следит за настоящим.
Положение проще задать в блоке Оформление на сцене: выбор Сверху или Снизу там сильнее параметра
в адресе и применяется к уже добавленному источнику без правки URL. Параметр position нужен, когда
положение хранится в адресе конкретного источника — так копировались ссылки раньше. Параметры совмещаются
через &: ?demo=1&position=bottom.
style=none нужен только для оформления с нуля. Готовые CSS ниже дополняют встроенную тему:
удалите style=none из адреса, полностью замените содержимое поля Custom CSS выбранным блоком
и обновите источник OBS. Не смешивайте несколько шаблонов. Без темы не будет сетки, отступов,
цветов и полос; скрытие неактивного таймера, чужого значка победителя и отключённых сумм сохраняется.
Стили в OBS¶
Оформление по умолчанию целиком завёрнуто в :where(), у которого нулевой вес. Поэтому обычное правило из
Custom CSS — например .pc-predict { ... } — сильнее любого правила темы, и !important не нужен.
Стабильная структура страницы:
<div class="pc-predict"
data-status="active"
data-visible="true"
data-layout="duo"
data-outcomes="2"
data-totals="true"
data-hurry="false"
data-prediction-id="9f2c...">
<div class="pc-predict-head">
<span class="pc-predict-title">Пройду босса с первой попытки?</span>
<span class="pc-predict-timer" data-seconds="95">01:35</span>
</div>
<span class="pc-predict-note"></span>
<ul class="pc-predict-outcomes">
<li class="pc-predict-outcome"
data-index="1"
data-outcome-id="a1b2"
data-color="blue"
data-winner="false"
data-percent="62.4"
style="--pc-predict-percent: 62.40;">
<span class="pc-predict-outcome-head">
<span class="pc-predict-outcome-title">Да, легко</span>
<span class="pc-predict-outcome-badge">Победитель</span>
</span>
<span class="pc-predict-outcome-stats">
<span class="pc-predict-outcome-percent">62%</span>
<span class="pc-predict-outcome-points">38 200</span>
<span class="pc-predict-outcome-users">96</span>
</span>
<span class="pc-predict-outcome-bar"><span class="pc-predict-outcome-fill"></span></span>
</li>
</ul>
<span class="pc-predict-total">61 250 баллов · 148 участников</span>
</div>
Что можно использовать в CSS:
| Селектор или атрибут | Что это |
|---|---|
.pc-predict |
корень: плашка, рамка, фон, размер |
.pc-predict-title |
заголовок предикта |
.pc-predict-timer |
обратный отсчёт до закрытия ставок |
.pc-predict-note |
подпись стадии: закрытие, победитель, отмена |
.pc-predict-outcome |
один исход целиком |
.pc-predict-outcome-title |
название исхода |
.pc-predict-outcome-badge |
значок победителя |
.pc-predict-outcome-percent |
доля ставок в процентах |
.pc-predict-outcome-points, .pc-predict-outcome-users |
баллы и число участников |
.pc-predict-outcome-bar, .pc-predict-outcome-fill |
полоса и её заполнение |
.pc-predict-total |
итоговая строка под исходами |
[data-status="active\|locked\|resolved\|canceled"] |
оформление под стадию |
[data-layout="duo\|multi"] |
два исхода или больше |
[data-outcomes] |
сколько всего исходов |
[data-color="blue\|pink"] |
цвет исхода, как его отдаёт Twitch |
[data-winner="true"] |
победивший исход |
[data-hurry="true"] |
последние десять секунд приёма ставок |
[data-totals="false"] |
суммы ставок выключены в кабинете |
--pc-predict-percent |
доля ставок числом, для ширины полосы |
Скрытием управляет сама страница: когда срок показа вышел, она ставит data-visible="false". Своё правило
display для .pc-predict это не сломает. Если хочется своей анимации исчезновения, верните показ более
сильным селектором и анимируйте прозрачность:
html body .pc-predict[data-visible] { display: flex; }
.pc-predict { transition: opacity 0.4s ease; }
.pc-predict[data-visible="false"] { opacity: 0; }
Готовые варианты оформления¶
Каждый вариант рассчитан на источник шириной около 620 пикселей. Вставляйте CSS в поле Custom CSS
у Browser Source. Все три варианта требуют включённой базовой темы (без style=none).
Полосы во всю ширину¶
Оформление по умолчанию уже такое — этот блок нужен, если хочется поменять цвета или размер, не собирая всё с нуля. Достаточно переопределить переменные:
.pc-predict {
--pc-predict-blue: #4cc9f0;
--pc-predict-pink: #f72585;
--pc-predict-win: #80ed99;
--pc-predict-surface: rgba(6, 10, 18, 0.9);
--pc-predict-text: #ffffff;
--pc-predict-muted: #9aa7bd;
--pc-predict-radius: 26px;
font-family: "Bahnschrift", "Segoe UI", system-ui, sans-serif;
}
.pc-predict-title {
font-size: 26px;
text-transform: uppercase;
}
.pc-predict-outcome-bar {
height: 14px;
}
Дуэль¶
Два исхода расходятся к краям, между ними обратный отсчёт. Вариант рассчитан ровно на два исхода: правило
включается только при data-layout="duo", поэтому предикт с четырьмя исходами останется в обычном виде.
/* Дополнение к встроенной теме: уберите style=none из URL. */
.pc-predict {
background: transparent;
border: 0;
border-radius: 0;
box-shadow: none;
backdrop-filter: none;
-webkit-backdrop-filter: none;
text-shadow: 0 2px 10px #000;
}
.pc-predict[data-layout="duo"] {
display: grid;
grid-template-columns: minmax(0, 1fr) 80px minmax(0, 1fr);
gap: 12px;
align-items: stretch;
}
.pc-predict[data-layout="duo"] .pc-predict-head,
.pc-predict[data-layout="duo"] .pc-predict-outcomes {
display: contents;
}
.pc-predict[data-layout="duo"] .pc-predict-title {
grid-column: 1 / -1;
grid-row: 1;
text-align: center;
overflow-wrap: anywhere;
}
.pc-predict[data-layout="duo"] .pc-predict-timer {
grid-column: 2;
grid-row: 2;
align-self: center;
text-align: center;
font-size: 20px;
}
.pc-predict[data-layout="duo"] .pc-predict-outcome {
grid-row: 2;
grid-column: 1;
grid-template-areas: "stats" "head" "bar";
grid-template-rows: auto 1fr auto;
grid-template-columns: minmax(0, 1fr);
gap: 8px;
min-width: 0;
}
.pc-predict[data-layout="duo"] .pc-predict-outcome:last-child {
grid-column: 3;
}
.pc-predict[data-layout="duo"] .pc-predict-outcome-head,
.pc-predict[data-layout="duo"] .pc-predict-outcome-stats {
justify-content: center;
text-align: center;
}
.pc-predict[data-layout="duo"] .pc-predict-outcome-percent {
font-size: 38px;
color: var(--pc-predict-color);
}
.pc-predict[data-layout="duo"] .pc-predict-outcome-title {
font-size: 18px;
white-space: normal;
overflow-wrap: anywhere;
}
.pc-predict[data-layout="duo"] .pc-predict-note {
grid-column: 1 / -1;
grid-row: 3;
text-align: center;
}
.pc-predict-outcome-points,
.pc-predict-outcome-users,
.pc-predict-total {
display: none;
}
Без плашки¶
Текст поверх игры без фона: подходит, когда на сцене уже есть своя рамка.
html,
body {
margin: 0;
background: transparent;
overflow: hidden;
}
.pc-predict {
gap: 8px;
padding: 0;
border: 0;
border-radius: 0;
background: transparent;
box-shadow: none;
backdrop-filter: none;
color: #ffffff;
font-family: "Inter", system-ui, sans-serif;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.9);
}
.pc-predict-title {
font-size: 21px;
}
.pc-predict-outcome-bar {
height: 6px;
background: rgba(255, 255, 255, 0.18);
}
.pc-predict-outcome-points,
.pc-predict-outcome-users,
.pc-predict-total {
display: none;
}
/* Итог виден без чтения: победитель загорается, остальные почти исчезают. */
.pc-predict[data-status="resolved"] .pc-predict-outcome[data-winner="false"] {
opacity: 0.25;
}
.pc-predict[data-status="resolved"] .pc-predict-outcome[data-winner="true"] {
filter: drop-shadow(0 0 12px rgba(66, 211, 146, 0.55));
}
Промпт для AI-агента, который сделает свой CSS
Скопируйте текст ниже в ChatGPT, Codex или другой AI-инструмент, если хотите получить оформление под свою сцену.
Сделай готовый OBS Custom CSS для Browser Source с предиктом PulseCaster.
Контекст:
- OBS открывает прозрачную HTML-страницу с предиктом Twitch.
- Я не могу менять HTML и не хочу добавлять JavaScript.
- Можно использовать только CSS.
- У страницы уже есть оформление по умолчанию, завёрнутое в :where() с нулевым весом,
поэтому мои обычные правила его перебивают без !important.
- HTML-структура такая:
<div class="pc-predict"
data-status="active"
data-visible="true"
data-layout="duo"
data-outcomes="2"
data-totals="true"
data-hurry="false">
<div class="pc-predict-head">
<span class="pc-predict-title">Пройду босса с первой попытки?</span>
<span class="pc-predict-timer" data-seconds="95">01:35</span>
</div>
<span class="pc-predict-note"></span>
<ul class="pc-predict-outcomes">
<li class="pc-predict-outcome" data-index="1" data-color="blue" data-winner="false"
data-percent="62.4" style="--pc-predict-percent: 62.40;">
<span class="pc-predict-outcome-head">
<span class="pc-predict-outcome-title">Да, легко</span>
<span class="pc-predict-outcome-badge">Победитель</span>
</span>
<span class="pc-predict-outcome-stats">
<span class="pc-predict-outcome-percent">62%</span>
<span class="pc-predict-outcome-points">38 200</span>
<span class="pc-predict-outcome-users">96</span>
</span>
<span class="pc-predict-outcome-bar"><span class="pc-predict-outcome-fill"></span></span>
</li>
</ul>
<span class="pc-predict-total">61 250 баллов · 148 участников</span>
</div>
Что меняется само:
- data-status равен active, locked, resolved или canceled;
- data-visible становится false, когда срок показа вышел, и страница сама убирает предикт со сцены;
- data-layout равен duo при двух исходах и multi при трёх и более;
- data-color у исхода равен blue или pink: Twitch красит розовым только второй исход из двух;
- data-winner="true" появляется у победившего исхода после подведения итога;
- data-hurry="true" появляется в последние десять секунд приёма ставок;
- data-totals="false" появляется, если суммы ставок выключены в кабинете;
- переменная --pc-predict-percent на исходе всегда равна его доле ставок;
- .pc-predict-note содержит подпись стадии: закрытие ставок, победитель или отмена.
Задача:
- Сделай CSS для OBS Custom CSS.
- Фон должен быть прозрачным.
- Текст должен хорошо читаться поверх игры или камеры.
- Нужен стиль: [опиши стиль: неон, минимализм, ретро, киберпанк, спортивное табло и т.д.].
- Цвета сцены: [впиши основные цвета].
- Размер источника OBS: 620x1000, при двух исходах можно уменьшить высоту до 400.
- Число исходов, на которое рассчитываю: [например ровно два или до четырёх].
- Шрифт: [системный или file:///путь/к/моему-шрифту.woff2].
Требования к ответу:
- Верни только готовый CSS.
- Не используй внешние URL, кроме моего file:/// шрифта, если я его указал.
- Используй селекторы .pc-predict, .pc-predict-title, .pc-predict-timer, .pc-predict-note,
.pc-predict-outcome, .pc-predict-outcome-title, .pc-predict-outcome-percent,
.pc-predict-outcome-bar, .pc-predict-outcome-fill и атрибуты data-*.
- Не скрывай .pc-predict-outcome-title и .pc-predict-outcome-percent.
- Не пытайся скрывать предикт сам: это делает страница через data-visible.
- Ширину полосы бери из var(--pc-predict-percent), не из фиксированных значений.
- Сделай отдельный вид для data-status="resolved" и data-status="canceled".
- Учитывай, что исходов может быть от двух до десяти: правила под два варианта закрывай
селектором .pc-predict[data-layout="duo"].
- Добавь font-variant-numeric: tabular-nums, чтобы проценты не дёргались.
- Если добавляешь анимацию, сделай её медленной и ненавязчивой.
Что делать, если на сцене пусто¶
| Признак | Причина | Что сделать |
|---|---|---|
| Источник пуст всегда | виджет выключен или ссылка заменена | включите виджет во вкладке Сцена OBS и проверьте адрес в OBS |
| Предикт виден, проценты стоят | нет права channel:read:predictions |
переподключите Twitch-аккаунт владельца |
| Предикт не появился после запуска из Twitch | события EventSub не дошли | откройте раздел Предикты — вход в него сверяет состояние с Twitch |
| Кнопки пульта недоступны | нет права channel:manage:predictions |
переподключите Twitch-аккаунт владельца |
Запустить не нажимается |
на канале уже идёт предикт | подведите итог или отмените текущий |
| Twitch отказывает при запуске | канал не Affiliate и не Partner |
предикты Twitch такому каналу недоступны |
Безопасность¶
- Не публикуйте OBS-ссылку в чате или описании канала: по ней виден предикт канала.
- Не показывайте ссылку на стриме — в ней есть токен.
- Если ссылка утекла, нажмите
Заменить ссылку: старый адрес сразу перестанет открываться. - Если источник больше не нужен, нажмите
Выключить виджет: заготовки и настройки останутся.