What it does

Clip or Skip turns clipping into a community decision. Anyone in chat starts a vote with !clip. The bot opens a 60-second window ("Type +1 to clip or -1 to skip. One vote per chatter."), counts one vote per chatter, and announces the result when the window closes. It creates a Twitch clip only if the yes-votes reach the configured minimum (default 3) and outnumber the no-votes, then posts the clip URL to chat. A tie, a no-majority, or too few yes-votes means no clip. The clip is a standard Twitch clip: roughly the last 30 seconds of the live broadcast at creation time.

  • Listens to chat over Twitch EventSub (WebSocket transport): no IRC, no polling.
  • Helix API for sending chat messages and creating clips.
  • Vote manager: one vote per chatter per window, configurable minimum yes-votes, strict yes-over-no majority.
  • Live status page showing the window state, the score, and the last created clip.
  • 15 automated tests covering vote rules, thresholds, tie handling, chat command parsing, clip outcomes, and recorded EventSub frame replays.

How Codex was used

The initial project build (structure, the original tmi.js/IRC chat client, vote manager, Helix clip integration, first test suite) was created with OpenAI Codex (CLI) during the hackathon window (commit f4deae6). Later work outside Codex migrated the chat client to Twitch EventSub over WebSocket with modern Helix calls, added the configurable vote threshold, fixed same-account (solo) operation, and expanded tests and documentation. Codex session ID for the primary build thread: 01a18630-4717-7981-8329-53a69f0a8975.

Testing instructions for judges

  1. The repository is private; a collaborator invitation has been sent to the Devpost testing account ([email protected] / GitHub user devposttesting, pending acceptance at time of writing). Clone the repository.
  2. npm install
  3. npm test (15 tests; no Twitch credentials or network needed)
  4. Live run: copy .env.example to .env, fill in your own Twitch app client ID and a user token with user:read:chat, user:write:chat, clips:edit (README has the exact setup), set the channel and bot username, then npm start while the channel is live. Type !clip in chat and cast yes votes with +1 from 3 distinct chatters (default threshold), or set TWITCH_MIN_YES_VOTES=1 for a solo test. Twitch only creates clips on a channel that is currently live.
  5. TESTING.md records the project's own end-to-end live test (Oct 29, 2026), including the real clip the bot created: https://clips.twitch.tv/SmellyRelentlessJalapenoPogChamp-qYEqTCJPwgk1S2E8

Built With

Share this project:

Updates

Submission history