المقاطع التلقائية صارت فيديو قصيرًا حقيقيًا
كل مباراة منتهية كانت تتحول أصلًا إلى مقطع عمودي، لكنها كانت تبدو كلها متشابهة. أما الآن فيبدأ كل مقطع بخطّاف، ويبرز المبالغ، وينتهي ببطاقة.

بكلمات بسيطة
تحوّل opolyx المباريات المنتهية إلى مقاطع عمودية وتنشرها تلقائيًا. هذا الجزء يعمل منذ فترة. المشكلة أن مشاهدة ثلاثة منها كانت تشبه مشاهدة واحد.
- نحو 40% من الإطار كان خلفية فارغة حول لوحة موضوعة في الوسط؛
- كانت تبدأ من وسط المباراة عند رمية نرد عشوائية — وهي نفسها الصورة المصغّرة؛
- وكانت الذروة غير مقروءة: إيجار بـ12000 مجرد سطر رمادي في تغذية صغيرة؛
- وكان كل حدث يأخذ الوقت نفسه على الشاشة، فيصير التمهيد بطول اللحظة ذاتها؛
- وكانت صامتة، بلا نهاية، ولا يتغير فيها التعليق ولا الوسوم.
أما الآن فكل مقطع مُخرَج لا مُلقى: يبدأ بخطّاف يخبرك بما أنت على وشك رؤيته، وتملأ اللوحة الإطار، وتُبرَز المبالغ والأحداث الكبيرة لحظة وقوعها، وينتهي ببطاقة تدلّك أين تلعب. ويمرّ الإيقاع سريعًا على التفاصيل الحسابية ويتباطأ عند اللحظة المهمة — بما في ذلك تجميد قصير قبل نتيجة صرتَ تتوقعها.
وصارت التعليقات والعناوين والوسوم تُسحب من مجموعات بدل سطر واحد، وحين تنتج مباراة واحدة عدة مقاطع تُنتقى لتتناول أمورًا مختلفة لا ثلاث زوايا للإفلاس نفسه.
للمهتمين بالتفاصيل التقنية
المُصيِّر عامل يعمل على خادم افتراضي صغير، يحمّل الموقع الحيّ في 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 ثانية، مضبوط |
| نص النشر | تعليق واحد وأربعة وسوم ثابتة | مجموعات مُبذَّرة لكل مقطع |
| الصوت | مغلق في الشيفرة | أصوات اللعبة، وموسيقى خلفية اختيارية |
وتغيّر الانتقاء أيضًا: حين تعطي مباراة واحدة عدة لحظات مرشحة، يحتفظ المنتقي بالأفضل من كل نوع مختلف، فتتوقف المباراة الواحدة عن إنتاج ثلاثة مقاطع شبه متطابقة عن الإفلاس نفسه.
