Skip to content

thedeutschmark/toolset

Repository files navigation

Stream Toolset

Source for toolset.deutschmark.online — an open-source pack of OBS browser-source overlays and companion apps for Twitch streamers. One login via the auth worker at auth.deutschmark.online, no subscriptions, config hot-swaps to the live browser source over a Durable Object websocket fanout.

This repo is a transparency mirror — the README, license, and source under apps/toolset/ are public. The canonical build source lives in the private monorepo at thedeutschmark/deutschmark.online.

Streamer-facing docs (audio normalization, IRC vs EventSub, hot-swap overlay config, per-tool tutorials) live at toolset.deutschmark.online/docs. Long-form engineering notes are at thedeutschmark/engineering-notes.

Overlays

Add these as Browser Sources in OBS. Recommended dimensions are surfaced on each tool's catalog card.

Tool What it does
Music Player Spotify now-playing widget with !sr chat song requests, wired across phone, desktop, and Spotify Connect speakers.
Chat Box Twitch chat on stream — real badges, Twitch + BTTV + FFZ + 7TV emotes, bot lines filtered.
BRB Player Auto-rotating clip player for break scenes. Per-clip EBU R128 normalization so quiet and loud clips land at the same level.
Clip Play Lets chat send YouTube, Twitch, and Streamable clips to the stream. Moderated, queued, length-capped, audio-normalized.
Video Shout-out !vso @name pulls a clip from that channel and plays it on overlay with a lower-third card.
Emote Rain Cascade of Twitch + BTTV + FFZ + 7TV emotes — start on command, stop on the next.
Lurk Peek When a chatter types !lurk, their avatar slides in from a random edge, waves, and slides back out.
Death Counter On-stream counter, tracked separately per game. Mod-bumpable from chat.
Timer Server-backed countdown for breaks, splits, and subathons. Survives OBS restarts and overlay reconnects.
Event List Recent subs, resubs, gift bombs, cheers, and raids in a themed live list.
Task List (alpha) Per-viewer task columns driven from chat — !task, !done, !focus. Donor early access.
Stream Scene (alpha) Web-based Starting Soon and Stream Ending screens with generated planets, chat, and brand color baked in.

Companion apps

Standalone apps that run alongside the stream. Each ships from its own repo; the toolset dashboard hosts the download landing page and stores their settings.

App What it does Repo
Collab Planner Pulls broadcast history from the Twitch Helix API, detects past collabs via multi-signal confidence ranking, and suggests overlap windows so cross-channel collabs skip calendar-tetris. Live at collab.deutschmark.online.
ForgetMeNot A Twitch chat bot that actually remembers your regulars — names, inside jokes, the dumb thing someone said three weeks ago. Stored locally on your machine; replies via your own Gemini or OpenAI key. Single Windows .exe, no shared backend, nothing leaves your computer. forgetmenot
Clipline Desktop app that turns livestream VOD moments into shortform clips. Pulls Twitch VODs, in-stream markers, and clip metadata; batch-renders with preset crops; transcribes via faster-whisper (optional speaker diarization via pyannote). Exports burn-in captions or sidecar ASS/SRT. clipline
Alert! Alert! Desktop app for creating stream-alert assets from video. Loads remote URLs from YouTube / Instagram / TikTok (or a local file), trims, crops, zooms, applies aspect-ratio presets, separates and normalizes audio, exports OBS-ready. Python + Flask + PySide6 + FFmpeg + yt-dlp. alert-alert

Auth and data

Authentication is Twitch OAuth handled by a Cloudflare Worker at auth.deutschmark.online. The worker sets an httpOnly SSO cookie scoped to .deutschmark.online. All API calls go to the same worker with the cookie attached via credentials: "include". Mutating requests include a CSRF token read from a dm_csrf cookie and forwarded as X-CSRF-Token.

The Spotify integration runs in a separate Cloudflare Worker. Per-user developer credentials are stored AES-GCM encrypted in Cloudflare KV. Neither worker is in this repo.

No tokens or user IDs appear in query parameters. Widget embed URLs use opaque read-only tokens (?wid=<token>). OAuth state is mandatory and PKCE is used for Spotify.

Multi-platform

Today the toolset is Twitch-only — chat ingest is tmi.js (IRC), event ingest is Twitch EventSub. Kick and YouTube Live support is on the roadmap as a Phase 1 surface migration; the dashboard already gates platform-specific UI behind a per-tool supportedPlatforms array so unsupported platforms render as "coming soon" instead of broken commands.

Environment variables

Variable Default Purpose
NEXT_PUBLIC_TOOLSET_AUTH_URL https://auth.deutschmark.online Auth and API worker base URL
NEXT_PUBLIC_WIDGET_HOST_URL https://toolset.deutschmark.online Base URL for browser-source links

Both are public — no secrets are required to build or run this frontend.

Running locally

npm install
npm run dev

The app connects to the live auth worker by default. To point at a local worker, set NEXT_PUBLIC_TOOLSET_AUTH_URL in .env.local.

Building

npm run build

Outputs a static export to out/. Compatible with Cloudflare Pages or any static host.

Stack

  • Next.js 16 (output: "export")
  • React 19
  • Tailwind CSS v4
  • TypeScript
  • Cloudflare Workers · KV · Durable Objects (auth, widget config fanout)
  • Twitch IRC (tmi.js) · EventSub · Helix
  • Spotify Web API

License

MIT — see LICENSE.

About

Streaming toolset — overlays, chat commands, and widgets behind a single Twitch login.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors