設計
自動剪輯現在真正成了短影片
每一局結束的對局本來就會變成直式短片,只是看上去都一個樣。現在每條片子都有開場鉤子、關鍵金額提示,並以一張結尾卡片收束。

通俗版
opolyx 會把結束的對局做成直式精彩片段並自動釋出。這部分早已運轉。問題在於,連看三條的感覺和看一條差不多。
- 大約 40% 的畫面是圍繞居中棋盤的空白背景;
- 片子從對局中途一次隨意的擲骰開始——而那一幀同時就是封面圖;
- 高潮讀不出來:一筆 12,000 的租金只是小資訊流裡的一行灰字;
- 每個事件佔用的時間一樣長,於是鋪墊和高光同樣冗長;
- 它們沒有聲音、沒有結尾,文案和話題標籤也從不改變。
現在每條片子都是被"導演"出來的,而不是原樣倒出:開場用一個鉤子告訴你即將看到什麼,棋盤填滿畫面,金額與重大事件在發生的瞬間被標註出來,最後以一張告訴你去哪玩的卡片收尾。節奏會略過記帳式的瑣碎步驟,在關鍵時刻放慢——包括在你已經能猜到結果之前的一小段定格。
14–27 s
片長,按時刻裁定
3
套輪換版式
40%
過去空著的畫面比例
文案、標題和話題標籤現在都從詞庫中抽取,而不是只有一句;當同一局產生多條片子時,會挑選主題彼此不同的片段,而不是同一次破產的三個視角。
你無需做任何事就可能出現在片子裡——每一局結束的對局都符合條件,片子會自動釋出到 YouTube、Instagram 和 TikTok。
技術細節
渲染器是一臺小型 VPS 上的 worker,它用無介面 Chromium 載入線上站點並錄製回放路由。這正是槓桿所在:片子的全部外觀都是網頁程式碼,因此隨普通部署一起生效,完全不需要動 worker。
關鍵在於把"錨點時刻"找回來。回放路由只收到一個時間範圍,而不是"那個時刻"——因此頁面會在完整事件日誌上重新執行引擎自帶的精彩時刻評分,並取該視窗內得分最高的點。這可以被證明能還原 worker 當初挑選的時刻,也正因如此,視覺部分才能在完全不觸碰 worker 的情況下上線。
ts
// lib/clip/pacing.ts — screen time is a function of what the event is
const BOOKKEEPING = 110; // turn_ended, dice_rolled: skim
const NORMAL = 320;
const ANCHOR_MIN = 1400; // the moment the clip exists for
const PREDICT_FREEZE = 600; // "what happens next?" before a guessable payoff
export function paceFor(event: DomainEvent, isAnchor: boolean): number {
if (isAnchor) return Math.max(ANCHOR_MIN, NORMAL);
return isBookkeeping(event) ? BOOKKEEPING : NORMAL;
}| 此前 | 現在 | |
|---|---|---|
| 結構 | 一段連續回放 | 鉤子、正片、結尾卡片 |
| 節奏 | 700 毫秒 × 65 個事件 | 按事件權重 110–1400 毫秒 |
| 時長 | 始終約 45 秒 | 14–27 秒,按需裁定 |
| 釋出文案 | 一句文案、四個固定標籤 | 每條片子按種子取自詞庫 |
| 音訊 | 在程式碼裡被強制關閉 | 遊戲音效,可選背景音樂 |
篩選邏輯也變了:當一局產生多個候選時刻時,挑選器會保留每種不同類型中最好的一個,於是同一場比賽不再產出三條几乎一樣的破產片段。
文案詞庫刻意只用英語:片子以固定語言渲染,把它們放在翻譯目錄之外,就不會影響站點的文本對齊數量。要做本地化片子,得先有各語言的社交帳號。
