Inspiration
Clips are how a stream lives on after the broadcast. Twitch's October 2026 Stream Recaps and Recaps Spotlight put clips even closer to the center of how followers catch up. But a small channel rarely has a dedicated clipper, and the best moment of the night often passes with nobody hitting the button.
Chat always notices. When something happens, messages speed up, the same emote floods in, people type !clip. Called It turns that collective reaction into a saved clip, and gives the credit to the viewer who saw it first.
What it does
Called It runs next to OBS on the streamer's computer and listens to chat through Twitch EventSub. It watches for three kinds of collective moment:
- Command votes: enough distinct viewers type the clip command within a short window. One viewer spamming it counts once.
- Chat spike: the message rate jumps well above the channel's own recent baseline, so a small channel and a busy one are judged against themselves.
- Emote burst: the same Twitch emote shows up from many viewers at once.
When a moment qualifies, Called It asks Twitch to create a clip, then waits until Twitch confirms the clip exists. Only then does the transparent OBS overlay show Clip saved with the name of the first caller. A cooldown stops one reaction from producing a pile of clips.
After the stream, the dashboard lists every moment ranked by how hard chat reacted, with what triggered it, who called it, an energy sparkline, and a link to the real clip on Twitch. The streamer can rename, remove and restore moments in their selection. Every threshold, window and the cooldown can be tuned per channel in Settings.
A Replay mode runs the same detector on a recorded, clearly labeled fictional chat timeline, so judges can try the whole flow without Twitch credentials or a live stream. Replay never calls Twitch and never claims to be a real clip.
How I built it with Codex
I built Called It solo, in one Codex thread. I brought the product idea, the visual design boards and the decisions; Codex did the heavy lifting:
- Spec first. Codex turned my brief into a written specification, a plan and a task checklist with acceptance criteria (
specs/001-called-it/in the repo). - Twitch research. Codex read the Twitch docs for EventSub over WebSocket,
channel.chat.message, Helix Create Clip / Get Clips and the OAuth authorization code flow, and designed around their real behavior (asynchronous clip creation, reconnect messages, rate-limit headers, token refresh). - Implementation. Codex wrote the TypeScript backend (OAuth, encrypted token vault, EventSub client, clip coordinator), the pure detector, the dashboard and the OBS overlay from my design.
- Verification. Codex wrote 26 unit and integration tests (detector edge cases, duplicate messages, cooldown boundaries, offline streams, rate limits, ambiguous clip failures), drove the real app in a browser with Playwright to check every screen, and set up GitHub Actions CI, which passes.
How it works
- Node.js + TypeScript server bound to localhost: HTTP, a local WebSocket for the dashboard and overlay, OAuth and all Twitch calls.
- Twitch EventSub (WebSocket):
channel.chat.message,stream.online,stream.offline, with reconnect hand-off, keepalive recovery and duplicate filtering. - Twitch Helix API:
POST /clipsto create,GET /clipsto confirm,GET /streamsto check the channel is live first. - Twitch OAuth: broadcaster token with
user:read:chatandclips:edit, encrypted at rest with AES-256-GCM. No chat posting scope. - Deterministic detector: no network, clock or randomness inside, so live chat and replay produce identical decisions from identical timestamps.
- Frontend: TypeScript, native DOM and Vite. The overlay is a transparent 1920×1080 OBS browser source with a private read-only key.
Challenges
"Chat went crazy" means different things in a 5-viewer channel and a 5,000-viewer one. Comparing a short reaction window against the channel's own baseline, excluding the reaction itself, and requiring distinct viewers made detection both fair and testable.
Clip creation is asynchronous: a successful request does not mean a clip exists. Called It polls for confirmation within a bounded window and has explicit paths for offline streams, clip restrictions, rate limits and expired tokens, so the overlay never celebrates a clip that does not exist.
Crediting the right person was harder than it looks: the first message in the window may be a quiet one from before the burst. The detector credits the first command voter, or the start of the accelerated run of messages.
What's next
Channel point redemptions to call a moment, consented and anonymized chat recordings to tune default thresholds, and a hosted multi-streamer version.
Built With
- node.js
- obs-studio
- openai-codex
- playwright
- twitch-eventsub
- twitch-helix-api
- twitch-oauth
- typescript
- vite
- websocket
- zod

Log in or sign up for Devpost to join the conversation.