
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.
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
Donepilliga 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.
- HUD ma’lumotlari:
hudcrate sahnalar, tracker ramkalari, kamera harakati va proyeksiya ma’lumotlarini belgilaydi. - Yassi bosqich:
flatbinariyasi 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. - Linza bosqichi:
lensbinariyasi yassi videoniiChannel0sifatida o‘qiydi va virtual kamera hamda SkSL effektlarini qo‘llaydi. - Audio bosqichi:
tools/sfx.pyout/tracks.jsonfaylini o‘qiydi va yozish, kesish, qulflash hamda yakuniy tushishga mos keladigan tovush hodisalarini sintez qiladi. - Kodlash: FFmpeg qayta ishlangan video va audioni
out/tracking.mp4fayliga 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.
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
numpyvascipyPython 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.
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, jumladanlens/shaders/lens.skslva 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:
flatSkSL’da band qilingan, shuning uchun uni yordamchi nom sifatida ishlatishdan saqlaning.VideodarajasidaSvgr::empty()o‘rniga root<svg>qaytaring; bo‘sh root kechikkan render xatosiga olib kelishi mumkin.- CPU proyeksiya funksiyasi
hud::projecttreker 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.
