// НАВИГАЦИЯ СТАНЦИИ[SYS_OK]
○ Сейчас спит или кодит костыли
← ~/графомания
[2026-03-15]//

Как я переписал OBS оверлеи в стиле TUI (btop/system24)

Зачем делать обычные анимированные гифки и плашки со StreamElements, когда можно собрать терминальный HUD в стиле btop и lazygit с нулевым радиусом скруглений и локальным Python-бриджем.

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

Когда я начал стримить, мне захотелось чего-то другого — чтобы эфир ощущался как интерфейс технической лаборатории или терминальной системы.

Вдохновение: system24, btop и lazygit

Почему именно TUI?

  • Прямые углы (border-radius: 0px): чистая геометрия, никакой лишней графической мишуры.
  • Тонкие рамки в 1 пиксель: четкие границы и аккуратные пропорции.
  • Моноширинная типографика: IBM Plex Mono для телеметрии, таймеров и счетчиков.
  • Палитра Catppuccin: мягкие контрастные цвета без ядовитого неона.

Архитектура оверлея

В репозитории OBS-Templates всё разделено на модули:

  • Локальный Python-bridge: подключается к Twitch IRC (для чата с 7TV смайлами) и DonatAlerts / DonateX через WebSockets.
  • Браузерные источники OBS: чистый HTML/CSS/JS без тяжелых фреймворков. Нагрузка на GPU и ЦПУ близка к 0%.
  • TTS: синтез речи через Yandex SpeechKit для озвучки сообщений и донатов.
  • # Пример обработки входящего доната в локальном мосту
    async def handle_donation(data):
        username = data.get("username", "Аноним")
        amount = data.get("amount", 0)
        message = data.get("message", "")
        
        # Отправляем в оверлей OBS через локальный WebSocket
        await broadcasttoobs({
            "type": "DONATE",
            "user": username,
            "amount": f"{amount} ₽",
            "msg": message
        })
    

    В итоге весь стрим работает стабильно, локально и без задержек. Исходники открыты в моих костылях!

    // ОБСУЖДЕНИЕ В ЧАТЕ (GISCUS / GITHUB)
    // ОБСУЖДЕНИЕ[GISCUS]
    [ Комментарии отключены или ожидают заполнения NEXT_PUBLIC_GISCUS_REPO_ID в .env ]