
ff-tracking ni filamu fupi iliyotengenezwa kwa msimbo, ambapo kamera pepe humfuata wakala wa AI anayeandika katika terminali. Uwekeleaji wa mtindo wa mwonekano wa kompyuta hulenga glyphu binafsi, huku mtazamo, kina cha uga, uchakataji wa rangi, mwangaza, mikwaruzo ya mistari ya skani, chembechembe na sauti vikizalishwa kwa msimbo.
Mradi huu umejengwa kwa Rust, fframes, Skia Metal, SkSL, FFmpeg na Python. Unatoa video ya sekunde sita kupitia hatua mbili zinazoratanishwa, huku athari za kuona na sauti zikiendeshwa na data ya pamoja ya ufuatiliaji.
Kinachozalishwa na mradi
Filamu inaonyesha mfuatano wa ujumbe wa terminali kama vile thinking…, reading 14 files, tool_call: render_frame() na ✓ 0 problems. Kifuatiliaji humfuata mhusika mpya zaidi na kuonyesha viwianishi vyake halisi vya pikseli, mabano lengwa, lebo na viunganishi kati ya visanduku.
- Viwianishi halisi: lebo za kifuatiliaji hutumia nafasi halisi ya kila kisanduku katika fremu ya matokeo.
- Ulengaji unaosogea: lengwa la kina cha uga hufuata kisanduku kinachofuatiliwa wakati wakala anaandika.
- Ufuatiliaji uliohuishwa: viunganishi huunganisha visanduku kwa mpangilio wa kusoma, huku nukta ikisafiri kwenye kila kiunganishi.
- Athari za kufunga: neno jipya zaidi huwa jekundu kwa fremu mbili, hupokea mkwaruzo wa mstari wa skani na kuanzisha mlio unaosogezwa angani.
- Mionekano mingi: picha kumi na mbili hutumia palette za Paper, Thermal, Mono, Phosphor, Amber, Navy na Neon.
- Kuanguka kwa mwisho: visanduku kumi na vinne huungana kuwa kisanduku kimoja ambacho huwa kibonge cha
Donekabla ya kufifia hadi kuwa nyeusi.
Kuelewa mchakato wa hatua mbili
Mradi unatenganisha mpangilio wa terminali na athari za kamera na lenzi. Hii hufanya kila nafasi ya glyphu iwe bainifu, huku hatua ya pili ikiweza kuchukulia terminali iliyotolewa kama ingizo la shader.
- Data ya HUD: crate ya
hudhufafanua mandhari, visanduku vya kifuatiliaji, mwendo wa kamera na data ya projeksheni. - Hatua tambarare: binary ya
flathutoa terminali kama SVG katika 3840×2160. Huweka kipengele kimoja cha<text>kwa kila glyphu ili nafasi zijulikane kwa usahihi. - Hatua ya lenzi: binary ya
lenshuchukua video tambarare kamaiChannel0na kutumia kamera pepe pamoja na athari za SkSL. - Hatua ya sauti:
tools/sfx.pyhusomaout/tracks.jsonna kuunganisha matukio ya sauti yanayoendana na uandishi, mipasuko, kufuli na kutua kwa mwisho. - Usimbaji: FFmpeg huunganisha video iliyochakatwa na sauti kuwa
out/tracking.mp4.
Shader ya lenzi hushughulikia mtazamo, kina cha uga, upangaji wa palette, upotovu wa kromatiki, mwangaza, gridi ya LED, mikwaruzo na uwekeleaji wa kifuatiliaji katika nafasi ya kamera. Athari ya kina cha uga hutumia sampuli 36 za pembe ya dhahabu, huku sehemu angavu zikipokea uzani wa mtindo wa bokeh.
Sakinisha mahitaji ya awali
Utoaji unahitaji Mac yenye Apple silicon kwa sababu mradi hutumia Skia kwenye Metal. Sakinisha zana zifuatazo kabla ya kujenga:
- Rust yenye usaidizi wa toleo la 2024
- FFmpeg
- Python 3
- Vifurushi vya Python
numpynascipy - Pillow na
img2webpikiwa ungependa kujenga upya midia ya README
Clone hazina na uingie kwenye saraka yake:
git clone https://github.com/mrsarac/ff-tracking
cd ff-tracking
Toa filamu chaguo-msingi
Hati kuu hujenga workspace ya Rust, huhamisha data ya ufuatiliaji, hutoa hatua tambarare, huunganisha sauti na kutoa hatua ya lenzi:
tools/render.sh
Video iliyokamilika huandikwa kwenye out/tracking.mp4. Kwenye M3 Pro, utoaji huchukua takribani sekunde 40 baada ya ujenzi wa kwanza.
Data inayozalishwa inajumuisha out/tracks.json, ambayo hueleza matukio ya ufuatiliaji na kuendesha muundo wa sauti chaguo-msingi. Binary ya hiari ya kamera pia huandika out/camera.json, iliyo na ukuzaji, mwinamo, mzunguko, nafasi ya kisanduku kinachofuatiliwa na taarifa za katikati ya skrini kwa kila fremu.
Kagua fremu, sauti na hatua za shader
Kwa kuwa kila hatua ni CLI ya fframes, unaweza kukagua matokeo kwa amri za kawaida:
target/release/lens strip all -n 12
target/release/lens frame 81 -o frames
target/release/lens preview
target/release/lens audio analyze
Tumia strip kuunda laha ya mawasiliano, frame kuhamisha fremu ya ukubwa kamili na preview kufungua onyesho la wakati halisi lenye sauti. Amri ya uchanganuzi wa sauti huripoti taarifa za loudness na kilele halisi.
Ili kusimamisha shader baada ya hatua fulani, weka LENS_STAGE. Hatua zinazotumika zimepewa nambari kutoka 0 hadi 3:
LENS_STAGE=1 target/release/lens frame 81
Hii husaidia unapotatua hitilafu katika mpito kutoka picha chanzo hadi matibabu ya mwisho ya lenzi.
Geuza mandhari kukufaa
Kila picha ni ingizo katika SCENE_LIST ndani ya hud/src/lib.rs. Mandhari hufafanua aina yake, maandishi, palette, kamera, nafasi ya kuanzia na ukubwa wa fonti:

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,
},
Badilisha maandishi, chagua ubao mwingine wa rangi, au rekebisha thamani za kamera, kisha toa tena:
tools/render.sh
Kifuatiliaji, lengwa la umakini, lebo, na milio ya kufunga hufuata data iliyosasishwa ya mandhari kiotomatiki. Majina ya vibao vya rangi yanayopatikana ni pamoja na Paper, Thermal, Mono, Phosphor, Amber, Navy, na Neon.
Endesha majaribio ya HUD baada ya kuhariri mandhari:
cargo test -p hud
Majaribio haya hukagua kwamba kila mstari unatoshea kwenye skrini na kwamba kamera inaweka kila lengwa ndani ya fremu.
Tumia sauti-msingi au sauti ya hiari
Sauti-msingi inatengenezwa na tools/sfx.py. Inachanganya mvumo wa skrini, hitilafu zilizopunguzwa kwa biti wakati wa mabadiliko, mibofyo ya vitufe, na milio ya kufunga ya pentatoniki iliyosogezwa kuelekea kisanduku kinachofuatiliwa. Pia inaongeza mlio wa kupanda kwa kukunjwa na mlio pamoja na pigo la chini wakati kidonge cha Done kinapotokea. Sauti hupimwa kwa ebur128 ya FFmpeg na kuwekwa kuwa -14 LUFS.
Hazina pia inajumuisha muziki wa hiari wa Slab wenye hali nyeusi zaidi, kwa BPM 120. Unafuata data ileile ya ufuatiliaji na kamera, hivyo milio ya kufunga, mibofyo ya vitufe, sauti za usuli, milio ya kupanda, hitilafu, uchujaji wa besi, na mipasuko ya besi huitikia uhuishaji.
Tumia toleo la muziki lililowasilishwa kwa:
tools/score.sh
Ili kutoa tena muziki, toa njia ya checkout ya Slab iliyojengwa kwa zig build -Doptimize=ReleaseFast:
SLAB=/path/to/slab tools/score.sh
Skripti ya muziki huandika score/ff_tracking.slab, na sauti iliyotolewa inapatikana kama score/score.wav. Mchakato wa muziki unaendelea nje ya picha kwa ajili ya mkia wa mwangwi, kisha hukata matokeo hadi sekunde sita na kuyafifisha pamoja na video.
Kumbuka kwamba score/score.py huagiza slabkit, inayosambazwa pamoja na Slab chini ya GPL-3.0. Slab inahitajika tu ili kutoa tena muziki; faili za muziki zilizowasilishwa zinatolewa chini ya leseni ya MIT ya hazina kulingana na README.
Jenga upya midia ya nyaraka
Hazina inajumuisha skripti ya kutengeneza upya picha za README. Iendeshe kwa Python baada ya kusakinisha vitegemezi vya picha:
python3 -I tools/readme_media.py
Mpangilio wa mradi
hud/: mandhari, visanduku vya ufuatiliaji, data ya kamera, na mantiki ya makadirio.flat/: hatua ya kwanza ya uonyeshaji wa terminali katika 3840×2160.lens/: hatua ya pili, ikijumuishalens/shaders/lens.skslna kifuatiliaji cha nafasi ya kamera.tools/: skripti kuu ya uonyeshaji, jenereta ya sauti, jenereta ya midia ya README, na mchakato wa Slab.score/: muziki wa hiari wa Slab, mradi, na faili ya WAV iliyotolewa.docs/: vipimo vya muundo, maelekezo, maamuzi, na michango ya fframes.
Maelezo ya utekelezaji wa hali ya juu
Muundo wa hatua mbili ni muhimu kwa sababu shader haiwezi kwa sasa kuchukua sampuli ya mti mdogo wa SVG kutoka fremu ileile. Badala yake, fremu tambarare iliyokamilika husawazishwa na kupitishwa kwa shader kama ingizo la picha:
.image("iChannel0", &frame.get_synced_video_frame(..)?.into_image())
README pia inaandika vikwazo kadhaa vya kiutendaji:
flatimetengwa katika SkSL, kwa hiyo epuka kuitumia kama jina la msaidizi.- Katika kiwango cha
Video, rudisha<svg>ya mzizi badala yaSvgr::empty(); mzizi mtupu unaweza kujitokeza kama hitilafu ya uonyeshaji iliyochelewa. - Kitendakazi cha makadirio cha CPU
hud::projecthudumisha mpangilio wa wekeleo la kifuatiliaji ili ulingane na kamera ya shader. - Hatua zote mbili za kuona na jenereta ya sauti husoma maelezo yale yale ya ufuatiliaji wa HUD, hivyo kuzuia matukio ya umakini na sauti kuachana na glyphs.
Hitimisho
ff-tracking inaonyesha jinsi mfuatano mfupi wa sinema unavyoweza kutengenezwa kikamilifu kutoka kwa data iliyopangwa ya mandhari, SVG, Rust, SkSL, uonyeshaji wa GPU, na sauti iliyosanisishwa. Anza na tools/render.sh, kagua fremu za kati, kisha hariri SCENE_LIST ili kuunda ujumbe wako wa terminali, vibao vya rangi, miondoko ya kamera, na miundo inayofuatiliwa. Tumia mchakato wa hiari wa Slab unapotaka muziki unaofuata muda na mwendo uleule wa kamera.
