每一局都变成一段高光集锦
结束的对局会自动变成竖屏高光片段,发布到 YouTube、Instagram 和 Discord——外加一路棋盘直播。

通俗版
opolyx 最跌宕的时刻如今能走出对局本身。一局结束后,系统会找出它的精彩瞬间——绝杀取胜、破产、拍卖大战、天价租金——并把它们做成竖屏短片,自动发布到 YouTube、Instagram 和 Discord。
这些片段带有品牌标识,在手机上也清晰易读:顶部是 opolyx 标志,聊天嵌在棋盘里,排名在下方。此外还有一路机器人对机器人的展示对局直播,从一台真正的播出主机运行。
技术细节
其基础是一条仅供播主使用的读取通道。迁移 0036 新增了 profiles.broadcaster,并以 OR 的方式把一项 is_broadcaster() 检查并入游戏各表的六条 SELECT 策略,从而解锁两条受限路由:/spectate(实时棋盘)和 /replay(对事件日志做确定性引擎重放折叠)。
一个纯引擎函数为高光时刻评分——取胜、破产、巨额租金、拍卖大战、jackpot、领先易主、交易、传送——并挑出彼此不重叠的最佳时段。另有一个独立的 apps/broadcaster worker 在无头 Chromium 中渲染每个时段,经 ffmpeg 转成 mp4,上传到存储,再通过一个社交发布服务和 Discord 发布。它借助一个存储标记实现幂等,因此游戏 daemon 完全不受触碰。
// engine: scoreHighlights() — pure, deterministic
// win / bankruptcy / big-rent / auction-war / jackpot / lead-change / trade / teleport
// broadcaster: window -> headless Chromium /replay -> ffmpeg -> mp4 -> Storage -> publish
// .done marker = idempotent; daemon untouched无头的片段浏览器通过 Supabase 的 cookie 编解码器以播主身份登录,好让受限的 /replay 得以渲染。一座认证桥为播出主机上的 OBS 浏览器做同样的事,让它直接渲染实时的 /spectate 棋盘。展示对局会被预先标记为已完成,从而排除在 Shorts 流水线之外。
