{"id":"pst_01M5XM0DMJN0HWX6QGM35EWWN1","url":"https://openvibe.blog/@openvibe/patch-notes-a-streams-history-oct-27","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: A stream's history (Oct 27)","summary":"What shipped on OpenVibe from 2026-10-26 to 2026-10-27: 41 changes to OpenVibe.Live, OpenVibe.MediaHub, OpenVibe.Media, OpenVibe.Bot, OpenVibe.Chat, OpenVibe.Actor and 16 more.","body_markdown":"What shipped on OpenVibe from 2026-10-26 to 2026-10-27: 41 changes to OpenVibe.Live, OpenVibe.MediaHub, OpenVibe.Media, OpenVibe.Bot, OpenVibe.Chat, OpenVibe.Actor and 16 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.\n\n## Highlights\n\n- **OpenVibe.Live:** A stream's history: recording parts, picture shapes and reconnects in stream time, used by studio clips, the rewind and transcripts (#379) ([`ca5173f`](https://github.com/OpenVibers/OpenVibe.Live/commit/ca5173f1ef71d5cb41bc549a47a9ab81ddd91b74))\n- **OpenVibe.MediaHub:** Download button on recordings and clips: the video, transcript (TXT/SRT/VTT/JSON), chat replay (TXT/CSV/JSON), chapters (YouTube TXT/VTT/JSON), cover picture, details and everything as a .zip; each panel has its own links (#141) ([`cb9518d`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/cb9518d2324d5472a8f96741e6ceeefcfc1f432f))\n- **OpenVibe.Media:** Recordings: one playable video over a stream's parts (a virtual object over their joined timelines), lists show it once, clips in recording time across a join; design in docs/recordings.md (#184) ([`23708f6`](https://github.com/OpenVibers/OpenVibe.Media/commit/23708f667d0e2224b763b5fee7370dc4ab56b54a))\n\n## OpenVibe.Live\n\n[openvibe.live](https://openvibe.live) · [repository](https://github.com/OpenVibers/OpenVibe.Live)\n\n- A WebRTC recording asks the broadcaster for a keyframe every 4 s, so the file stays seconds behind live (#378) ([`db95d33`](https://github.com/OpenVibers/OpenVibe.Live/commit/db95d331f0fe2fb479e4ffe4e1661fdf5debe345))\n- A stream's history: recording parts, picture shapes and reconnects in stream time, used by studio clips, the rewind and transcripts (#379) ([`ca5173f`](https://github.com/OpenVibers/OpenVibe.Live/commit/ca5173f1ef71d5cb41bc549a47a9ab81ddd91b74))\n- A VOD shows its live captions until the full transcript is in; the rewind carries on into the next part (#380) ([`fa98dca`](https://github.com/OpenVibers/OpenVibe.Live/commit/fa98dca3f70846232085bf5d08b1a201942b1e15))\n- Download links for VODs and clips (Media's bytes as a named attachment, signed when private); a part's offset and its own moments for OpenVibe.Video (#381) ([`67092b6`](https://github.com/OpenVibers/OpenVibe.Live/commit/67092b6517e904edaab3b2639136412446bf63df))\n- Viewers no longer hear chat TTS read in their own browser on channels they watch, unless they turn on \"Read TTS aloud on channels I watch\" (#382) ([`aa4a6e8`](https://github.com/OpenVibers/OpenVibe.Live/commit/aa4a6e88bcb828cdb4c3bf0f77077346e1da12f6))\n- A robot's Drive under the stream works for viewers signed in here (a ticket from Bot through the channel page, no popup), viewers no longer see an empty robot box, and chat commands press a button robot's same-named buttons (#383) ([`b8ab9db`](https://github.com/OpenVibers/OpenVibe.Live/commit/b8ab9db265bc4e91fbed392ecbeca604739b9022))\n- The live player's fullscreen button stays on the bar on a phone: buttons keep their size, the readouts give way, the stats gauge steps aside under 420 px (#384) ([`3e24602`](https://github.com/OpenVibers/OpenVibe.Live/commit/3e24602796db1ae17f8f5df8bde42d29a47543ef))\n- A stream recorded in parts is one video: Live names the parts to Media, the first part's VOD answers the whole (length, joined playlist, every part's transcript and chapters in its time), lists show the whole length, clips in the video's… ([`291150d`](https://github.com/OpenVibers/OpenVibe.Live/commit/291150d7bd719baefe5304459a9f3eb90e641cc5))\n- Clip AI titles: an auto-clip's caption title is renamed from its overview, a clip whose analysis gave up is named from what was said in its window, a clip of an upload or a stream's part counts as untitled (#386) ([`6a01267`](https://github.com/OpenVibers/OpenVibe.Live/commit/6a012679c5deabcae39d17465ffca21049c9dd0e))\n\n## OpenVibe.MediaHub\n\n[openvibe.video](https://openvibe.video) · [repository](https://github.com/OpenVibers/OpenVibe.MediaHub)\n\n- Download button on recordings and clips: the video, transcript (TXT/SRT/VTT/JSON), chat replay (TXT/CSV/JSON), chapters (YouTube TXT/VTT/JSON), cover picture, details and everything as a .zip; each panel has its own links (#141) ([`cb9518d`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/cb9518d2324d5472a8f96741e6ceeefcfc1f432f))\n- Chapters: no chapter for a moment with no title, or past the video's end (VOD 6026 listed \"0:16 \" and 41:16 in 32:01) (#142) ([`12ae1ac`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/12ae1ac976cb9e4f7632de35784210f35f255ab8))\n- Watch pages reorganised: one action row (Save, Clip, Download, Share, More), chat replay, chapters and transcript as tabs beside the player with their downloads in a corner menu, About with the stream's parts, Manage folded away (#143) ([`b715845`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/b715845b1702f890b71eda2d44ef8e36fdfa5de7))\n- Watch pages: the player's glow is no longer cut beside it, the navbar is solid over it at the top, the full network footer sits at the bottom of the window (#144) ([`a8afabe`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/a8afabee7cd84e163a73ccc7b47e8f738bb024ec))\n- The Clip menu starts where the video is (start at the current second, end 30 s on), and says an empty title is named by AI (#145) ([`a0572ae`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/a0572ae5f78aec3019df6a50985fdea482371217))\n- A stream recorded in parts is one video page: later parts redirect to it at their second, it plays the joined playlist, chat replay in the video's time, a file per session in Download, clips in the video's time (#146) ([`5486f13`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/5486f13c236ced3f3cebfadda78827f4dfc7a4f2))\n\n## OpenVibe.Media\n\n[openvibe.media](https://openvibe.media) · [repository](https://github.com/OpenVibers/OpenVibe.Media)\n\n- openvibe-shared v4.14.0 (was v4.13.0) (#181) ([`386adb2`](https://github.com/OpenVibers/OpenVibe.Media/commit/386adb2cb4a640f961c4437bd9ec70b597c34e26))\n- Live rewind across a phone turn: the DVR playlist starts a period with its own init segment at each change of shape; a clip past the recorded edge keeps its length (#182) ([`67be21d`](https://github.com/OpenVibers/OpenVibe.Media/commit/67be21d8583bf8f4b143af64d758a4e9b9299b62))\n- ?download on /v/:id and /c/:id: the bytes as a named attachment (disk, presigned B2/R2, a virtual clip remuxed to MP4 as it is sent) (#183) ([`1b1f934`](https://github.com/OpenVibers/OpenVibe.Media/commit/1b1f934cac732bce4b3fd73d99f5f73ca8211966))\n- Recordings: one playable video over a stream's parts (a virtual object over their joined timelines), lists show it once, clips in recording time across a join; design in docs/recordings.md (#184) ([`23708f6`](https://github.com/OpenVibers/OpenVibe.Media/commit/23708f667d0e2224b763b5fee7370dc4ab56b54a))\n- Public clip lists show only clips that play (status=any for all), and scripts/repair-edge-clips.js re-cuts the clips the old edge squeeze broke (#185) ([`720b292`](https://github.com/OpenVibers/OpenVibe.Media/commit/720b292100ab787b33f1ff23913cf4e986a119af))\n\n## OpenVibe.Bot\n\n[openvibe.bot](https://openvibe.bot) · [repository](https://github.com/OpenVibers/OpenVibe.Bot)\n\n- Buttons under a Live stream in one press: an \"On your stream\" card (shows the panel where embedded, opens the Live bind prompt, who may drive), and an embedded panel's Drive gets its ticket from the Live page around it (#169) ([`27312c8`](https://github.com/OpenVibers/OpenVibe.Bot/commit/27312c82b7ec2ce2b4b571ad260b4ec6c3ca3f1c))\n- openvibe-shared v4.15.0 (was v4.14.0) (#170) ([`f0b4e9d`](https://github.com/OpenVibers/OpenVibe.Bot/commit/f0b4e9d744c143f41055fa9fdb8bb1458a4ffd4b))\n\n## OpenVibe.Chat\n\n[openvibe.chat](https://openvibe.chat) · [repository](https://github.com/OpenVibers/OpenVibe.Chat)\n\n- Bots on /ws/chat: a !word that is not a sound presses the channel robot's button of that name, a ?token= socket is told how to sign in, and a new Go Live moves sockets left on the ended stream (#194) ([`c22ae60`](https://github.com/OpenVibers/OpenVibe.Chat/commit/c22ae60beb0f3f6f01ce8c71e77e1ae0176e174c))\n- openvibe-shared v4.15.0 (was v4.14.0) (#195) ([`3ef0c8e`](https://github.com/OpenVibers/OpenVibe.Chat/commit/3ef0c8e9d08053f7d689060a0f288d0d1e6cdf24))\n\n## OpenVibe.Actor\n\n[openvibe.actor](https://openvibe.actor) · [repository](https://github.com/OpenVibers/OpenVibe.Actor)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#124) ([`b2983ab`](https://github.com/OpenVibers/OpenVibe.Actor/commit/b2983ab509436b65027b6ec9a9b18616ededa410))\n\n## OpenVibe.AI\n\n[ai.openvibe.services](https://ai.openvibe.services) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#158) ([`6db7f39`](https://github.com/OpenVibers/OpenVibe.AI/commit/6db7f390e6df95cec01d0142dd1d265b81c4a916))\n\n## OpenVibe.Billing\n\n[billing.openvibe.network](https://billing.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Billing)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#102) ([`bac22ae`](https://github.com/OpenVibers/OpenVibe.Billing/commit/bac22ae37892b56f593afeff309be3c33f914b0f))\n\n## OpenVibe.Blog\n\n[openvibe.blog](https://openvibe.blog) · [repository](https://github.com/OpenVibers/OpenVibe.Blog)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#86) ([`a060caf`](https://github.com/OpenVibers/OpenVibe.Blog/commit/a060caf3c6ccd7a31535052c4601d3f36a02e02b))\n\n## OpenVibe.Codes\n\n[openvibe.codes](https://openvibe.codes) · [repository](https://github.com/OpenVibers/OpenVibe.Codes)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#113) ([`f0fc51e`](https://github.com/OpenVibers/OpenVibe.Codes/commit/f0fc51e91d597bd1f4a9fa00565c7fc4424abd47))\n\n## OpenVibe.Events\n\n[openvibe.events](https://openvibe.events) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#120) ([`cf70f30`](https://github.com/OpenVibers/OpenVibe.Events/commit/cf70f30268532a03cb78435cb083dd31d0ccb1d3))\n\n## OpenVibe.Games\n\n[openvibe.games](https://openvibe.games) · [repository](https://github.com/OpenVibers/OpenVibe.Games)\n\n- /shared serves a stylesheet as text/css: the home page's \"Your stuff across OpenVibe\" panel drew unstyled because its CSS went out as JavaScript (#156) ([`f5b7ab6`](https://github.com/OpenVibers/OpenVibe.Games/commit/f5b7ab629ea9e52e56aa7dd6908401eebbb2dbc3))\n\n## OpenVibe.Network\n\n[openvibe.network](https://openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Network)\n\n- GET /api/frame/pulse: the network right now for the shared footer's live line (streams live, people watching, open sites, last week's page views) (#345) ([`c2fe49f`](https://github.com/OpenVibers/OpenVibe.Network/commit/c2fe49fee48197055d77364f91f5af0f20bb296f))\n\n## OpenRestream\n\n[openre.stream](https://openre.stream) · [repository](https://github.com/OpenVibers/OpenRestream)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#108) ([`5be4b5a`](https://github.com/OpenVibers/OpenRestream/commit/5be4b5a0222d7d051bcaaa030c0cb9b85c99c7dc))\n\n## OpenVibe.Play\n\n[play.openvibe.network](https://play.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Play)\n\n- openvibe-shared v4.14.0 (was v4.13.0) (#46) ([`6bfbc7f`](https://github.com/OpenVibers/OpenVibe.Play/commit/6bfbc7f36cf19b63a7b36381aaed45df64ae71d8))\n\n## OpenVibe.Run\n\n[openvibe.run](https://openvibe.run) · [repository](https://github.com/OpenVibers/OpenVibe.Run)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#79) ([`5b7ee04`](https://github.com/OpenVibers/OpenVibe.Run/commit/5b7ee04270332687a2260c57d2e0d7e8a9681c8e))\n\n## OpenVibe.Search\n\n[search.openvibe.network](https://search.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Search)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#97) ([`1f6fa9b`](https://github.com/OpenVibers/OpenVibe.Search/commit/1f6fa9b3da21e4e28ba2ab774142fa962886ea4a))\n\n## OpenVibe.Sources\n\n[sources.openvibe.network](https://sources.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Sources)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#109) ([`1763e5f`](https://github.com/OpenVibers/OpenVibe.Sources/commit/1763e5f907b41462bcf1613718b27b8153715783))\n\n## OpenVibe.Space\n\n[openvibe.space](https://openvibe.space) · [repository](https://github.com/OpenVibers/OpenVibe.Space)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#91) ([`3c21441`](https://github.com/OpenVibers/OpenVibe.Space/commit/3c214417df350cf465e136d809b56c8282c3814a))\n\n## OpenVibe.Tips\n\n[openvibe.tips](https://openvibe.tips) · [repository](https://github.com/OpenVibers/OpenVibe.Tips)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#94) ([`6da5e75`](https://github.com/OpenVibers/OpenVibe.Tips/commit/6da5e7594db217fcd7d6aaddd219e4eac8d31200))\n\n## OpenVibe.VIP\n\n[openvibe.vip](https://openvibe.vip) · [repository](https://github.com/OpenVibers/OpenVibe.VIP)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#90) ([`dd731ce`](https://github.com/OpenVibers/OpenVibe.VIP/commit/dd731cebbc96cac891a372da661d2aad064d841c))\n\n## OpenVibe.Watch\n\n[openvibe.watch](https://openvibe.watch) · [repository](https://github.com/OpenVibers/OpenVibe.Watch)\n\n- openvibe-shared v4.15.0 (was v4.14.0) (#102) ([`f0ad5eb`](https://github.com/OpenVibers/OpenVibe.Watch/commit/f0ad5ebc3d95c91f50bae999ad1317ca9dc5acfa))\n\n---\n\nPatch notes are put together automatically when enough changes have shipped, or when a large feature lands. See every site's own updates page for the live list.","revision":1,"state":"published","visibility":"public","published_at":"2026-10-27T02:46:08.299Z","revised_at":"2026-10-27T02:46:08.283Z","author":{"subject":"usr_01KKT9AC60KM7CRTB3WN1Z8P56","name":"goosely","username":"goosely"},"authorship":{"mode":"imported","workflow":null,"reviewed":false,"disclosure":{"mode":"imported","short":"Imported","long":"Imported from Commit messages from the OpenVibers repositories on GitHub; originally by OpenVibers."}},"tags":["patch-notes","live","media-hub","media","bot","chat","actor","ai","billing","blog","codes"],"categories":[],"series":{"title":"Patch notes","url":"https://openvibe.blog/@openvibe/series/patch-notes","position":null},"media":[],"citations":[],"indexability":{"indexable":true,"robots":"index, follow","reasons":[]}}