OpenVibe.Live/Docs
Source on GitHub

The Rundown (2026-10-19)#

The Rundown (/rundown) is what streamers talked about, written up: the topics, each streamer's take in their own words with a link to the moment, and every stream as an episode with a recap and chapters. It replaced the Arena (the competitive drama desk: viewer-crash stories, the Lolcow Index, Clout Rankings, mic ratings and beefs). In the owner's words: "gathers topics and stuff the streamers talk about and is less about competing with eachother and more about talking shit and fleshing out stories and creating content for people to look through".

The desk#

server/rundown/desk.js runs every 5 minutes. It reads streams' speech-to-text (stream_timeline_events, kind speech, from Parakeet; whisper for other languages) a stretch at a time:

  1. A stretch. The unread speech of one stream, game announcer lines left out, at most ~2,400 words (about 15 minutes of talk). A live stream is read once the stretch holds 700 words or spans 10 minutes with 150 words; an ended stream is read to the end.
  2. Segments. OpenVibe.AI's live.rundown.segment gets the stretch with the stream's title and category, the 50 most recent topic names (so the same subject keeps one topic) and what the stream covered so far. It returns up to 4 segments, each with:
    - a topic, concrete ("Supermarket fridges hacked in France", never "news"), and its kind (news, games, tech, life, music, sports, money, internet, chat, other);
    - a headline, what they talked about and their take;
    - the desk's quip, a dry late-night-host line about the take or the situation;
    - a 1–5 score;
    - up to two quotes, copied word for word, with an English translation when they spoke another language.
  3. Topics. A segment joins the topic with the same slug, else a recent topic whose key words mostly match, else a new topic. A topic with new takes (2 or more in all) gets its page rewritten by live.rundown.topic: a headline, plus a summary of who said what and where they agree or clash.
  4. Episodes. When an ended stream is read to the end, live.rundown.episode writes it up from its segments: title, logline, a recap in 2–3 short paragraphs and chapters (VOD timestamps). A stream with no segments gets no episode.
  5. Crossovers. A segment records the streamers it named. Only a whole username or display name said as it is spelled counts (server/arena/names.js, wholeOnly), never a sound-alike or a nickname. Naming someone is talking, not a fight: there are no beefs, scores or winners.

The first deploy reads back the last 7 days, newest streams first. At most 4 AI calls a tick and 40 an hour, only while AI is on and within budget. All calls go to the live.creative route.

What is kept, and what never is#

Speech-to-text hears a stream's whole audio track. On 2026-10-18 the Arena's "quote of the day" was League of Legends' announcer ("You have slain an enemy"), credited to a streamer. The desk's rules (server/rundown/filters.js and the prompts in OpenVibe.AI):

Pages#

API#

/api/rundown (server/rundown/routes.js):

MethodPathNotes
GET/on_air, latest (+ next), trending, voices, counts
GET/latest?before=the next page of the latest
GET`/topics?sort=recent\most&kind=`every topic
GET/t/:slugtopic, takes, related
GET/e/:streamIdepisode, stream, segments, more
GET/s/:usernameuser, episodes, topics, lines, crossovers (or opted_out)
POST/react {type, id, reaction}segment or episode; fire, lol, dead, cap, facts; the same again takes it back
POST/hide {type, id}staff
GET, PUT/opt-out {out}signed in
GET/voice/:user?t=a line in the streamer's chat voice

A person in any answer is { id, username, display_name, avatar_url, profile_color }.

Data#

Migration 0010_rundown.sql:

The Arena's tables are no longer written; their code goes in a later change.

Chat#

When an episode is written within 6 hours of its stream ending, it is announced in global chat as THE RUNDOWN, at most 3 an hour. Chat still forwards the Arena's commands: !arena [user] answers with the streamer's latest episode and topics plus a link, and !hype and !beef say beefs are gone and point to The Rundown.

Settings and limits#

KeyDefaultEffect
rundown_enabledtruefalse stops the desk (pages keep what was written)
ai_timeline_enabledfalsethe speech-to-text the desk reads: must be on

Tests: test/rundown.test.js (filters, the desk on a stubbed AI, topics, episodes, opt-outs, the API and the redirects).

This page is rendered from docs/rundown.md in the OpenVibe.Live repository. Found a mistake? Edit it there.