Asosiy kontentga o‘tish
AI qo‘llanmalari

ff-tracking yordamida kod orqali yaratiladigan AI terminal filmini yarating

ff-tracking AI agentining terminalda yozishini qanday tasvirlashini, har bir glifni kuzatishini, harakatlanuvchi kamera va SkSL linza effektlarini qo‘llashini hamda sinxronlashtirilgan ovoz yaratishini o‘rganing. Ushbu qo‘llanmada sozlash, ikki bosqichli jarayon, render buyruqlari, moslashtirish, diagnostika va ixtiyoriy Slab saundtreki yoritiladi.

ff-tracking yordamida kod orqali yaratiladigan AI terminal filmi

ff-tracking — virtual kamera terminalda yozayotgan AI agentini kuzatadigan, kod orqali yaratilgan qisqa film. Kompyuter ko‘rish uslubidagi overlay alohida glyphlarga qulflanadi, perspektiva, maydon chuqurligi, ranglarni qayta ishlash, bloom, scanline uzilishlari, donadorlik va tovush esa kod orqali hosil qilinadi.

Loyiha Rust, fframes, Skia Metal, SkSL, FFmpeg va Python yordamida yaratilgan. U ikki muvofiqlashtirilgan bosqich orqali olti soniyalik video renderlaydi; vizual effektlar ham, audio ham umumiy tracking ma’lumotlari asosida boshqariladi.

Tracking overlaylari bilan kod orqali yaratilgan terminal filmi

Loyiha nimani yaratadi

Filmda thinking…, reading 14 files, tool_call: render_frame() va ✓ 0 problems kabi terminal xabarlari ketma-ketligi ko‘rsatiladi. Tracker eng yangi belgilarni kuzatadi va ularning haqiqiy piksel koordinatalari, nishon ramkalari, yorliqlari hamda ramkalar orasidagi bog‘lanishlarni namoyish etadi.

  • Haqiqiy koordinatalar: tracker yorliqlari har bir ramkaning chiqish kadridagi haqiqiy joylashuvidan foydalanadi.
  • Harakatlanuvchi fokus: maydon chuqurligi nishoni agent yozayotganida kuzatilayotgan ramka ortidan boradi.
  • Animatsiyalangan tracking: bog‘lanishlar ramkalarni o‘qish tartibida ulaydi, nuqta esa har bir bog‘lanish bo‘ylab harakatlanadi.
  • Qulflash effektlari: eng yangi so‘z ikki kadr davomida qizil rangga aylanadi, scanline uzilishiga duch keladi va fazoviy panorama qilingan signal tovushini ishga tushiradi.
  • Turli ko‘rinishlar: o‘n ikki kadrda Paper, Thermal, Mono, Phosphor, Amber, Navy va Neon palitralari ishlatiladi.
  • Yakuniy birlashish: o‘n to‘rtta ramka bitta ramkaga birlashadi, u qora rangga so‘nishdan oldin Done pilliga aylanadi.

Ikki bosqichli pipeline’ni tushunish

Loyiha terminal joylashuvini kamera va linza effektlaridan ajratadi. Bu har bir glyph joylashuvini deterministik qiladi, ikkinchi bosqichga esa renderlangan terminalni shader kiritmasi sifatida ishlatish imkonini beradi.

  1. HUD ma’lumotlari: hud crate sahnalar, tracker ramkalari, kamera harakati va proyeksiya ma’lumotlarini belgilaydi.
  2. Yassi bosqich: flat binariyasi terminalni 3840×2160 o‘lchamda SVG sifatida renderlaydi. U har bir glyph uchun bittadan <text> elementini joylashtiradi, shuning uchun koordinatalar aniq ma’lum bo‘ladi.
  3. Linza bosqichi: lens binariyasi yassi videoni iChannel0 sifatida o‘qiydi va virtual kamera hamda SkSL effektlarini qo‘llaydi.
  4. Audio bosqichi: tools/sfx.py out/tracks.json faylini o‘qiydi va yozish, kesish, qulflash hamda yakuniy tushishga mos keladigan tovush hodisalarini sintez qiladi.
  5. Kodlash: FFmpeg qayta ishlangan video va audioni out/tracking.mp4 fayliga birlashtiradi.

Linza shaderi perspektiva, maydon chuqurligi, palitralarni moslashtirish, xromatik aberratsiya, bloom, LED panjara, uzilishlar, donadorlik va kamera fazosidagi tracker overlayini boshqaradi. Maydon chuqurligi effekti oltin burchak asosidagi 36 ta namunadan foydalanadi, yorqin joylarga esa bokeh uslubidagi og‘irlik beriladi.

Linza shaderi effektining bosqichlari

Zarur vositalarni o‘rnating

Renderlash uchun Apple silicon chipli Mac kerak, chunki loyiha Metal’dagi Skia’dan foydalanadi. Qurishdan oldin quyidagi vositalarni o‘rnating:

  • 2024 edition qo‘llab-quvvatlanadigan Rust
  • FFmpeg
  • Python 3
  • numpy va scipy Python paketlari
  • README media fayllarini qayta yaratmoqchi bo‘lsangiz, Pillow va img2webp

Repository’ni klonlang va uning katalogiga kiring:

git clone https://github.com/mrsarac/ff-tracking
cd ff-tracking

Standart filmni renderlang

Asosiy skript Rust workspace’ini quradi, tracking ma’lumotlarini eksport qiladi, yassi bosqichni renderlaydi, tovush yaratadi va linza bosqichini renderlaydi:

tools/render.sh

Tayyor video out/tracking.mp4 fayliga yoziladi. M3 Pro’da dastlabki qurishdan keyin renderlash taxminan 40 soniya davom etadi.

Yaratilgan ma’lumotlar tarkibida tracking hodisalarini tavsiflaydigan va standart sound design’ni boshqaradigan out/tracks.json ham mavjud. Ixtiyoriy kamera binariyasi har bir kadr uchun zoom, tilt, roll, kuzatilayotgan ramka joylashuvi va ekran markazi ma’lumotlarini o‘z ichiga olgan out/camera.json faylini ham yozadi.

Kadrlar, audio va shader bosqichlarini tekshiring

Har bir bosqich fframes CLI bo‘lgani uchun chiqishni odatiy buyruqlar yordamida tekshirishingiz mumkin:

target/release/lens strip all -n 12
target/release/lens frame 81 -o frames
target/release/lens preview
target/release/lens audio analyze

Kontakt varaq yaratish uchun strip, to‘liq o‘lchamdagi kadrni eksport qilish uchun frame, tovushli real vaqt preview’ini ochish uchun esa preview buyrug‘idan foydalaning. Audio tahlili buyrug‘i balandlik va haqiqiy peak ma’lumotlarini ko‘rsatadi.

Shader’ni muayyan bosqichdan keyin to‘xtatish uchun LENS_STAGE o‘zgaruvchisini belgilang. Qo‘llab-quvvatlanadigan bosqichlar 0 dan 3 gacha raqamlangan:

LENS_STAGE=1 target/release/lens frame 81

Bu manba tasviridan yakuniy linza ishloviga o‘tishni nosozliklarni tuzatish paytida tekshirish uchun foydalidir.

Sahnalarni moslashtiring

Har bir kadr hud/src/lib.rs ichidagi SCENE_LIST ro‘yxatining bitta elementidir. Sahna turi, matni, palitrasi, kamerasi, boshlang‘ich joylashuvi va shrift o‘lchamini belgilaydi:

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,
},

Matnni o‘zgartiring, boshqa palitrani tanlang yoki kamera qiymatlarini sozlang, so‘ng qayta render qiling:

tools/render.sh

Treker, fokus nishoni, yorliqlar va bloklash signallari yangilangan sahna ma’lumotlariga avtomatik ravishda amal qiladi. Mavjud palitra nomlari: Paper, Thermal, Mono, Phosphor, Amber, Navy va Neon.

Sahnalarni tahrirlagandan so‘ng HUD testlarini ishga tushiring:

cargo test -p hud

Bu testlar har bir satr ekranga sig‘ishini va kamera barcha nishonlarni kadrda ushlab turishini tekshiradi.

Terminal treking kadrlari va vizual palitralar

Standart yoki ixtiyoriy saundtrekdan foydalanish

Standart saundtrek tools/sfx.py tomonidan yaratiladi. U ekran g‘uvillashini, o‘tishlardagi bit-crush effektli glitchlarni, klavish bosishlari uchun chertishlarni va treker qutisi tomon yo‘naltirilgan pentatonik bloklash signallarini birlashtiradi. Shuningdek, u kollaps uchun kuchayib boruvchi tovushni hamda Done pill paydo bo‘lganda sub-zarbali jarangni qo‘shadi. Balandlik FFmpeg’ning ebur128 vositasi bilan o‘lchanadi va -14 LUFS darajasiga o‘rnatiladi.

Reponing ichida 120 BPM tezlikdagi ixtiyoriy, qorong‘iroq Slab kompozitsiyasi ham mavjud. U xuddi shu treking va kamera ma’lumotlariga amal qiladi, shuning uchun bloklash signallari, klavish bosishlari, padlar, kuchayuvchi tovushlar, glitchlar, bas filtrlash va bas uzilishlari animatsiyaga mos ravishda javob beradi.

Commit qilingan kompozitsiya renderidan foydalaning:

tools/score.sh

Kompozitsiyani qayta render qilish uchun zig build -Doptimize=ReleaseFast bilan qurilgan Slab checkout manzilini ko‘rsating:

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

Kompozitsiya skripti score/ff_tracking.slab faylini yozadi, render qilingan audio esa score/score.wav sifatida mavjud. Kompozitsiya pipeline’i reverb dumini hisobga olib tasvirdan tashqarigacha davom etadi, so‘ng natijani olti soniyagacha qisqartirib, video bilan birga so‘ndiradi.

E’tibor bering, score/score.py GPL-3.0 litsenziyasi ostida Slab bilan tarqatiladigan slabkit modulini import qiladi. Slab faqat kompozitsiyani qayta render qilish uchun kerak; README’ga ko‘ra, commit qilingan kompozitsiya fayllari reponing MIT litsenziyasi ostida taqdim etiladi.

Hujjatlar mediasini qayta yaratish

Repo README rasmlarini qayta yaratish uchun skriptni o‘z ichiga oladi. Rasmga oid bog‘liqliklarni o‘rnatgandan so‘ng uni Python yordamida ishga tushiring:

python3 -I tools/readme_media.py

Loyiha tuzilishi

  • hud/: sahnalar, treker qutilari, kamera ma’lumotlari va proyeksiya mantiqi.
  • flat/: 3840×2160 o‘lchamdagi terminal renderining birinchi bosqichi.
  • lens/: ikkinchi bosqich, jumladan lens/shaders/lens.sksl va kamera fazosidagi treker.
  • tools/: asosiy render skripti, ovoz generatori, README media generatori va Slab pipeline’i.
  • score/: ixtiyoriy Slab kompozitsiyasi, loyiha va render qilingan WAV fayli.
  • docs/: dizayn spetsifikatsiyalari, promptlar, qarorlar va fframes hissalari.

Ilg‘or amalga oshirish qaydlari

Ikki bosqichli dizayn muhim, chunki shader hozircha ayni kadrdan SVG quyi daraxtini namuna sifatida ola olmaydi. Buning o‘rniga yakunlangan flat kadr sinxronlashtiriladi va shaderga tasvir kiritmasi sifatida uzatiladi:

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

README’da bir nechta amaliy cheklovlar ham hujjatlashtirilgan:

  • flat SkSL’da band qilingan, shuning uchun uni yordamchi nom sifatida ishlatishdan saqlaning.
  • Video darajasida Svgr::empty() o‘rniga root <svg> qaytaring; bo‘sh root kechikkan render xatosiga olib kelishi mumkin.
  • CPU proyeksiya funksiyasi hud::project treker overlay’ini shader kamerasiga mos holda ushlab turadi.
  • Har ikkala vizual bosqich va ovoz generatori bir xil HUD treking ma’lumotlarini o‘qiydi, shu orqali fokus va audio hodisalarining gliflardan siljib ketishining oldi olinadi.

Xulosa

ff-tracking qisqa kinematik ketma-ketlikni tuzilmali sahna ma’lumotlari, SVG, Rust, SkSL, GPU renderi va sintez qilingan audio yordamida to‘liq yaratish mumkinligini namoyish etadi. tools/render.sh bilan boshlang, oraliq kadrlarni tekshiring, so‘ng o‘zingizning terminal xabarlaringiz, palitralaringiz, kamera harakatlaringiz va kuzatiladigan kompozitsiyalaringizni yaratish uchun SCENE_LISTni tahrirlang. Xuddi shu vaqt va kamera harakatiga amal qiladigan kompozitsiya kerak bo‘lsa, ixtiyoriy Slab pipeline’idan foydalaning.