Автоклипы наконец стали настоящим коротким видео
Каждая завершённая партия и раньше превращалась в вертикальный клип. Просто все они выглядели одинаково. Теперь каждый начинается с крючка, подсвечивает деньги и заканчивается карточкой.

Простыми словами
opolyx превращает завершённые партии в вертикальные хайлайты и публикует их сама. Это работает уже давно. Беда была в том, что посмотреть три таких клипа — почти то же самое, что посмотреть один.
- около 40% кадра занимал пустой фон вокруг поля, стоящего по центру;
- клип начинался посреди партии со случайного броска — а это ещё и обложка;
- развязка была нечитаемой: аренда на 12 000 выглядела серой строчкой в маленькой ленте;
- все события получали одинаковое экранное время, поэтому разгон длился столько же, сколько сама сцена;
- они были беззвучными, без финала, а подпись и хештеги не менялись никогда.
Теперь клип не «выгружается», а ставится: он открывается крючком, который говорит, что вы сейчас увидите, поле заполняет кадр, деньги и крупные события подписываются в момент, когда происходят, а в конце появляется карточка с тем, где играть. Темп проскакивает бухгалтерию и замедляется на важном моменте — вплоть до короткой паузы перед развязкой, которую вы уже угадали.
Подписи, заголовки и хештеги берутся из наборов, а не из одной строки, и если одна партия даёт несколько клипов, они подбираются так, чтобы рассказывать о разном, а не показывать одно и то же банкротство с трёх сторон.
Для тех, кому интересны детали
Рендерер — воркер на небольшом VPS: он загружает живой сайт в headless Chromium и записывает маршрут повтора. В этом и рычаг: весь внешний вид клипа — это веб-код, поэтому он выкатывается обычным деплоем и не требует ничего делать с воркером.
Ключевой элемент — восстановление опорного момента. Маршрут повтора получает только диапазон, а не «момент», поэтому страница заново прогоняет собственную оценку ярких моментов движка по всему журналу событий и берёт точку с наибольшим весом внутри этого окна. Это доказуемо восстанавливает момент, выбранный воркером, — именно поэтому визуальную часть удалось выпустить, вообще не трогая воркер.
// 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 с, по месту |
| Текст публикации | одна подпись, четыре фиксированных хештега | наборы с зерном под каждый клип |
| Звук | выключен в коде | звуки игры, опциональная музыка |
Изменился и отбор: когда одна партия даёт несколько кандидатов, отбирается лучший из каждого отдельного типа, поэтому один матч перестаёт порождать три почти одинаковых клипа про одно и то же банкротство.
