مرکزی مواد پر جائیں
اے آئی ٹیوٹوریلز

ff-tracking کے ساتھ کوڈ سے تیار کردہ AI ٹرمینل فلم بنائیں

جانیں کہ ff-tracking ٹرمینل میں ٹائپ کرنے والے AI ایجنٹ کو کیسے رینڈر کرتا ہے، ہر گلف کو ٹریک کرتا ہے، متحرک کیمرا اور SkSL لینز ایفیکٹس لاگو کرتا ہے، اور ہم آہنگ آواز تیار کرتا ہے۔ اس ٹیوٹوریل میں سیٹ اپ، دو مرحلوں والی پائپ لائن، رینڈرنگ کمانڈز، تخصیص، تشخیصی طریقے اور اختیاری Slab ساؤنڈ ٹریک شامل ہیں۔

ff-tracking کے ساتھ کوڈ سے تیار کردہ AI ٹرمینل فلم

ff-tracking ایک کوڈ سے تیار کی گئی مختصر فلم ہے جس میں ایک ورچوئل کیمرا ٹرمینل میں ٹائپ کرنے والے AI ایجنٹ کا تعاقب کرتا ہے۔ کمپیوٹر وژن طرز کا اوورلے انفرادی حروف پر فوکس کرتا ہے، جبکہ پرسپیکٹو، ڈیپتھ آف فیلڈ، کلر پروسیسنگ، بلوم، اسکین لائن ٹیرز، گرین اور آواز کوڈ کے ذریعے تیار کیے جاتے ہیں۔

یہ پروجیکٹ 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 پِل میں تبدیل ہو جاتا ہے۔

دو مرحلوں والی پائپ لائن کو سمجھیں

یہ پروجیکٹ ٹرمینل لے آؤٹ کو کیمرا اور لینز اثرات سے الگ رکھتا ہے۔ اس سے ہر حرف کی پوزیشن متعین رہتی ہے، جبکہ دوسرا مرحلہ رینڈر کیے گئے ٹرمینل کو شیڈر ان پٹ کے طور پر استعمال کر سکتا ہے۔

  1. HUD ڈیٹا: hud کریٹ سینز، ٹریکر باکسز، کیمرا موومنٹ اور پروجیکشن ڈیٹا کی تعریف کرتا ہے۔
  2. فلیٹ پاس: flat بائنری ٹرمینل کو 3840×2160 پر SVG کے طور پر رینڈر کرتی ہے۔ یہ ہر حرف کے لیے ایک <text> عنصر رکھتی ہے تاکہ پوزیشنز بالکل درست معلوم ہوں۔
  3. لینز پاس: lens بائنری فلیٹ ویڈیو کو iChannel0 کے طور پر سیمپل کرتی ہے اور ورچوئل کیمرا اور SkSL اثرات لاگو کرتی ہے۔
  4. آڈیو پاس: tools/sfx.py، out/tracks.json پڑھ کر ٹائپنگ، کٹس، لاکس اور حتمی لینڈنگ سے مطابقت رکھنے والے صوتی واقعات تیار کرتی ہے۔
  5. انکوڈنگ: FFmpeg پراسیس شدہ ویڈیو اور آڈیو کو out/tracking.mp4 میں یکجا کرتا ہے۔

لینز شیڈر پرسپیکٹو، ڈیپتھ آف فیلڈ، پیلیٹ میپنگ، کرومیٹک ایبریشن، بلوم، LED گرڈ، ٹیرز، گرین اور کیمرا اسپیس ٹریکر اوورلے سنبھالتا ہے۔ ڈیپتھ آف فیلڈ اثر 36 گولڈن اینگل سیمپلز استعمال کرتا ہے، جبکہ نمایاں حصوں کو بوکے طرز کی ویٹنگ دی جاتی ہے۔

لینز شیڈر اثر کے مراحل

ضروری سافٹ ویئر انسٹال کریں

رینڈرنگ کے لیے Apple silicon والا Mac درکار ہے کیونکہ یہ پروجیکٹ Metal پر Skia استعمال کرتا ہے۔ بلڈ شروع کرنے سے پہلے درج ذیل ٹولز انسٹال کریں:

  • 2024 ایڈیشن کی سپورٹ والا Rust
  • FFmpeg
  • Python 3
  • Python پیکیجز numpy اور scipy
  • اگر آپ README میڈیا دوبارہ بنانا چاہتے ہیں تو Pillow اور img2webp

ریپوزٹری کلون کر کے اس کی ڈائریکٹری میں جائیں:

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 بھی لکھتی ہے، جس میں فی فریم زوم، ٹِلٹ، رول، ٹریک کیے گئے باکس کی پوزیشن اور اسکرین سینٹر کی معلومات شامل ہوتی ہیں۔

فریمز، آڈیو اور شیڈر مراحل کا جائزہ لیں

چونکہ ہر پاس ایک fframes CLI ہے، آپ معمول کی کمانڈز کے ذریعے آؤٹ پٹ کا جائزہ لے سکتے ہیں:

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

یہ سورس امیج سے حتمی لینز ٹریٹمنٹ تک منتقلی کو ڈیبگ کرتے وقت مفید ہے۔

سینز کو حسب ضرورت بنائیں

ہر شاٹ hud/src/lib.rs کے اندر SCENE_LIST میں ایک اندراج ہے۔ ایک سین اپنی قسم، متن، پیلیٹ، کیمرا، ابتدائی پوزیشن اور فونٹ سائز کی تعریف کرتا ہے:

SceneDef {
    kind: Kind::Typing,
    text: "سوچ رہا ہے…",
    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 پل ظاہر ہونے پر سب ہٹ کے ساتھ ایک چائم بھی شامل کرتا ہے۔ بلندی FFmpeg کے ebur128 سے ناپی جاتی ہے اور اسے -14 LUFS پر سیٹ کیا جاتا ہے۔

ریپوزٹری میں 120 BPM پر ایک اختیاری گہرا Slab اسکور بھی شامل ہے۔ یہ اسی ٹریکنگ اور کیمرہ ڈیٹا کی پیروی کرتا ہے، اس لیے لاک بلپس، کی اسٹروکس، پیڈز، رائزرز، گِلچز، باس فلٹرنگ اور باس ٹیرز اینیمیشن کے مطابق ردِعمل دیتے ہیں۔

کمیٹ شدہ اسکور رینڈر استعمال کریں:

tools/score.sh

اسکور دوبارہ رینڈر کرنے کے لیے، zig build -Doptimize=ReleaseFast کے ساتھ بنایا گیا Slab چیک آؤٹ فراہم کریں:

SLAB=/path/to/slab tools/score.sh

اسکور اسکرپٹ score/ff_tracking.slab لکھتی ہے، اور رینڈر شدہ آڈیو score/score.wav کے طور پر دستیاب ہے۔ اسکور پائپ لائن ریورب ٹیل کے لیے تصویر سے آگے تک پھیلتی ہے، پھر نتیجے کو چھ سیکنڈ تک محدود کر کے ویڈیو کے ساتھ فیڈ کرتی ہے۔

یاد رکھیں کہ score/score.py، slabkit درآمد کرتی ہے، جو Slab کے ساتھ GPL-3.0 کے تحت تقسیم ہوتا ہے۔ اسکور دوبارہ رینڈر کرنے کے لیے صرف Slab درکار ہے؛ README کے مطابق کمیٹ شدہ اسکور فائلیں ریپوزٹری کے MIT لائسنس کے تحت فراہم کی جاتی ہیں۔

دستاویزی میڈیا دوبارہ بنائیں

ریپوزٹری میں 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 کی شراکتیں۔

اعلیٰ درجے کے نفاذی نوٹس

دو مرحلوں پر مبنی ڈیزائن اہم ہے کیونکہ shader فی الحال اسی فریم سے SVG subtree کا نمونہ نہیں لے سکتا۔ اس کے بجائے، مکمل flat فریم کو ہم وقت کر کے shader کو تصویری اِن پٹ کے طور پر منتقل کیا جاتا ہے:

.image("iChannel0", &frame.get_synced_video_frame(..)?.into_image())

README میں کئی عملی پابندیوں کی بھی وضاحت کی گئی ہے:

  • flat SkSL میں محفوظ ہے، اس لیے اسے helper نام کے طور پر استعمال کرنے سے گریز کریں۔
  • Video سطح پر Svgr::empty() کے بجائے root <svg> واپس کریں؛ خالی root دیر سے رینڈرنگ کی خرابی ظاہر کر سکتا ہے۔
  • CPU پروجیکشن فنکشن hud::project ٹریکر اوورلے کو shader کے کیمرے کے ساتھ ہم آہنگ رکھتا ہے۔
  • دونوں بصری مراحل اور ساؤنڈ جنریٹر ایک ہی HUD ٹریکنگ معلومات پڑھتے ہیں، جس سے فوکس اور آڈیو ایونٹس گلائفز سے دور نہیں ہوتے۔

نتیجہ

ff-tracking دکھاتا ہے کہ مختصر سنیما سلسلہ مکمل طور پر ساختہ منظر کے ڈیٹا، SVG، Rust، SkSL، GPU رینڈرنگ اور ترکیبی آڈیو سے کیسے تیار کیا جا سکتا ہے۔ tools/render.sh سے آغاز کریں، درمیانی فریموں کا جائزہ لیں، پھر SCENE_LIST میں ترمیم کر کے اپنے ٹرمینل پیغامات، پیلیٹس، کیمرہ حرکات اور ٹریک کی گئی کمپوزیشنز بنائیں۔ جب آپ ایسا اسکور چاہیں جو اسی ٹائمنگ اور کیمرہ حرکت کی پیروی کرے تو اختیاری Slab پائپ لائن استعمال کریں۔