
ff-tracking هو فيلم قصير مولّد بالكود، كتتبع فيه كاميرا افتراضية وكيكتب وكيل ذكاء اصطناعي فطرفية. طبقة فوقية بأسلوب الرؤية الحاسوبية كتثبت على الرموز الفردية، بينما المنظور، وعمق المجال، ومعالجة الألوان، والتوهج، وتمزقات خطوط المسح، والتحبب، والصوت كاملين كيتنتجو بالكود.
المشروع مبني بـ Rust وfframes وSkia Metal وSkSL وFFmpeg وPython. كيرندر فيديو مدتو ست ثواني عبر جوج مراحل منسقات، مع مؤثرات بصرية وصوتية كيعتمدوا على نفس بيانات التتبع.
شنو كينتج المشروع
الفيلم كيقدم سلسلة ديال رسائل الطرفية بحال thinking… وreading 14 files وtool_call: render_frame() و✓ 0 problems. متتبّع كيتبع آخر الحروف وكيعرض الإحداثيات الحقيقية ديالها بالبكسل، وإطارات التحديد، والتسميات، والروابط بين الإطارات.
- إحداثيات حقيقية: تسميات المتتبّع كتستعمل الموقع الفعلي ديال كل إطار فالفريم النهائي.
- تركيز متحرك: الهدف ديال عمق المجال كيتبع الإطار المتتبَّع مع كتابة الوكيل.
- تتبع متحرك: الروابط كتوصل الإطارات حسب ترتيب القراءة، ومع كل رابط كتتحرك نقطة.
- مؤثرات التثبيت: آخر كلمة كتحمر لجوج فريمات، وكيوقع فيها تمزق ديال خطوط المسح، وكتطلق صفارة موزعة مكانيا.
- مظاهر متعددة: اثنا عشر مشهدا كيستعملو لوحات Paper وThermal وMono وPhosphor وAmber وNavy وNeon.
- الانهيار النهائي: أربعة عشر إطار كيتجمعو فإطار واحد كيولي كبسولة
Doneقبل التلاشي للسواد.
فهم خط المعالجة بجوج المراحل
المشروع كيفصل بين تخطيط الطرفية ومؤثرات الكاميرا والعدسة. هاد الشي كيخلي موضع كل رمز محددا بشكل حتمي، وكيخلي المرحلة الثانية تتعامل مع الطرفية المرندرة كمدخل للشيدر.
- بيانات HUD: حزمة
hudكتحدد المشاهد، وإطارات المتتبّع، وحركة الكاميرا، وبيانات الإسقاط. - المرحلة المسطحة: الملف التنفيذي
flatكيرندر الطرفية بصيغة SVG فقياس 3840×2160. كيدير عنصر<text>واحد لكل رمز باش تكون المواضع معروفة بالضبط. - مرحلة العدسة: الملف التنفيذي
lensكياخذ الفيديو المسطح كـiChannel0وكيطبق الكاميرا الافتراضية ومؤثرات SkSL. - مرحلة الصوت:
tools/sfx.pyكيقرأout/tracks.jsonوكيولّد أحداث صوتية كتناسب الكتابة والقطع والتثبيت والهبوط النهائي. - الترميز: FFmpeg كيجمع الفيديو المعالج والصوت فـ
out/tracking.mp4.
شيدر العدسة كيتكلف بالمنظور، وعمق المجال، وتحويل لوحة الألوان، والانحراف اللوني، والتوهج، وشبكة LED، والتمزقات، والتحبب، وطبقة التتبع ففضاء الكاميرا. مؤثر عمق المجال كيستعمل 36 عينة بزاوية ذهبية، بينما الإضاءات القوية كتستافد من ترجيح على طريقة البوكيه.
ثبّت المتطلبات الأساسية
الرندر كيحتاج Mac بمعالج Apple silicon حيث المشروع كيستعمل Skia مع Metal. ثبّت الأدوات التالية قبل البناء:
- Rust مع دعم إصدار 2024
- FFmpeg
- Python 3
- حزمتا Python
numpyوscipy - Pillow و
img2webpإلا بغيتي تعاود تبني وسائط README
نسخ المستودع ودخل للمجلد ديالو:
git clone https://github.com/mrsarac/ff-tracking
cd ff-tracking
رندر الفيلم الافتراضي
السكريبت الرئيسي كيبني مساحة عمل Rust، وكيصدر بيانات التتبع، وكيرندر المرحلة المسطحة، وكيولّد الصوت، وكيرندر مرحلة العدسة:
tools/render.sh
الفيديو الكامل كيتكتب فـ out/tracking.mp4. على M3 Pro، الرندر كياخذ تقريبا 40 ثانية من بعد البناء الأولي.
البيانات المولّدة كتتضمن out/tracks.json، اللي كيوصف أحداث التتبع وكيحرك تصميم الصوت الافتراضي. الملف التنفيذي الاختياري ديال الكاميرا كيكتب حتى هو out/camera.json، اللي فيه معلومات كل فريم على التكبير، والميلان، والدوران، وموضع الإطار المتتبَّع، ومركز الشاشة.
عاين الفريمات والصوت ومراحل الشيدر
حيث كل مرحلة هي واجهة CLI ديال fframes، تقدر تعاين الخرج بالأوامر المعتادة:
target/release/lens strip all -n 12
target/release/lens frame 81 -o frames
target/release/lens preview
target/release/lens audio analyze
استعمل strip باش تنشئ ورقة معاينة، وframe باش تصدّر فريم بالحجم الكامل، وpreview باش تفتح معاينة آنية مع الصوت. أمر تحليل الصوت كيعطي معلومات على علو الصوت والقمة الحقيقية.
باش توقف الشيدر من بعد مرحلة معينة، عيّن LENS_STAGE. المراحل المدعومة مرقمة من 0 حتى 3:
LENS_STAGE=1 target/release/lens frame 81
هاد الشي مفيد ملي كتكون كتصحح الانتقال من الصورة المصدر للمعالجة النهائية ديال العدسة.
خصّص المشاهد
كل لقطة هي عنصر فـ SCENE_LIST داخل hud/src/lib.rs. المشهد كيحدد النوع ديالو، والنص، ولوحة الألوان، والكاميرا، وموضع البداية، وحجم الخط:

SceneDef {
kind: Kind::Typing,
text: "thinking…",
palette: Palette::Thermal,
cam: cam(0.38, -0.22, 0.04, 2.5, 2.8, 50.0, 0.0, 1.2),
hero: (560.0, 540.0),
size: 104.0,
},
بدّل النص، اختار لوحة أخرى، ولا عدّل قيم الكاميرا، ومن بعد عاود الرندرة:
tools/render.sh
التراكَر، الهدف ديال التركيز، التسميات، وصفّارات القفل كيتبعو أوتوماتيكيا معطيات المشهد المحدّثة. سميات اللوحات المتاحة كتشمل Paper وThermal وMono وPhosphor وAmber وNavy وNeon.
شغّل اختبارات HUD من بعد ما تعدّل المشاهد:
cargo test -p hud
هاد الاختبارات كيتأكدو باللي كل سطر داخل فالشاشة، وباللي الكاميرا كتحافظ على كل هدف داخل الكادر.
استعمل الموسيقى التصويرية الافتراضية ولا الاختيارية
الموسيقى التصويرية الافتراضية كيتولّدها tools/sfx.py. كتجمع بين همهمة الشاشة، تشويشات مكسّرة بالبتات مع الانتقالات، نقرات لضغطات المفاتيح، وصفّارات قفل خماسية النغمات موجهة نحو الصندوق المتتبَّع. وكتزيد حتى صوتا صاعدا مع الانهيار، ورنّة مع ضربة منخفضة ملي كيبان قرص Done. كيتقاس مستوى الصوت باستعمال ebur128 ديال FFmpeg وكيتضبط فـ -14 LUFS.
المستودع فيه حتى موسيقى اختيارية أغمق من نوع Slab بسرعة 120 BPM. كاتبع نفس معطيات التتبّع والكاميرا، وبهذا كتتفاعل الومضات ديال القفل، وضغطات المفاتيح، والبادات، والأصوات الصاعدة، والتشويشات، وترشيح الباص، وتمزقات الباص مع الحركة.
استعمل رندرة الموسيقى المضمّنة بهاد الأمر:
tools/score.sh
باش تعاود ترندر الموسيقى، وفّر نسخة Slab محلية مبنية بـ zig build -Doptimize=ReleaseFast:
SLAB=/path/to/slab tools/score.sh
سكريبت الموسيقى كيكتب score/ff_tracking.slab، والصوت المرندر متاح فـ score/score.wav. مسار الموسيقى كيمتد من بعد الصورة باش يحتافظ بذيل الصدى، ومن بعد كيقطع النتيجة لستة ديال الثواني وكيعمل ليها تلاشي متزامن مع الفيديو.
ردّ بالك باللي score/score.py كيستورد slabkit، اللي كيتوزع مع Slab برخصة GPL-3.0. Slab ضروري غير باش تعاود ترندر الموسيقى؛ أما ملفات الموسيقى المضمّنة فعروضة برخصة MIT ديال المستودع، حسب README.
عاود بنِ وسائط التوثيق
المستودع فيه سكريبت باش يعاود يولّد صور README. شغّلو بـ Python من بعد ما تثبّت اعتماديات الصور:
python3 -I tools/readme_media.py
تنظيم المشروع
hud/: المشاهد، صناديق التتبّع، معطيات الكاميرا، ومنطق الإسقاط.flat/: المرحلة الأولى ديال رندرة التيرمينال بدقة 3840×2160.lens/: المرحلة الثانية، وفيهاlens/shaders/lens.skslوالتتبّع ففضاء الكاميرا.tools/: سكريبت الرندرة الرئيسي، مولّد الصوت، مولّد وسائط README، ومسار Slab.score/: موسيقى Slab الاختيارية، المشروع، وملف WAV المرندر.docs/: مواصفات التصميم، البرومبتات، القرارات، ومساهمات fframes.
ملاحظات تقنية متقدمة
التصميم بجوج مراحل مهم حيث إن الشيدر ما كيقدرش حاليا يقرأ subtree ديال SVG من نفس الفريم. عوض هاد الشي، الفريم المسطّح الكامل كيتزامن وكيتدوز للشيدر كمدخل صورة:
.image("iChannel0", &frame.get_synced_video_frame(..)?.into_image())
README كيوثّق حتى شحال من قيد عملي:
flatمحجوزة فـ SkSL، لذلك تفادى تستعملها كسميّة لمساعد.- فمستوى
Video، رجّع جذر<svg>بلاصةSvgr::empty()؛ الجذر الخاوي يقدر يبان كخطأ متأخر فالرندرة. - دالة الإسقاط فـ CPU،
hud::project، كتحافظ على محاذاة طبقة التتبّع مع كاميرا الشيدر. - الجوج ديال المراحل البصرية ومولّد الصوت كيقراو نفس معلومات تتبّع HUD، وهاد الشي كيمنع التركيز والأحداث الصوتية من أنهم يبعدو على الحروف.
الخلاصة
ff-tracking كيبين كيفاش يمكن توليد تسلسل سينمائي قصير كامل انطلاقا من معطيات مشهد منظّمة، وSVG، وRust، وSkSL، ورندرة GPU، وصوت مُركَّب. بدا بـ tools/render.sh، عاين الفريمات الوسيطة، ومن بعد عدّل SCENE_LIST باش تصاوب رسائلك الخاصة فالتيرمينال، واللوحات، وحركات الكاميرا، والتركيبات المتتبَّعة. استعمل مسار Slab الاختياري ملي بغيتي موسيقى كتتبع نفس التوقيت وحركة الكاميرا.
