Перейти к содержанию

Таймер стрима

Таймер стрима — это секундомер для сцены OBS. Он считает время вперёд от нуля: включили перед перерывом, поставили на паузу, продолжили, сбросили. Одно и то же состояние видят страница в OBS, кабинет, пульт в окне OBS, кнопки Stream Deck и чат: сверять их вручную не нужно.

У канала один таймер.

Нужна помощь разработчика?

Напишите mrgorkiy в Telegram. Укажите страницу, ожидаемый результат, что произошло и шаги для повторения. Можно приложить скриншот или короткое видео. Перед отправкой закройте токены, коды подтверждения и приватные ссылки OBS.

Что на странице

Страница Владелец → Таймер стрима разбита на вкладки. Над ними — текущее состояние таймера и четыре плитки-сводки: работает ли ссылка для OBS, какое выбрано оформление, настроен ли пульт для OBS и Stream Deck, включена ли команда !таймер. Нажатие на плитку открывает нужную вкладку.

Вкладка Что там
Пульт крупное время и кнопки Старт, Пауза, Сброс; где ещё можно управлять таймером
Сцена OBS приватная ссылка для Browser Source, формат времени и задержка скрытия после сброса
Оформление вид таймера, цвета, подпись и свой CSS с живым превью
Док и Stream Deck токен управления, пульт для панели в OBS и адреса кнопок Stream Deck
Команды чата тумблеры команды !таймер и её английского алиаса !timer

Формат, задержка и оформление сохраняются вместе кнопкой Сохранить на панели внизу страницы. Пока изменения не сохранены, у вкладки стоит жёлтая точка, а на сцене остаётся прежний вид. Кнопки пульта, ссылки и тумблеры команд срабатывают сразу.

Как таймер ведёт себя на сцене

Состояние Что на сцене
Идёт цифры видны и меняются каждую секунду
Пауза цифры видны и стоят на месте
Сброшен ещё несколько секунд видно 00:00, потом источник пустеет

Задержка после сброса настраивается на вкладке Сцена OBS: по умолчанию 5 секунд, 0 — исчезает сразу, максимум 3600. Пауза не скрывает таймер никогда: пока идёт перерыв, зритель должен видеть, сколько уже прошло.

Сброс из кабинета переспрашивает, если таймер идёт или стоит на паузе: время обнулится сразу у всех.

Секунды считает сама страница в OBS. Сервер присылает только точку отсчёта — момент старта и накопленное время, — поэтому цифры идут ровно даже при коротком обрыве связи, а после переподключения сходятся снова.

Формат времени

Формат Пример Когда выбирать
Авто 07:42, после часа 01:07:42 обычные перерывы, где час — редкость
Минуты и секунды (mm:ss) 67:42 нужно постоянное число ячеек, а часы не нужны
Всегда с часами (hh:mm:ss) 01:07:42 сцена рассчитана на шесть цифр с самого начала

В режиме Авто источник становится шире в тот момент, когда появляется час. Если оформление в OBS рассчитано на фиксированную ширину, выбирайте постоянный формат.

Ссылка для OBS

Публичная ссылка имеет вид:

/{channel}/timer/{link_id}/{token}

Токен показывается только сразу после создания или замены. PulseCaster хранит только хэш токена, поэтому старую полную ссылку нельзя повторно раскрыть из настроек. Если URL потерялся, нажмите Заменить ссылку и вставьте новый адрес в OBS. Замена и выключение переспрашивают: источник в OBS опустеет.

Если ссылка выключена, токен неверный или канал не совпадает, страница отдаёт 404.

Как добавить в OBS

  1. Откройте Владелец → Таймер стрима → вкладка Сцена OBS.
  2. Нажмите Создать ссылку и скопируйте адрес.
  3. В OBS добавьте источник Browser / Браузер и вставьте ссылку в поле URL.
  4. Задайте размер источника, например 520x180. Цифры подстраиваются под размер сами.
  5. Больше ничего не нужно: таймер приходит в оформлении из вкладки Оформление.

Страница прозрачная. Обновляется она через SSE: перезагружать источник не нужно ни при старте и паузе, ни после сохранения нового оформления в кабинете.

Параметры адреса

Параметр Что делает
?style=none отключает встроенный вид и цвета из кабинета: остаются цифры, подпись и свой CSS

style=none нужен, когда оформление целиком пишется в поле Custom CSS у источника OBS. Если вы так уже сделали раньше, ничего менять не нужно: такой источник выглядит как прежде. Правила видимости от параметра не зависят: сброшенный таймер всё так же исчезает со сцены сам.

Оформление

Вкладка Оформление устроена как редактор сцен в разделе Ивенты роста: сверху выбирается вид, слева живое превью, справа настройки выбранной части. Нажмите в превью на цифры, панель или подпись — откроются их настройки.

Превью собрано из тех же правил, что получает OBS. Под ним можно переключить пример: Идёт, Пауза, Сброшен (так таймер выглядит до конца задержки скрытия), время больше или меньше часа для формата Авто, фон сцены — прозрачный, тёмный или светлый — и размер источника: 520 × 180, 400 × 120, 800 × 260 или 1920 × 1080. Поле Custom CSS в самом OBS превью не видит.

Виды

01:07:00
Электронное табло — по умолчанию Красные светящиеся цифры на тёмной панели, как у настольных часов.
01:07:05
Табло с ячейками Каждая цифра в своей клетке, секунды и двоеточия цветные.
07:42
Просто цифры Белое время с тенью поверх игры или камеры. На паузе мигает двоеточие.
Перерыв 04:58
| Вид | Как выглядит | | --- | --- | | Электронное табло | красные светящиеся цифры на тёмной панели; стоит по умолчанию | | Табло с ячейками | каждая цифра в своей клетке, двоеточия розовые, секунды жёлтые; на паузе все клетки жёлтые | | Просто цифры | белое время с тёмной тенью, без плашки; на паузе мигает двоеточие | | Плашка с подписью | полупрозрачная плашка, подпись слева, жёлтое время справа; при выборе подпись сразу становится `Перерыв` | | Без оформления | только цифры без цвета и размера — то же, что `?style=none`, но из кабинета | Канал, который ничего не менял, видит электронное табло ровно таким, каким оно было до появления редактора. Смена вида сбрасывает цвета прошлого вида, а подпись и свой CSS сохраняются. Исключение — подпись `Перерыв`, которую поставила «Плашка с подписью»: если её не меняли, при уходе с плашки она убирается. ### Что настраивается | Часть | Настройки | | --- | --- | | Цифры | цвет цифр, цвет на паузе, цвет двоеточий, цвет секунд, свечение (у табло и плашки) или тень (у «Просто цифры») | | Панель | фон сверху и снизу — градиент, одинаковые цвета дают сплошной фон, — непрозрачность фона и скругление углов до `60` px | | Подпись | короткий текст до `40` символов над цифрами или слева от них и его цвет; пустое поле — подписи нет | | Свой CSS | обычные CSS-правила для страницы таймера, до `20 000` символов | Пока поле цвета не трогали, в нём стоит цвет выбранного вида с пометкой `из вида`. Свой цвет можно вернуть ссылкой `как в виде`, всю панель — `Вернуть панель как в виде`, всё оформление сразу — кнопкой `Вернуть стандартное оформление`. Свечение у табло и плашки берёт цвет цифр: перекрасили цифры — перекрасилось и оно. У вида «Табло с ячейками» свечения нет, у «Просто цифры» нет панели. ### Что сильнее чего Правила накладываются в таком порядке, каждое следующее сильнее предыдущего: 1. выбранный вид; 2. цвета, панель и подпись из кабинета; 3. свой CSS из кабинета; 4. поле `Custom CSS` у источника в OBS. Вид и цвета из кабинета завёрнуты в `:where()` с нулевым весом, поэтому любое обычное правило — и своё из кабинета, и из OBS — перебивает их без `!important`. Свой CSS из кабинета удобнее тем, что его видно в превью и он одинаков во всех сценах и на всех компьютерах. CSS, который уже вставлен в OBS, переносить не обязательно: он продолжает работать. ## Свой CSS Свой CSS вставляется во вкладке `Оформление` → `Свой CSS` или в поле `Custom CSS` у Browser Source в OBS. Самая частая правка — цвет — делается одной переменной, панель и свечение при этом остаются:
.pc-timer {
  --pc-timer-ink: #4ade80;
  --pc-timer-glow: rgba(74, 222, 128, 0.85);
  --pc-timer-glow-soft: rgba(74, 222, 128, 0.45);
}
| Переменная | Что меняет | У электронного табло | | --- | --- | --- | | `--pc-timer-ink` | цвет цифр | `#ff2d2d` | | `--pc-timer-ink-paused` | цвет цифр и двоеточий на паузе | `#ff9d2d` | | `--pc-timer-sep` | цвет двоеточий | как у цифр | | `--pc-timer-ink-seconds` | цвет секунд | как у цифр | | `--pc-timer-glow`, `--pc-timer-glow-soft` | ближнее и дальнее свечение | красное | | `--pc-timer-glow-paused` | свечение на паузе | оранжевое | | `--pc-timer-panel-top`, `--pc-timer-panel-bottom` | градиент панели | `#16161a` → `#050506` | | `--pc-timer-outline` | рамка панели | белая, 8% | | `--pc-timer-radius` | скругление углов | `14px` | | `--pc-timer-label-ink` | цвет подписи | `#b8b8c0` | Стабильная структура страницы:
<div class="pc-timer"
     data-state="running"
     data-visible="true"
     data-format="auto"
     data-preset="led"
     data-text="01:07:05"
     data-length="8"
     data-digits="6"
     style="--pc-timer-chars: 8; --pc-timer-digits: 6;">
  <span class="pc-timer-label">Перерыв</span>
  <span class="pc-timer-value" aria-label="01:07:05">
    <span class="pc-timer-char pc-timer-digit" data-unit="hours">0</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="hours">1</span>
    <span class="pc-timer-char pc-timer-sep">:</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="minutes">0</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="minutes">7</span>
    <span class="pc-timer-char pc-timer-sep">:</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="seconds">0</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="seconds">5</span>
  </span>
</div>
`.pc-timer-label` появляется, только если в кабинете задана подпись. | Селектор или атрибут | Что это | | --- | --- | | `.pc-timer` | корень: плашка, рамка, фон, размер | | `.pc-timer-label` | подпись из кабинета | | `.pc-timer-value` | строка времени целиком | | `.pc-timer-char` | один символ: цифра или двоеточие | | `.pc-timer-digit`, `.pc-timer-sep` | отдельно цифры и отдельно разделители | | `[data-unit="hours\|minutes\|seconds"]` | цифры конкретной единицы | | `[data-state="idle\|running\|paused"]` | оформление под состояние, например красный на паузе | | `[data-preset="led\|cells\|plain\|pill\|none"]` | какой вид сейчас включён; `none` — без встроенной темы | | `[data-length]`, `[data-digits]` | сколько всего символов и сколько из них цифр | | `--pc-timer-chars`, `--pc-timer-digits` | те же числа как CSS-переменные | Скрытием управляет сама страница: после сброса она ставит `data-visible="false"` и убирает таймер со сцены. Своё правило `display` для `.pc-timer` это не сломает. Если хочется своей анимации исчезновения, верните показ более сильным селектором и анимируйте прозрачность:
html body .pc-timer[data-visible] { display: grid; }
.pc-timer { transition: opacity 0.4s ease; }
.pc-timer[data-visible="false"] { opacity: 0; }
Для настоящего семисегментного вида подключите свой шрифт с диска в поле `Custom CSS` у источника OBS. В превью кабинета такой шрифт не виден: у браузера нет доступа к вашему диску.
@font-face {
  font-family: "DS-Digital";
  src: url("file:///C:/Stream/fonts/ds-digital.woff2") format("woff2");
}
??? example "Промпт для AI-агента, который сделает свой CSS" Скопируйте текст ниже в ChatGPT, Codex или другой AI-инструмент, если хотите получить оформление под свою сцену.
Сделай CSS для таймера PulseCaster, который показывается в OBS через Browser Source.

Контекст:
- OBS открывает прозрачную HTML-страницу, на которой есть только время и, если задана, короткая подпись.
- Я не могу менять HTML и не хочу добавлять JavaScript.
- Можно использовать только CSS. Я вставлю его в поле «Свой CSS» в кабинете или в Custom CSS источника OBS.
- Время идёт вперёд от нуля: старт, пауза, продолжение, сброс.
- Встроенное оформление завёрнуто в :where() с нулевым весом, поэтому мои обычные правила его перебивают
  без !important. Если стиль совсем другой, я выберу в кабинете вид «Без оформления» — тогда встроенной
  темы нет вовсе, рассчитывай на чистый лист.
- HTML-структура такая:

<div class="pc-timer"
     data-state="running"
     data-visible="true"
     data-format="auto"
     data-preset="none"
     data-text="01:07:05"
     data-length="8"
     data-digits="6"
     style="--pc-timer-chars: 8; --pc-timer-digits: 6;">
  <span class="pc-timer-label">Перерыв</span>
  <span class="pc-timer-value" aria-label="01:07:05">
    <span class="pc-timer-char pc-timer-digit" data-unit="hours">0</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="hours">1</span>
    <span class="pc-timer-char pc-timer-sep">:</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="minutes">0</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="minutes">7</span>
    <span class="pc-timer-char pc-timer-sep">:</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="seconds">0</span>
    <span class="pc-timer-char pc-timer-digit" data-unit="seconds">5</span>
  </span>
</div>

Что меняется само:
- data-state равен running, paused или idle;
- data-visible становится false после сброса, и страница сама убирает таймер со сцены;
- в формате mm:ss символов пять (00:00), в hh:mm:ss — восемь (00:00:00), в формате «Авто» пять до первого часа и восемь после;
- data-length и data-digits, а также переменные --pc-timer-chars и --pc-timer-digits, всегда совпадают с текущей строкой;
- .pc-timer-label есть только тогда, когда подпись задана.

Задача:
- Фон страницы должен быть прозрачным.
- Цифры должны хорошо читаться поверх игры или камеры.
- Нужен стиль: [опиши стиль: электронное табло, неон, минимализм, ретро, киберпанк и т.д.].
- Цвета сцены: [впиши основные цвета].
- Размер источника OBS: [например 520x180 или 1920x1080].
- Подпись: [нужна или нет; где стоит — над временем или слева].
- Шрифт: [системный или file:///путь/к/моему-шрифту.woff2].

Требования к ответу:
- Верни только готовый CSS.
- Не используй внешние URL, кроме моего file:/// шрифта, если я его указал.
- Используй селекторы .pc-timer, .pc-timer-label, .pc-timer-value, .pc-timer-char, .pc-timer-digit, .pc-timer-sep.
- Не скрывай .pc-timer-value.
- Не пытайся скрывать таймер сам: это делает страница через data-visible.
- Задай все нужные свойства явно, не рассчитывая на встроенное оформление.
- Учитывай, что символов может быть пять или восемь; используй селекторы .pc-timer[data-digits="4"] и .pc-timer[data-digits="6"], если размер должен подстраиваться.
- Добавь font-variant-numeric: tabular-nums или фиксированную ширину цифр, чтобы строка не дёргалась при смене секунд.
- Сделай отдельный вид для паузы через .pc-timer[data-state="paused"].
- Добавь text-shadow или контрастную плашку, чтобы время читалось на ярком фоне.
- Если добавляешь анимацию, сделай её медленной и ненавязчивой.
## Пульт в OBS и кнопки Stream Deck У таймера отдельный токен управления. Он не совпадает с токеном ссылки для показа: ссылку можно заменить или выключить независимо от пульта и кнопок. 1. Откройте вкладку `Док и Stream Deck`. 2. Нажмите `Создать токен`. 3. Скопируйте адрес пульта или адреса нужных кнопок. Полный токен показывается только сразу после создания или замены. После перезагрузки страницы видно, что токен настроен, но сами адреса скрыты. Нажмите `Заменить токен`, если нужен новый комплект адресов; старые сразу перестанут работать. Замена и выключение переспрашивают. ### Пульт в окне OBS Адрес без действия на конце — это готовая страница-пульт: крупное время, кнопка `Старт`/`Пауза` и `Сброс`. Её вставляют в OBS как панель браузера, и управлять таймером можно прямо из окна трансляции. 1. Скопируйте адрес в блоке `Пульт в OBS`. 2. В OBS откройте `Вид` → `Панели` → `Пользовательские панели браузера` (`View` → `Docks` → `Custom Browser Docks`). 3. Впишите имя, например `Таймер`, вставьте адрес и нажмите `Применить`. 4. Перетащите панель куда удобно — например, вниз окна OBS, рядом с микшером. Панель живёт внутри OBS и в трансляцию не попадает. Кнопка слева меняется по состоянию: `Старт`, `Пауза`, `Продолжить`. Рядом со временем видно, что происходит на сцене: `Идёт`, `Пауза`, `Сброшен · ещё виден` или `Сброшен · скрыт`. Своё нажатие пульт применяет сразу, а с таймером сверяется раз в три секунды: команды из чата и со Stream Deck доезжают до него за это время. Тот же адрес открывается в обычном браузере — например, на телефоне рядом с клавиатурой. !!! tip "Панели доступны не только снизу" Панель можно оставить плавающим окном или прижать сбоку — раскладка OBS сохранится между запусками. Пульт подстраивается: в широкой полосе время и кнопки стоят в ряд, в узкой — друг под другом. ### Кнопки Stream Deck В Stream Deck создайте действие HTTP Request с методом `POST`. Готовые адреса имеют вид:
POST /{channel}/timer-webhook/{link_id}/{token}/start
POST /{channel}/timer-webhook/{link_id}/{token}/pause
POST /{channel}/timer-webhook/{link_id}/{token}/toggle
POST /{channel}/timer-webhook/{link_id}/{token}/reset
| Адрес | Что делает | | --- | --- | | `start` | запускает с нуля после сброса и продолжает с паузы; на ходу ничего не сдвигает | | `pause` | останавливает счёт, время остаётся на экране | | `toggle` | одна кнопка: идёт — ставит на паузу, стоит — запускает | | `reset` | обнуляет и через заданную задержку убирает со сцены | Открытие адреса действия в браузере отправляет `GET` и таймер не двигает: случайный переход по ссылке ничего не сломает. Для проверки используйте действие HTTP Request с методом `POST` или `curl`:
curl -X POST 'https://pulsecaster.ru/evikey/timer-webhook/3/SECRET/start'
curl -X POST 'https://pulsecaster.ru/evikey/timer-webhook/3/SECRET/toggle'
curl -X POST 'https://pulsecaster.ru/evikey/timer-webhook/3/SECRET/reset'
Успешный ответ содержит новое состояние и текущее время. На одну ссылку разрешено до 5 запросов в секунду с коротким запасом до 15 нажатий подряд. При превышении сервер отвечает `429`. ## Команда в чате Таймером управляют стример и модераторы канала. Зрителям команда не отвечает вовсе.
!таймер            — показать текущее состояние
!таймер старт      — запустить или продолжить
!таймер пауза      — остановить, оставив время на экране
!таймер сброс      — обнулить и убрать со сцены
Понимаются и привычные синонимы: `пуск`, `плей`, `продолжить`, `стоп`, `ресет`, а также английские `start`, `pause`, `reset`, `toggle`. Команду и её английский алиас `!timer` включают и выключают на вкладке `Команды чата` — тогда пультом останутся только кабинет, панель в OBS и Stream Deck. Те же тумблеры есть в общих настройках (вкладка «Команды модераторов», группа «Эфир»). Команда не отвечает и тогда, когда выключен общий тумблер «Команды админа и владельца». ## Безопасность - Не публикуйте ссылку для OBS в чате или описании канала. - Не публикуйте адрес пульта и POST-адреса Stream Deck: любой, кто знает такой URL, сможет двигать таймер. - Не показывайте пульт на демонстрации экрана: адрес с токеном виден в списке пользовательских панелей OBS. - Подпись и свой CSS видят все зрители. Менять их может любой, у кого в кабинете открыт этот раздел, — как и сам таймер. - Если ссылка утекла, нажмите `Заменить ссылку` — старый адрес сразу перестанет открываться. - Если утёк токен управления, нажмите `Заменить токен` на вкладке `Док и Stream Deck`. - Если источник больше не нужен, нажмите `Выключить`: сам таймер и его настройки останутся.