DotaStreamKit is a free, open-source toolkit for Dota 2 streamers. It adds OBS Browser Source overlays for anti-stream-sniping draft and minimap protection, Match Intel, streamer MMR statistics, and automated Twitch Channel Points Predictions powered by Dota 2 Game State Integration (GSI).
DotaStreamKit — бесплатный локальный набор инструментов для стримеров Dota 2. Он добавляет защиту от стримснайпинга в OBS, скрывает драфт и миникарту, показывает Match Intel и MMR-статистику, а также автоматизирует прогнозы Twitch за баллы канала через Dota 2 GSI.
Download the latest release · Быстрый старт на русском · Quick start in English · OBS setup
Windows x64, Linux x64, and macOS arm64/x64 builds are available. DotaStreamKit runs locally, uses the official Dota 2 GSI interface, and does not inject into the game client.
Key capabilities:
- protect the stream by covering draft picks, top-bar picks, minimap ward information, and queue/search areas;
- add OBS overlays for rank medals, MMR goals, W-L, notable players, Aegis/Roshan timers, and live prediction status;
- create, lock, resolve, and safely cancel Twitch Channel Points Predictions from live match state;
- configure streamer and spectator profiles independently from a bilingual RU/EN dashboard.
Note
Project sponsor / Спонсор проекта: XyraNet VPN · Website · Telegram bot
If DotaStreamKit helps your stream, please star the repository. It helps other Dota 2 streamers discover the project.
Note
XyraNet VPN поддерживает разработку DotaStreamKit. Сайт: xyranet.pro Telegram-бот: @XyraNet_bot
Если тебе нужен VPN для стримов, игр и повседневного использования, посмотри XyraNet VPN. Поддержка спонсора помогает проекту развиваться.
Если проект понравился, поставь звезду на GitHub. Это помогает другим стримерам найти DotaStreamKit:
https://github.com/Seno47/DotaStreamKit
DotaStreamKit запускается локально на компьютере стримера и отдаёт панель управления в браузере:
http://localhost:37273
OBS-оверлей для стрима:
http://localhost:37273/overlay.html
Основные возможности:
- скрытие стадии драфта и верхней панели с пиками;
- скрытие миникарты fake-vision маской, чтобы не палить варды;
- скрытие меню поиска игры через загруженный или встроенный скрин меню;
- Match Intel оверлей: отмеченные игроки, флаги, держатель Aegis и таймер Рошана;
- статистика стримера на оверлее: Dota-медаль, звёзды/пипы, ранг в leaderboard, MMR и W-L счётчик;
- цель MMR на оверлее: текущий MMR, старт, цель, прогресс-бар, W-L, winrate и сколько побед осталось до цели;
- настройка внешнего вида цели MMR: фон можно убрать, размер полоски увеличить, выбрать стиль, анимацию, скорость, отступы и свой CSS;
- настройка положения отдельных блоков оверлея: медали в меню, медали в игре, цели MMR, таймера Рошана и Twitch-прогноза;
- режим калибровки: при MMR
0показывается отдельная calibration-медаль, а MMR после матчей не меняется; - автоматическое создание Twitch Predictions после пика героя стримером;
- автоматическое закрытие, отмена и ручное управление прогнозами;
- оверлей Twitch-прогноза: название, таймер закрытия, баллы канала, проценты и анимированная полоса исходов;
- отдельные настройки просмотра чужих игр: свои шаблоны прогнозов, переменные команд/героев и отдельный Match Intel без масок драфта или миникарты;
- поддержка личного Twitch-канала или канала стримера по нику с OAuth от имени выбранного broadcaster;
- установщик Windows с выбором папки, ярлыками и нормальным отображением в поиске Windows;
- проверка обновлений из опубликованных GitHub Releases, без установки сырого кода из ветки;
- экспорт и импорт настроек с выбором разделов: можно перенести всё сразу или только нужные части;
- локальная установка Dota Game State Integration.
Серверный режим в интерфейсе есть, но эта инструкция пока описывает только локальное использование. Для публичного сервера проект ещё не считается готовым сценарием. Чтобы процесс вообще слушал внешний интерфейс, перед запуском нужно задать DOTASTREAMKIT_SERVER_PASSWORD; без него даже выбранный серверный режим безопасно остаётся на loopback. Удалённый HTTP-доступ использует Basic Auth (любое имя пользователя и этот пароль).
-
Открой страницу релизов:
https://github.com/Seno47/DotaStreamKit/releases -
Открой самый свежий релиз и скачай сборку для своей системы:
- Windows, обычная установка:
DotaStreamKit-<version>-win-x64-Setup.exe - Windows, portable-версия без установки:
DotaStreamKit-<version>-win-x64.zip - Linux Debian/Ubuntu x64:
DotaStreamKit-<version>-linux-x64.tar.gz - macOS Apple Silicon:
DotaStreamKit-<version>-darwin-arm64.tar.gz - macOS Intel:
DotaStreamKit-<version>-darwin-x64.tar.gz
- Windows, обычная установка:
-
На Windows проще запустить установщик: он предложит папку установки, ярлык на рабочем столе и добавит DotaStreamKit в меню Пуск. Если программа уже установлена, установщик предложит исправить/обновить установку или удалить её.
-
Для portable-архива распакуй сборку в удобную папку и запусти:
- Windows:
DotaStreamKit.exe - Linux/macOS:
bash DotaStreamKit
- Windows:
-
Открой панель:
http://localhost:37273
Если Windows SmartScreen предупреждает о неизвестном приложении, это нормально для unsigned-сборки. Запускай только файлы, скачанные из релизов этого репозитория.
В разделе Setup можно вручную проверить обновления или включить проверку при запуске. DotaStreamKit устанавливает только готовые GitHub Release assets, поэтому случайный коммит из ветки master не попадёт пользователю как обновление.
Там же есть экспорт и импорт настроек. По умолчанию переносится всё, включая Twitch/Dota-настройки, пресеты защиты, цель MMR, прогнозы, Win/Lose/MMR и загруженные картинки, но перед импортом или экспортом можно оставить только нужные разделы. Настройки цели MMR входят в раздел Защита и overlay; текущая W-L/MMR статистика сессии переносится разделом Win/Lose/MMR.
DotaStreamKit нужен Twitch app, чтобы получить Client ID и Client Secret для OAuth.
-
Открой Twitch Developer Console:
https://dev.twitch.tv/console -
Войди в Twitch-аккаунт. У аккаунта должна быть подтверждена почта и включена 2FA.
-
Перейди во вкладку
Applications. -
Нажми
Register Your Application/Зарегистрировать приложение/Подать заявку. -
Заполни поля:
Поле Twitch Что указать NameЛюбое уникальное имя, например DotaStreamKit LocalOAuth Redirect URLshttp://localhost:37273/auth/twitch/callbackCategoryЛюбая подходящая категория, например Application Integration,Website IntegrationилиOther -
После ввода redirect URL нажми
Add, если Twitch показывает отдельную кнопку добавления URL. -
Пройди captcha и нажми
Create. -
Открой созданное приложение через
Manage. -
Скопируй
Client IDв полеClient IDв DotaStreamKit. -
Нажми
New Secret, скопируй секрет и вставь его вClient Secretв DotaStreamKit. -
В DotaStreamKit нажми
Подключить Twitch. -
Twitch откроет страницу разрешений. Подтверди доступ.
Запрашиваемые права:
channel:manage:predictions- создавать, закрывать, отменять и завершать прогнозы;user:write:chat- отправка сообщений в чат, если эта функция используется.
Важно:
Client Secretнельзя публиковать и нельзя показывать зрителям.- Если Twitch показывает
reconnect, нажмиПодключить Twitchещё раз и подтверди новые права. - Twitch требует, чтобы для управления Predictions OAuth был выполнен именно от имени выбранного broadcaster. Одних прав модератора недостаточно.
В блоке Twitch есть поле Канал для прогнозов.
Личный Twitch аккаунт- прогнозы создаются на канале аккаунта, через который ты авторизовался.Канал стримера по нику- канал выбирается по нику, после чего Twitch OAuth нужно пройти, войдя именно в этот broadcaster-аккаунт. Программа сохраняет broadcaster ID, поэтому смена ника стримера не должна ломать привязку. Отдельный модераторский OAuth можно использовать только для поддерживаемых действий чата, но не для Predictions.
GSI - это встроенный механизм Dota 2. Это не сторонняя программа.
DotaStreamKit устанавливает только cfg-файл:
gamestate_integration_dotastreamkit.cfg
Он говорит Dota 2 отправлять состояние игры на локальный адрес:
http://127.0.0.1:37273/gsi/dota2
Как настроить:
- В панели DotaStreamKit нажми
Найти Dota. - Если путь найден правильно, нажми
Установить GSI. - Перезапусти Dota 2.
- Вверху панели должен появиться статус
Dota GSI online, когда Dota начнёт отправлять состояние.
Если авто-поиск Dota не сработал, укажи путь вручную. Пример:
C:\SteamLibrary\steamapps\common\dota 2 beta
Ручная установка через PowerShell всё ещё доступна:
npm run install:gsi -- -DotaCfgDir "D:\SteamLibrary\steamapps\common\dota 2 beta\game\dota\cfg\gamestate_integration"-
В OBS добавь
Browser Source. -
URL:
http://localhost:37273/overlay.html -
Ширина и высота должны совпадать с canvas OBS:
Canvas OBS Browser Source 1920x1080width 1920, height10802560x1440width 2560, height14403840x2160width 3840, height2160 -
Поставь Browser Source выше захвата Dota 2.
-
Если OBS показывает старую маску после обновления, нажми
Refresh cache of current pageв свойствах Browser Source.
Можно загрузить один полный draft-скрин. Программа сама нарежет нужные области:
- верхнюю панель пиков;
- основную область выбора героев;
- области, которые должны скрывать пики, но не закрывать чат.
Если свой скрин не загружен, используется встроенный шаблон из проекта.
Логика авто-скрытия:
- до пика героя стримером скрывается draft-экран;
- после завершения pick-фазы, в которой стример выбрал героя, остаётся скрытие верхней панели;
- после завершения драфта и перехода к планированию маски убираются.
В настройках можно выбрать, скрывать ли все пики или только сторону стримера. Если команда стримера ещё неизвестна, DotaStreamKit временно скрывает все пики, чтобы не раскрыть лишнее.
Миникарта закрывается встроенной fake-vision маской. Пользовательская загрузка миникарты не используется.
Настройки:
- размер миникарты: обычная или большая;
- сторона: слева или справа;
- фон миникарты: реалистичный, простой или пустой.
Маска старается оставить героев, крипов и другие иконки видимыми, но скрыть информацию о настоящих вардах.
Для скрытия поиска можно загрузить скрин меню Dota. Если скрин не загружен, используется встроенный ассет.
Режимы:
Только поиск- авто-скрытие включается только если Dota/GSI даёт явный сигнал поиска или matchmaking.Меню + поиск- авто-скрытие включается в меню Dota и во время поиска.- кнопка
Поисквручную - принудительно держит маску включённой, пока ты сам её не выключишь.
Если Dota закрыта полностью, авто-скрытие поиска выключается. Если Dota запущена, но первый матч ещё не был сыгран и GSI молчит, режим Меню + поиск всё равно может включить маску по процессу dota2.exe.
Match Intel добавляет на OBS-оверлей небольшие игровые подсказки, которые не требуют открывать отдельные сайты во время матча.
Что можно включить:
- отмеченные игроки - имена над слотами героев;
- флаги игроков, если страна известна или задана вручную;
- таймер Aegis под игроком, который держит Aegis: ровно 5 минут после подбора;
- таймер Рошана с окном возрождения;
- статистику стримера: медаль, MMR, ранг в leaderboard и W-L за сессию;
- цель MMR: отдельный компактный блок с прогрессом от стартового MMR до выбранной цели.
Отмеченные игроки берутся из двух источников. DotaStreamKit может использовать данные OpenDota для игроков с высоким рангом в leaderboard, а ещё позволяет добавить игроков вручную по Dota account id. Ручной список удобен для друзей, частых соперников, известных игроков или любых аккаунтов, которые ты хочешь отмечать всегда. Для каждого такого игрока можно задать ник и двухбуквенный код страны.
Статистика стримера на оверлее настраивается отдельно от отмеченных игроков. Можно показывать только медаль, только MMR, только W-L или любую комбинацию. Источник медали выбирается в настройках: по Dota-аккаунту, по ручному MMR или автоматически - сначала аккаунт, потом ручной MMR.
MMR можно вести вручную или обновлять автоматически после победы/поражения. Авто-обновление применяет заданные Win MMR и Loss MMR, но не выходит за диапазон 1..99999. Если поставить MMR 0, программа считает аккаунт на калибровке: показывает calibration-медаль и не трогает MMR после матчей.
В Match Intel можно включить Распознавать текущий MMR через OCR. Программа читает число MMR из заданной области экрана, когда Dota 2 открыта в главном меню.
Зависимости:
- системные библиотеки для
node-screenshots:libxcb1,libxrandr2,libdbus-1-3; - X11:
slopдля выбора области (sudo apt install slop); - Wayland (Sway/Hyprland и др.):
slurpдля выбора области иgrimкак fallback захвата (sudo apt install slurp grim).
Если slop/slurp не установлены, координаты области можно ввести вручную в панели. После смены масштаба экрана (HiDPI) область может потребовать перенастройки.
Цель MMR настраивается отдельно для аккаунтов стримера. Можно указать стартовый MMR для расчёта прогресса, целевой MMR и выбрать, какие части показывать: текущий MMR, старт, цель, сколько MMR осталось, счёт W-L, winrate и количество побед до цели. Если нужен минимальный вид для OBS, можно убрать общий фон/рамку и оставить только хотбар, цифры и текст.
Внешний вид цели MMR можно собрать без ручного CSS: есть пресеты полоски, готовые анимации, настройка скорости, высоты прогресс-бара, скругления, свечения, цветов и отдельных отступов сверху/снизу/слева/справа. Для тонкой доработки остаётся поле custom CSS.
В этой же вкладке есть редактор положения оверлея. Можно выбрать нужный блок, посмотреть его на превью со скриншотом или на чёрном/белом фоне, сдвинуть по горизонтали и вертикали, сбросить один блок или вернуть все позиции к значениям по умолчанию. Так настраиваются медаль в меню, медаль в игре, цель MMR, таймер Рошана и блок Twitch-прогноза.
Интерфейс Match Intel разбит на сворачиваемые секции: игровая информация, статистика стримера, позиции оверлея и кастомные notable players. Верхняя строка показывает короткий статус включённых подсказок и помогает быстро понять, что сейчас активно.
Во время драфта и стадии планирования медаль, MMR и W-L по умолчанию скрываются, чтобы не мешать защите пиков. Это можно выключить отдельным переключателем, если статистику нужно оставить видимой даже на драфте. После выхода из матча Match Intel очищается с оверлея, чтобы старые отметки, Aegis или таймер Рошана не оставались на экране.
Для просмотра чужих игр есть отдельные настройки Match Intel. В этом режиме DotaStreamKit может показывать отмеченных игроков, флаги, Aegis и Рошана, но не включает защитные маски драфта, верхней панели или миникарты: при spectate-режиме карта и интерфейс остаются открытыми.
DotaStreamKit может автоматически создавать прогноз после того, как:
- GSI увидел пик героя стримером;
- завершилась вся pick-фаза, в которой стример выбрал героя;
- Twitch-канал находится online.
Для All Pick и похожих режимов программа ждёт конец именно той фазы, где был пик стримера: сначала обе команды должны добрать героев этой фазы, и только после этого создаётся прогноз и меняется логика draft-оверлея.
Доступны встроенные типы прогнозов:
- победа / поражение;
- киллы стримера;
- смерти стримера;
- ассисты стримера;
- не умереть до выбранной минуты;
- last hits к выбранной минуте.
У каждого типа можно настроить:
- вес для случайного выбора;
- шаблон заголовка;
- названия исходов;
- диапазоны случайных значений.
Также есть конструктор пользовательских прогнозов с переменными:
{hero}
{target}
{minute}
{kills}
{deaths}
{assists}
{last_hits}
{denies}
{level}
{team_kills}
{enemy_kills}
{total_kills}
На OBS-оверлее можно показывать только тот прогноз, который создал и отслеживает DotaStreamKit. Блок показывает название прогноза, время до закрытия приёма, названия исходов, количество баллов канала и проценты. Полоса исходов плавно анимируется при изменении соотношения ставок, а очень маленький исход всё равно остаётся читаемым.
DotaStreamKit специально не подхватывает чужие активные прогнозы на канале. Если на Twitch уже есть прогноз, созданный вручную или другим ботом, программа не будет его закрывать, отменять или завершать.
Максимальное время приёма Twitch задаёт общий таймер приёма баллов. Галочка Закрывать приём после начала игры включает отдельный ранний предел только для автоматически созданных прогнозов, а поле под ней задаёт количество секунд. По умолчанию включено 60: приём закрывается на 1:00 игрового времени, даже если таймер Twitch ещё не закончился. Если снять галочку, закрытие по игровому времени отключается. Опция Автоматически завершать прогноз по результату выбирает исход, когда результат прогноза уже однозначно известен — иногда это происходит ещё во время матча.
Опция Отменять незасчитанную игру отменяет активный прогноз при сильных сигналах, что матч не должен засчитываться: долгий disconnect, новый match id при старом прогнозе, ранний post-game без победителя или выход из активного лобби/матча. Для краша/перезахода используется задержка, чтобы обычные 5 минут reconnect не отменяли прогноз сразу.
Опция Отменять, если один исход без ставок отменяет прогноз после игры, если хотя бы на один исход не поставили баллы канала. Перед отменой или завершением программа перечитывает состояние прогноза с Twitch, чтобы не решать исход по устаревшим локальным данным.
Для просмотра чужих игр есть отдельный раздел Настройки просмотра. Там можно держать свои шаблоны ставок и не смешивать их с обычными прогнозами стримера. Встроенные шаблоны для просмотра рассчитаны на команды и общий матч: победа Radiant/Dire, длительность игры, общий темп киллов и киллы сторон к выбранной минуте.
В шаблонах просмотра доступны переменные для команд и состава матча:
{radiant_team}
{dire_team}
{winning_team}
{match_id}
{radiant_heroes}
{dire_heroes}
{radiant_hero_1} ... {radiant_hero_5}
{dire_hero_1} ... {dire_hero_5}
{radiant_player_1} ... {radiant_player_5}
{dire_player_1} ... {dire_player_5}
{radiant_kills}
{dire_kills}
{total_kills}
{minute}
Уже запущена другая копия DotaStreamKit.
Решение:
npm run stop
npm startВ релизной сборке просто закрой старое окно/процесс DotaStreamKit и запусти заново.
- Проверь
Client IDиClient Secret. - Нажми
Подключить Twitch. - Подтверди разрешения.
- Если менял scopes или secret в Twitch Developer Console, подключение нужно обновить.
Проверь:
- Twitch подключён;
- канал online;
- включено
Создавать автоматически; - GSI online;
- герой уже пикнут, и pick-фаза стримера завершилась;
- нет активного прогноза, который ещё не закрыт.
В свойствах Browser Source нажми Refresh cache of current page.
Выключи Авто скрывать поиск или выключи ручную кнопку Поиск, если она активна.
Если DotaStreamKit оказался полезен, можно поддержать разработку:
- Telegram-канал разработчика: https://t.me/ivagakura_projects
- GitHub проекта: https://github.com/Seno47/DotaStreamKit
- Поставить звезду проекту на GitHub: https://github.com/Seno47/DotaStreamKit
- T-Bank: https://www.tinkoff.ru/rm/r_rjNFcYKfDe.jmzXvHFVxI/35eKu35373
- TRON / TRC20:
TGZZQaMAvqVF7ae8C6Gfr8MxkTz3j1xqsg - TON:
UQCpse9_qEK4xCAeYKI1xJc9pCqroEu6IYffnjnw4iEfBbrG - BTC:
1KcxKVuU6T5SHbzT5nN8hCgJRe1MWjqTS9 - ERC20:
0x8fcbf61653aaba7326cc33ee1dda62949757592b - BEP20:
0x8fcbf61653aaba7326cc33ee1dda62949757592b
Проверяй сеть перед переводом. Для ERC20 и BEP20 адрес одинаковый, но сеть перевода должна быть выбрана правильно.
Note
XyraNet VPN supports DotaStreamKit development. Website: xyranet.pro Telegram bot: @XyraNet_bot
If you need a VPN for streaming, gaming, or everyday use, check out XyraNet VPN. Supporting the sponsor helps the project move forward.
If you like the project, please leave a GitHub star. It helps other streamers discover DotaStreamKit:
https://github.com/Seno47/DotaStreamKit
DotaStreamKit runs locally on the streamer's PC and opens a dashboard in the browser:
http://localhost:37273
OBS overlay URL:
http://localhost:37273/overlay.html
Main features:
- hides Dota 2 draft screen and top pick bar;
- hides minimap ward information with a fake-vision overlay;
- hides queue/search menu areas using a menu screenshot;
- Match Intel overlay: notable players, country flags, Aegis holder, and Roshan timer;
- streamer stats overlay: Dota rank medal, pips/stars, leaderboard rank, MMR, and W-L counter;
- MMR goal overlay: current MMR, start MMR, target, progress bar, W-L, winrate, and wins needed for the goal;
- MMR goal styling without custom code: hide the panel background, enlarge the bar, choose a style preset, animation, speed, padding, and custom CSS;
- position customization for overlay blocks: menu medal, in-game medal, MMR goal, Roshan timer, and Twitch prediction;
- calibration mode: MMR
0shows a calibration medal and disables automatic MMR changes; - creates Twitch Channel Points Predictions after the streamer picks a hero;
- supports manual prediction controls and automatic lock/resolve/cancel flows;
- Twitch prediction overlay: title, close timer, channel points, percentages, and animated outcome bar;
- separate spectator settings for watched games: independent prediction templates, team/hero variables, and Match Intel without draft or minimap masks;
- supports a personal Twitch channel or a streamer channel selected by login, with OAuth from that broadcaster;
- Windows installer with install path selection, shortcuts, and Windows search/start menu integration;
- update checks from published GitHub Releases only, never from raw branch commits;
- settings export/import with section selection, from one section to the full local setup;
- installs Dota Game State Integration locally.
The dashboard contains a server mode, but this README intentionally covers only local usage for now. Public server deployment is not documented as a stable path yet. To listen on an external interface at all, set DOTASTREAMKIT_SERVER_PASSWORD before startup; without it, server mode safely stays on loopback. Remote HTTP access uses Basic Auth (any username and that password).
-
Open the releases page:
https://github.com/Seno47/DotaStreamKit/releases -
Open the latest release and download the build for your system:
- Windows, normal installer:
DotaStreamKit-<version>-win-x64-Setup.exe - Windows, portable build:
DotaStreamKit-<version>-win-x64.zip - Linux Debian/Ubuntu x64:
DotaStreamKit-<version>-linux-x64.tar.gz - macOS Apple Silicon:
DotaStreamKit-<version>-darwin-arm64.tar.gz - macOS Intel:
DotaStreamKit-<version>-darwin-x64.tar.gz
- Windows, normal installer:
-
On Windows, the installer is the recommended path. It lets you choose the install folder, create a desktop shortcut, and adds DotaStreamKit to the Start menu. If DotaStreamKit is already installed, setup offers to repair/update or remove it.
-
For the portable archive, extract it and run:
- Windows:
DotaStreamKit.exe - Linux/macOS:
bash DotaStreamKit
- Windows:
-
Open:
http://localhost:37273
If Windows SmartScreen warns you about an unknown app, that is expected for an unsigned build. Only run files downloaded from this repository's releases.
The Setup page can check for updates manually or on startup. Updates are installed only from published GitHub Release assets, so an unfinished commit on master will not be treated as an update.
The same page has settings export/import. By default it transfers everything, including Twitch/Dota setup, protection presets, MMR goal settings, predictions, Win/Lose/MMR, and uploaded images. Before importing or exporting, you can keep only the sections you need. MMR goal configuration belongs to Protection and overlay; current session W-L/MMR state belongs to Win/Lose/MMR.
DotaStreamKit needs a Twitch app to get a Client ID and Client Secret.
-
Open Twitch Developer Console:
https://dev.twitch.tv/console -
Log in. Your Twitch account needs a verified email and 2FA enabled.
-
Open
Applications. -
Click
Register Your Application. -
Fill the fields:
Twitch Field Value NameAny unique name, for example DotaStreamKit LocalOAuth Redirect URLshttp://localhost:37273/auth/twitch/callbackCategoryAny suitable category, for example Application Integration,Website Integration, orOther -
Click
Addafter entering the redirect URL if Twitch shows a separate add button. -
Complete captcha and click
Create. -
Open the created app with
Manage. -
Copy
Client IDinto DotaStreamKit. -
Click
New Secret, copy it, and paste it intoClient Secret. -
Click
Connect Twitchin DotaStreamKit. -
Approve Twitch permissions.
Required scopes:
channel:manage:predictions- create, lock, cancel, and resolve predictions;user:write:chat- send chat messages if enabled.
Important:
- Do not publish your
Client Secret. - If the dashboard shows
reconnect, clickConnect Twitchagain and approve the updated permissions. - Twitch requires Prediction OAuth to belong to the selected broadcaster; moderator status alone is not sufficient.
Personal Twitch accountmanages predictions on the channel used for OAuth.Streamer channel by loginresolves the channel by login, then OAuth must be completed while signed in as that broadcaster. A separate moderator OAuth may be used only for supported chat actions, not for Predictions.
GSI is a built-in Dota 2 feature, not a third-party program.
DotaStreamKit installs only this config file:
gamestate_integration_dotastreamkit.cfg
It tells Dota 2 to send game state to:
http://127.0.0.1:37273/gsi/dota2
Setup:
- In DotaStreamKit, click
Find Dota. - If the path is correct, click
Install GSI. - Restart Dota 2.
- The dashboard should show
Dota GSI onlinewhen Dota starts sending state.
If auto-detection fails, set the Dota 2 folder manually. Example:
C:\SteamLibrary\steamapps\common\dota 2 beta
-
Add an OBS
Browser Source. -
URL:
http://localhost:37273/overlay.html -
Match the Browser Source size to your OBS canvas:
OBS Canvas Browser Source 1920x1080width 1920, height10802560x1440width 2560, height14403840x2160width 3840, height2160 -
Place the Browser Source above your Dota 2 capture.
-
If OBS keeps an old overlay after an update, click
Refresh cache of current page.
You can upload one full draft screenshot. The app slices the needed areas automatically.
If no custom screenshot is uploaded, DotaStreamKit uses the bundled default asset.
Auto behavior:
- hide draft while the streamer is still in their pick phase;
- after the streamer's pick phase ends, hide only the top pick bar;
- remove draft/top masks after draft ends and strategy/planning starts.
You can choose whether to hide all picks or only the streamer's team side. If the streamer's team is not known yet, DotaStreamKit temporarily hides all picks to avoid leaking information.
The minimap uses the built-in fake-vision overlay. Custom minimap uploads are not supported.
Settings:
- normal or large minimap;
- left or right minimap;
- realistic, simple, or empty minimap background.
The overlay tries to keep heroes, creeps, and map icons visible while hiding real ward information.
You can upload a Dota menu screenshot for queue/search masking. If none is uploaded, the bundled asset is used.
Modes:
Search only- auto-mask only when Dota/GSI provides an explicit queue/search/matchmaking signal.Menu + search- auto-mask in Dota menu and during search.- manual
Queuebutton - force the mask to stay on until you turn it off.
If Dota is closed, automatic queue masking turns off. If Dota is running but GSI has not sent data yet, Menu + search can still enable the mask by checking the local dota2.exe process.
Match Intel adds small in-game helpers to the OBS overlay, so the streamer does not need to keep extra sites open during a match.
Available overlay pieces:
- notable players - marked player names above hero slots;
- player flags when the country is known or set manually;
- Aegis timer under the current Aegis holder: exactly 5 minutes after pickup;
- Roshan timer with the respawn window;
- streamer stats: rank medal, MMR, leaderboard rank, and session W-L;
- MMR goal: a compact progress block from a chosen start MMR to the account target.
Notable players come from two places. DotaStreamKit can use OpenDota data for high leaderboard players, and you can also add any Dota account id manually. The manual list is useful for friends, frequent stream snipers, known players, or any account you want to mark every time. Each manual player can have a custom nickname and a two-letter country code.
Streamer stats are configured separately from notable players. You can show only the medal, only MMR, only W-L, or any combination. The rank medal source can be the Dota account, manual MMR, or automatic fallback from account to manual MMR.
Manual MMR can be updated automatically after wins and losses. The configured Win MMR and Loss MMR values are applied after the match, clamped to 1..99999. If MMR is set to 0, DotaStreamKit treats the account as calibrating: it shows the calibration medal and does not change MMR after matches.
In Match Intel, enable Recognize current MMR via OCR. DotaStreamKit reads the MMR number from a screen region while Dota 2 is in the main menu.
Dependencies:
- system libraries for
node-screenshots:libxcb1,libxrandr2,libdbus-1-3; - X11:
slopfor region selection (sudo apt install slop); - Wayland (Sway/Hyprland, etc.):
slurpfor region selection andgrimas capture fallback (sudo apt install slurp grim).
If slop/slurp are not installed, enter region coordinates manually in the dashboard. After changing display scaling (HiDPI), you may need to reconfigure the region.
The MMR goal block is configured per streamer account. You can set the start MMR used for progress calculation, the target MMR, and choose which parts are visible: current MMR, start, target, remaining MMR, W-L record, winrate, and wins needed to reach the target. For a clean OBS-only look, the panel background/frame can be hidden while the bar, numbers, and text stay visible.
MMR goal styling does not require hand-written CSS. The dashboard includes bar presets, ready animations, animation speed, bar height, radius, glow, colors, and separate top/right/bottom/left padding controls. Custom CSS is still available for final tweaks.
The same tab includes an overlay position editor. Choose a block, preview it on a screenshot or a black/white background, move it horizontally and vertically, reset one block, or reset every overlay position. It supports the menu medal, in-game medal, MMR goal, Roshan timer, and Twitch prediction block.
The Match Intel page is grouped into collapsible sections for game information, streamer stats, overlay positions, and custom notable players. A small status row shows which helper groups are currently active.
During draft and strategy time, the medal, MMR, and W-L are hidden by default so they do not interfere with pick protection. A separate switch can keep streamer stats visible during those stages. After leaving a match, Match Intel is cleared from the overlay so old player marks, Aegis, or Roshan timers do not stay on screen.
Watched games have separate Match Intel settings. In spectator mode DotaStreamKit can still show notable players, flags, Aegis, and Roshan, but it does not enable draft, top-bar, or minimap protection masks: the watched game UI stays visible.
DotaStreamKit can auto-create a prediction after:
- GSI sees the streamer's picked hero;
- the full pick phase where the streamer picked that hero has ended;
- the Twitch channel is online.
For All Pick and similar modes, the app waits for the whole phase to finish, including the opponent pick in that phase, before creating the prediction or switching draft protection behavior.
Built-in prediction types:
- win / loss;
- streamer kills;
- streamer deaths;
- streamer assists;
- no death until selected minute;
- last hits by selected minute.
Each type can configure:
- random selection weight;
- title template;
- outcome names;
- random value ranges.
Custom templates can use variables such as:
{hero}
{target}
{minute}
{kills}
{deaths}
{assists}
{last_hits}
{denies}
{level}
{team_kills}
{enemy_kills}
{total_kills}
The OBS overlay can show only the prediction created and tracked by DotaStreamKit. The block shows the prediction title, time until betting closes, outcome names, channel points, and percentages. The outcome bar animates smoothly when the split changes, and a very small outcome still keeps readable text.
DotaStreamKit intentionally does not adopt unrelated active predictions on the channel. If Twitch already has a prediction created manually or by another bot, the app will not lock, cancel, or resolve it.
Maximum Twitch entry time sets the overall Channel Points entry timer. Lock entries after the game starts enables a separate early cutoff for automatically created predictions only, and the field below it sets the number of seconds. It is enabled at 60 by default, so entries lock at 1:00 game time even if the Twitch timer has not ended. Clear the checkbox to disable game-time locking. Resolve automatically when the result is known selects the outcome as soon as the prediction result is unambiguous, which can happen before the match ends.
The Cancel invalid game option cancels active predictions on strong signals that a match should not count: long disconnect, a new match id while an old prediction is active, early post-game without a winner, or leaving an active lobby/match view. Crash/reconnect handling uses a delay so a normal reconnect window does not cancel instantly.
The Cancel if one outcome has no points option cancels the prediction after the game if at least one outcome received no Channel Points. Before canceling or resolving, DotaStreamKit refreshes the prediction from Twitch so it does not decide from stale local data.
Watched games use a separate Spectator settings page. It has independent prediction templates, so regular streamer bets do not mix with bets for games you are watching. Built-in spectator templates focus on the teams and the full match: Radiant/Dire winner, game duration, total kills pace, and side kills by a selected minute.
Spectator templates can use match and lineup variables:
{radiant_team}
{dire_team}
{winning_team}
{match_id}
{radiant_heroes}
{dire_heroes}
{radiant_hero_1} ... {radiant_hero_5}
{dire_hero_1} ... {dire_hero_5}
{radiant_player_1} ... {radiant_player_5}
{dire_player_1} ... {dire_player_5}
{radiant_kills}
{dire_kills}
{total_kills}
{minute}
Another DotaStreamKit copy is already running.
For development builds:
npm run stop
npm startFor release builds, close the old DotaStreamKit process and start it again.
- Check
Client IDandClient Secret. - Click
Connect Twitch. - Approve permissions.
- If you changed scopes or generated a new secret, reconnect Twitch.
Check that:
- Twitch is connected;
- the channel is live;
Auto createis enabled;- GSI is online;
- the hero was picked and the streamer's pick phase ended;
- there is no active prediction already open.
Click Refresh cache of current page in Browser Source properties.
Check whether the manual Queue button is enabled. Manual mode intentionally keeps the mask visible.
If DotaStreamKit helps you, you can support development:
- Developer Telegram channel: https://t.me/ivagakura_projects
- GitHub repository: https://github.com/Seno47/DotaStreamKit
- Star the project on GitHub: https://github.com/Seno47/DotaStreamKit
- T-Bank: https://www.tinkoff.ru/rm/r_rjNFcYKfDe.jmzXvHFVxI/35eKu35373
- TRON / TRC20:
TGZZQaMAvqVF7ae8C6Gfr8MxkTz3j1xqsg - TON:
UQCpse9_qEK4xCAeYKI1xJc9pCqroEu6IYffnjnw4iEfBbrG - BTC:
1KcxKVuU6T5SHbzT5nN8hCgJRe1MWjqTS9 - ERC20:
0x8fcbf61653aaba7326cc33ee1dda62949757592b - BEP20:
0x8fcbf61653aaba7326cc33ee1dda62949757592b
Double-check the network before sending crypto. ERC20 and BEP20 use the same address here, but the selected transfer network still matters.
For contributors or local development without the release archive:
npm install
npm startUseful commands:
npm run check
npm run stop
npm run build:win
npm run build:win:installer
npm run build:linux
npm run build:macBuild portable release archives:
npm run build:win
npm run build:win:installer
npm run build:linux
npm run build:macThe archives are written to:
dist/DotaStreamKit-<version>-win-x64.zip
dist/DotaStreamKit-<version>-win-x64-Setup.exe
dist/DotaStreamKit-<version>-linux-x64.tar.gz
dist/DotaStreamKit-<version>-darwin-arm64.tar.gz
dist/DotaStreamKit-<version>-darwin-x64.tar.gz
The Windows installer build requires Inno Setup 6.
Local data, config, OAuth tokens, uploaded screenshots, and generated assets are stored in data/. This folder is ignored by Git.
- Twitch Developer Console: https://dev.twitch.tv/console
- Twitch app registration docs: https://dev.twitch.tv/docs/authentication/register-app
- Twitch OAuth token docs: https://dev.twitch.tv/docs/authentication/getting-tokens-oauth

