Skip to content
-
Going live from the browser, with no OBS, no downloads and no follower minimum, leads again: AI assistants recommend OpenVibe.Live for exactly that, and it had been folded behind "See what makes it different". The home page shows it always: a Go Live strip above the toggle (logged out, it opens sign-up), and a link to the new docs/go-live-in-your-browser.md (/docs/go-live-in-your-browser), a server-rendered page with the steps, devices, what you need and don't, and a questions section. The home title, description, Open Graph and Twitter tags, the SSR snapshot (a Go live in your browser section) and the JSON-LD (a WebApplication with browserRequirements and featureList) now say it first. /llms.txt's summary says it and gains a Going live from a browser section. Every docs page now has a meta description and Open Graph tags from its first paragraph. Home budgets hold (blocking CSS 701/760 KB). npm test 149/150, 1 skipped.OpenVibers · 28 Sept 2026
6c2d06be
-
N-1 fixtures re-recorded from 278cd40, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
7fd7bea0
-
npm test no longer counts a skipped test as passed (roadmap WS-Q task 7; Shared v1.25.0 openvibe-shared/test-runner). test/run.js is now the shared runner (same files, parallelism, 120 s timeout and [DB] filter) with the skip rule: a test prints "<label>: skipped (<why>)" for what it could not run, and that file is listed with ○ and its reasons, not counted as passed. The four tests that skipped part of themselves in free-form words now print that line: audio-events-bad-segment (OK B without a local model), restream-manager-lifecycle (the ACK test without ffmpeg), ai-remote-only (media analysis with speech without ffmpeg) and lineage-resolver (contract validation on an older openvibe-contracts); rollback-newer-writes and transcript-ai already did. Here the run reads 149/150 test files passed, 1 skipped (no local audio model), where it said 150/150. openvibe-shared is pinned at v1.25.0 (from v1.23.1; 1.24.0 adds the readiness skip, which Live's checks do not use).OpenVibers · 28 Sept 2026
278cd404
-
A follow Network took is notified by Network, not pushed from Live (roadmap WS-E task 3, D08; Network 8188c26). Both follow routes pushed a FOLLOW notification over Network's internal route for every follow. Network now sends one itself when a follow starts in its graph, so the routes push only when writeThrough says Network did not take the follow (w.network false: FOLLOWS_AUTHORITY unset, or a side with no Network subject), which keeps the rollback path notifying. The PowerChat follow alert and the OpenCoins award stay here. test/network-follows.test.js checks that each route pushes FOLLOW only under !w.network. npm test 150/150.OpenVibers · 28 Sept 2026
a70f562c
-
N-1 fixtures re-recorded from 65b0dc8, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
03f49b77
-
The pre-Media local path settings are gone (shim C-74): config.vod (VOD_PATH, CLIPS_PATH, COLD_STORAGE_PATH) and config.thumbnails (THUMBNAILS_PATH). VOD, clip and thumbnail files live in OpenVibe.Media, no code read these, and production sets none of them. MAX_VOD_SIZE_MB still caps uploads in media-proxy/vods.js. npm test 150/150.OpenVibers · 28 Sept 2026
b0cc2ef4
-
README and STATUS.json are current (roadmap WS-U task 3; Contracts scripts/docs-currency.js passes). The README gains Purpose, Owns, Does not own, Depends on, Capabilities (what Live implements and the grants its principal holds), Acceptance, Security and Deploy (ovhost deploy and rollback, release layout, N-1 fixtures). The ownership now says what moved out: chat to Chat, pastes and comments to Community, AI to OpenVibe.AI (no provider calls; transcripts by window), follows to Network. The tagline is 'Open Live Streaming', not 'Free'. STATUS.json is new: stage, contracts and SDK pins, capabilities, deployment and features.OpenVibers · 28 Sept 2026
65b0dc80
-
N-1 fixtures re-recorded from 695202d, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
a7184cad
-
A private VOD or clip is transcribed and analysed too (roadmap WS-O task 2; Media 9aac60f signed playback URLs). The recording source for AI work is now a signed URL from Media (media-client signedMediaUrl, six hours), which works whatever the visibility. So OpenVibe.AI, which holds no key, reads a private recording window by window, and Live's own frame capture reads it as well. Before, the public URL 404'd for the 34 private VODs. It falls back to the public URL if Media does not sign. npm test passes.OpenVibers · 28 Sept 2026
695202d8
-
N-1 fixtures re-recorded from 85fc2fa, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
b78d2ecf
-
Per-actor limits on Live's API writes (roadmap WS-R task 4; openvibe-sdk 0.11.0 -> 0.12.0 openvibe-sdk/limits). server/net/actor-limits.js counts writes by the person behind the token: their Network subject, or the person who made an hbt_ token.OpenVibers · 28 Sept 2026
85fc2faf
-
N-1 fixtures re-recorded from 860c944, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
53f6ac65
-
VOD and clip transcripts are made by OpenVibe.AI, not Live's own whisper (roadmap WS-O task 2; AI d46c217, be66fa4). A recording on Media is transcribed by live.media.transcribe one 5-minute window at a time, or whole when it is 200 seconds or less. AI reads it where it lies with range requests, loudness-normalises it and runs whisper.cpp with the same models. Each window sends media_url, start_sec and seconds; low_power follows the backfill's live-stream state (transcribe.isLowPower). Resume from the last finished window, progress after each window, and a failed window reported without failing the pass all work as before. ai-service.run takes pollMs, because a window takes minutes. Only a local file (legacy) is still decoded here, and live-stream captions stay local. test/transcript-ai.test.js makes a 10-minute recording and checks windows, low power, offsets, resume and a failed window against a stub AI. npm test passes.OpenVibers · 28 Sept 2026
860c9449
-
N-1 fixtures re-recorded from e3ad96d, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
15da7e83
-
The AI viewers send OpenVibe.AI their context, not prompts (roadmap WS-O task 2; AI 65b6a80 live.viewers.plan, reply, fold and clone templates). server/ai/viewers/ai-run.js runs a viewers template on the site's AI (admin switch and daily budget apply) or on the streamer's own key in AI (credential { subject }, metered as 'byo'). Anything else stays quiet: a key that never moved to AI, or a channel on its own key with no subject; the engine's provider choice no longer falls through to the site's AI there. The director sends the stable context and volatile tail it builds; the fast reply sends the situation and the streamer's line; the fold sends each persona's lines and memory; a clone sends what is known about the chatter. The director rules, plan schema and fold schema left for AI's templates. budget.generate, ai-analysis.viewerComplete and summarizeText had no callers left and are gone; only the status probe still sends a prompt. The usage recorder takes the provider from the meter. npm test 148/148.OpenVibers · 28 Sept 2026
e3ad96df
-
N-1 fixtures re-recorded from e7ebaf5, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
0a834346
-
Arena personas, quotes and headlines and the auto-clip check send OpenVibe.AI data, not prompts (roadmap WS-O task 2; AI d271436). generatePersona sends the fighter's facts; generateQuotes sends the candidate lines; headlineFor sends the event (open, forfeit, or score for a points win or draw) with its fighters; the auto-clip check sends scene notes, timed speech, sounds and chat around the spike, attributed to the stream. The prompts and JSON schemas left for AI's templates. Live keeps materialising quotes, storing personas (persona_model now names the workflow) and its fallbacks. npm test 148/148.OpenVibers · 28 Sept 2026
e7ebaf53
-
Chat analysis, person overviews, session titles and VOD ranking send OpenVibe.AI data, not prompts (roadmap WS-O task 2; AI 6b14064). The global chat picture and every chatter's profile (signed-in, bridged, anonymous) send the prior notes, moments already recorded and the messages as data: minutes ago, where, author, kind, text (_msgData). AI formats them as _fmtMessages did, so that and _parseJson are gone. The combined streamer-and-chatter overview sends the two summaries; session titles send the summaries; the moments job's VOD ranking sends titles, overviews and stats. Live keeps what it does with the answers: timeline merging, title storage, rank caching and the objective fallback. test/ai-templates-jobs.test.js checks the message data. npm test 148/148.OpenVibers · 28 Sept 2026
fb2d7683
-
The home slogans, the daily secret and the Star of OpenVibe send OpenVibe.AI data, not prompts (roadmap WS-O task 2; AI templates live.hero.slogans, live.easter_egg, live.home.star). The slogan job sends the chat vibe, per-user notes, streamer and VOD overviews, active usernames and the count. The secret sends today's vibe. The star sends recent stars, the previous star and the candidates with their numbers. Each keeps its own rules on the answer: the no-free and no-'streaming for' filters, the clue check that replaces clues not pointing at their token, only an eligible candidate. Each keeps its old fallback when there is no answer. test/ai-templates-jobs.test.js checks all three against a stub AI. npm test passes.OpenVibers · 28 Sept 2026
5bec3909
-
The Arena judges send OpenVibe.AI what Live heard, not a prompt (roadmap WS-O task 2; AI f1564ac live.arena.judge_beef and judge_mic templates). judgeBeef sends the target's names and transcribed forms, whether and how the name was matched, what was already said about them, and the newest speech. judgeMic sends the speech. Both are attributed to the speaker and metered as before. The prompts and JSON schemas left for AI's templates; Live keeps its house rules (a quotable line of six words, clamped quality, flags) and its heuristic when there is no answer. test/arena-judge-ai.test.js checks this against a stub AI. npm test passes.OpenVibers · 28 Sept 2026
9f32f86d
-
N-1 fixtures re-recorded from ec7e4b8, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
4b9e0366
-
The moment picker sends OpenVibe.AI its facts, not a rendered prompt (roadmap WS-O task 2; AI 2574aad live.moments.pick template). _findBestMoment runs live.moments.pick with the title, the paste or clip flavor, the timeline, transcript and sounds as timed lines, clip and chat-spike times and the moments to avoid, attributed to the VOD. It reads t, title and desc as before, and falls back to the objective signals when there is no answer or the pick is next to a used moment. The flavor hints moved to AI's template. npm test 146/146.OpenVibers · 28 Sept 2026
ec7e4b85
-
N-1 fixtures re-recorded from 1954db2, the release now in production (npm run n-1:record).OpenVibers · 28 Sept 2026
c887515f
-
A streamer's AI-viewer daily budget is a cap in OpenVibe.AI (roadmap WS-O task 2; AI 960f14a ai.quota.attribution.manage, Network 728266b). server/ai/viewer-quota.js: on the site's AI with a budget, PUT /api/v1/attribution-quotas/live:user:<id> { window: day, max_cost_usd, workflow_prefix: live.viewers. }, so AI refuses a viewer run over the cap before any provider call; their own key or no budget removes the cap. Every config save that touches use_shared_key or daily_budget_cents syncs it (a failure is logged; Live's pre-check still applies); scripts/sync-viewer-quotas.js syncs every channel once. test/viewer-quota.test.js against a stub AI; the SSRF review lists the call. npm test 146/146.OpenVibers · 28 Sept 2026
1954db28
-
Live calls no model provider itself and keeps no shared provider key (roadmap WS-O task 2, shims C-20 and C-21). Production has run AI_SERVICE=remote since 2026-09-23 and the local provider path has had no calls since; streamers' own keys moved to OpenVibe.AI in 4d758fa.OpenVibers · 28 Sept 2026
04cd59fd
-
A streamer's own provider key lives in OpenVibe.AI, not in Live's database (roadmap WS-O task 2; AI fca04c7, 0b9f7aa; Network d37ee87 grants live ai.credential.manage).OpenVibers · 28 Sept 2026
4d758fac
-
N-1 fixtures re-recorded from 06cf38b, the release now in production (npm run n-1:record).OpenVibers · 27 Sept 2026
cc50c46f
-
Account deletion erases a staged chat table on whichever side writes it now (ADR-033, C-04): Live while chat-tables.authority() is live, and its capture relays the delete to Chat's copy; Chat once Chat writes the table (OpenVibe.Chat a2d100d gates on table_authority), and its mirror relays it back. Before, Live always left the staged tables to Chat, which leaves them to Live while Live writes them, so neither erased them. node test/account-data.test.js, chat-tables-writers.OpenVibers · 27 Sept 2026
06cf38b1
-
Live takes part in account export and deletion (roadmap WS-B task 7, ADR-033; openvibe-contracts 0.70.0 -> 0.71.0). network.account.export_requested and network.account.deleted arrive at POST /internal/network-events (the --network subscription now asks for both) and server/auth/account-data.js applies them once per export or deletion (account_data_events), answering after Network took the part or confirmation, so a failure is redelivered without erasing twice.OpenVibers · 27 Sept 2026
585428dc
-
N-1 fixtures re-recorded from 0481e9c, the release now in production (npm run n-1:record).OpenVibers · 27 Sept 2026
cd89ba34
More commits