5 Yıllık M1 Max MacBook’ta Gemma 4 ile Yerel Video İndeksleme
Hayatımın bir yarısını Maasai Mara’da hayvanlar, motorlar ve arkadaşlarla geçirirken, diğer yarısını Silikon Vadisi’nin yoğun temposunda bir terminal karşısında on altı saatlik günlerle geçiyorum. İlk yarıda iPhone, DJI Pocket, drone, Nikon Z8 ve son zamanlarda Ray-Ban Metas’tan sürekli bir görüntü akışı oluyor. Her fotoğrafçı veya videografın bildiği gibi, arşivler düzenlenebileceklerinden daha hızlı büyür. Ne yazık ki, yoğun yazılım geliştirme dönemlerim yüzünden benim arşivime dokunmak mümkün olmuyor.

Üç ay önce lodge’un sosyal medya kanalları içerik eksikliğinden değil, düzenleme süresi yetersizliğinden karardı. Claude Code’un Opus 4.5 ve 4.6 sürümleri, Şubat ayında PR’ları birleştirme noktasına gelince, KaribuKit ilk ücretli mülküyle yayınlandı ve ben de uykusuz geceler geçirerek yazılım geliştirmeye odaklandım. Reel kesmek yerine yazılım göndermeye başladığımda, biriken bu video sorununu çözmeye karar verdim.
Yanlış Katman: Bulut Tabanlı AI Düzenleme Araçlarının Eksikliği
Yaklaşık bir saatlik araştırmadan sonra kendime sunduğum ilk çözüm, SaaS tabanlı bir yığın oluşturmaktı: yinelemeli düzenleme için Eddie AI, üretken B-roll için Higgsfield MCP, altyazılar için Submagic, çapraz gönderi için Buffer. Ayda yaklaşık 140 dolar maliyetle kağıt üzerinde parlak görünüyordu.
İki Temel Sorun
- Üretken AI Videosunun Gerçek Markalarda Yeri Yok: Gerçek bir seyahat markasında üretken AI videosunun yeri yoktu. Misafirler, gerçek yeri görmek için gecelik 300 dolar ödüyorlar ve yanlış etiketlenmiş AI çekimleri, TripAdvisor’da büyük sorunlara yol açabilirdi. Bu yüzden Higgsfield elendi.
- Agresif Gönderi Hedefleri: Haftada 3-5 gönderi benim için agresifti, gerçekçi taban 2-3 gibiydi. Bu iyimser tahmin, ikinci haftada başarısız olmama neden olacaktı.
Sonra zaten DaVinci Resolve Studio’ya sahip olduğumu hatırladım. Resolve 21, IntelliSearch (semantik klip araması), Smart Bins (otomatik düzenleyici klasörler) ve %90-95 doğru altyazı üreten Voice to Subtitle gibi özelliklerle geliyordu. Bu, Eddie’nin sattığı şeylerin yaklaşık %70’iydi, bu yüzden Eddie de elendi.
Sonuç olarak elimde, açık kaynaklı DaVinci Resolve MCP üzerinden Resolve’u kullanan Claude Code, bilgilendirici kliplerde seslendirme için ElevenLabs vardı ve maliyet ayda 140 dolardan 22 dolara düşmüştü.
Ancak daha derin sorun, bu araçları kullanmaya çalıştığımda ortaya çıktı. Piyasadaki her AI video düzenleyici, çekimlerinizin zaten etiketli olduğunu varsayıyordu. Benimkiler ise ‘IMG_*.mov’ ve ‘DJI_*.mp4’ gibi adlara sahipti, ‘Mara june 2024 backup final FINAL’ gibi klasörlerdeydi. Eddie, transkriptle arama yapabilse de, bu araçların hiçbiri etiketlenmemiş bir arşivde ‘altın saatteki tepedeki fili’ bulamıyordu.
AI düzenleyici yanlış problemi çözüyordu. Daha doğrusu, ikinci problemi çözüyordu; ilk problem ise indeksti.
Asıl Soru: Agent Kliplerin İçeriğini Nasıl Bilir?
Sesi yüksek sordum: Agent her klipte ne olduğunu nasıl bilecek?
Etiketsiz bir arşiv için bunun cevabı yoktu. Üzerine transkriptler, GPS koordinatları, dosya adları, üst klasörler atabilirsiniz. Ancak piksellere bakan bir şey olmadıkça, bunların hiçbiri ‘şafak vakti zürafalı geniş çekimi’ size vermez.
Kaldıraç yukarı akışta. Önce indeksi oluşturun, arşivi İngilizce sorgulanabilir hale getirin, ve üstteki düzenleyici, tasarladığı şeyi yapan ince bir katman haline gelir.
Böylece indeksi yerel olarak oluşturdum.
Yerel İndeksleme Sistemi: Mimari ve Akış
Bu, SimbaStack’taki müşterilerim için yaptığım AI-native bir yapı türüydü, ancak bu sefer hem müşteri hem de mühendis bendim, bu da karar ağacını çok daha kısalttı.
Dört Temel Kısıt
- Yerel-İlk: Mara Hilltop arşivi fiziksel SSD’lerdeydi ve kişisel materyallerin çoğu dizüstü bilgisayarımdaydı. Buluta yükleme hem maliyet (binlerce dosya, klip başına birçok gigabayt) hem de tüm görsel yaşam kaydımı üçüncü bir tarafa vermemek adına bir başlangıç bile değildi.
- Sidecar Dosyaları, Merkezi Veritabanı Değil: Her klibin yanında, düz metin ve grep yapılabilir bir ‘.description.md’ dosyası. İndeksleyicim yarın bozulursa hayatta kalır ve dosyalar sürücüler arasında hareket ettiğinde verilerle birlikte taşınır.
- Tek Bir Vizyon Çağrısı Her Şeyi Yakalar: En pahalı işlem, çıkarılan kareler üzerindeki vizyon geçişiydi, bu yüzden bir klip hakkında daha sonra öğrenmek isteyebileceğim her şeyin o tek çağrıdan gelmesi gerekiyordu. Şema ilk günden itibaren kapsamlıydı: derecelendirme, teknik kalite, aydınlatma, günün saati, renk paleti, ses kalitesi, kişi sayısı, anahtar kelimeler, yüzler, konum, transkript, düzyazı açıklaması. Hepsi tek seferde.
- Üç Vizyon Arka Ucu: Varsayılan olarak Max aboneliğimin CLI’si aracılığıyla Claude (sıfır marjinal maliyet), gerektiğinde hız için Anthropic API ve toplu geçiş için LM Studio’ya işaret eden yerel bir arka uç. Yerel olan, önemli olandı.
Klip Başına İş Akışı
ffprobeile meta veri elde etme.exiftoolile GPS enlem/boylam/irtifa elde etme. iPhone, DJI Pocket, drone çekimlerinde aynı şekilde çalışır.- Nominatim aracılığıyla ters coğrafi kodlama. Ücretsiz, oran sınırlı, API anahtarı yok.
ffmpegile beş eşit aralıklı kareyi 1920px’te çıkarma.- WhisperX ile kelime düzeyinde hizalama ve pyannote konuşmacı günlükleme ile transkripsiyon. Hintçe, İngilizce, Svahili, 97 dil.
insightfaceile yüzleri tespit etme ve çapraz arşiv kişi sorguları için merkezi bir SQLite yüz veritabanında 512 boyutlu ArcFace gömülerini saklama.- Vizyon modeli kareleri, transkript parçasını ve klasör bağlamını okur ve YAML frontmatter’ı artı bir düzyazı açıklaması döndürür.
- Sidecar disk’e yazılır.

Mara Hilltop arşivinden ‘IMG_1103.MOV’ adlı klibin bir karesi. Ellie, lodge’daki lüks çadırlardan birinin güvertesinde, öğle vakti. Bu bağlamın hiçbiri dosya adında yaşamıyordu.

Aynı klip için Gemma’nın yazdığı sidecar. Üstte YAML (aydınlatma enum’u, günün saati enum’u, renk paleti, yüz gömüleri, GPS), altta düzyazı ‘## Description’. Safari çadırı ayarını, iç mekandan savana doğru kamera kaydını, çekim türünü ve iki kullanım senaryosunu (pazarlama makaraları ve seyahat vlog’u B-roll) yakaladı. Dosya adı ‘IMG_1103.MOV’ idi; sidecar, onu tekrar bulmak için ihtiyacım olan diğer her şeyi içeriyordu.

İndeksleyici çalıştıktan sonra gerçek bir Mara Hilltop arşiv klasörü. Her klibin yanında bir ‘.description.md’ sidecar’ı var; üstteki ‘_INDEX.json’ ve ‘_INDEX.md’ hızlı grep ve LLM dostu aktarım için klasör düzeyinde özetlerdir.
Tüm bu yapı yaklaşık 1.400 satır Python kodu içeren bir Claude Code becerisiydi. Claude Code’un neredeyse tamamını yazdı. Benim görevim mimariyi, istemleri, şema tasarımını ve işler ters gittiğinde hata ayıklamayı yapmaktı.
Şaşırtıcı Sonuç: 5 Yıllık M1 Max’in Gücü
Beni gerçekten şaşırtan kısım buydu.
2021’de 64 GB RAM’li 16 inç MacBook Pro M1 Max aldım ve bunun LLM’lerle hiçbir ilgisi yoktu. Önceki makinemde 32 GB sınırlarına bir süredir ulaşıyordum. Yüzlerce Chrome sekmesi, DaVinci Resolve, Slack, Discord ve Drive’ı bir arada çalıştıran dağınık bir hacker zihni, birleşik bellek öncesi donanımın sürekli sayfa değişimi yapmadan kaldırabileceği bir şey değildi. Yeni M1 Max’in RAM’ini en üst düzeye çıkardım çünkü eskisi iş akışımı sürekli öldürüyordu ve bunu düzeltmek için param vardı.
Beş yıl sonra, aynı dizüstü bilgisayar LM Studio’da bir yıllık video görüntüsüne karşı Gemma 4 31B Q4 çalıştırıyor.

Toplu çalıştırma, dizüstü bilgisayarı sadece 64 GB RAM’in taşıyabileceğinin ötesine itti. Activity Monitor zirvede 50.89 GB takas (swap) alanı kullandığını bildirdi.

Fiziksel 64 GB RAM, 50.89 GB takas alanı kullanıldı. Bellek basıncı sarı banttaydı, normal bir Salı günü kesinlikle çalıştırmamanız gereken bir durum. Apple’ın takas sistemi bunun için tasarlandı ve fanlar gürültülüydü.
Bunun SSD’ye zarar verip vermeyeceğini Google’da aradım ve görünüşe göre bir veya iki gün için sorun değil. Bunu normal çalışma durumunuz yapmayın, ancak bir hafta sonu makineyi zorlamak tolerans dahilindedir. Dizüstü bilgisayarım ısındı, fanlar hızlandı ve ben başka işler yaparken sidecar’lar üretmeye devam etti.
M1 Max 16 inç, dürüst olmak gerekirse, efsanevi. Mac topluluğundaki insanlar iyi bir nedenle böyle bahsediyor: beş yıl sonra, 31B parametreli modelleri bu kadar eski bir donanımda var olmaması gereken bir boşlukla kullanılabilir hızda çalıştırıyor. Bu cihazdan rahatlıkla üç ila beş yıl daha bekliyorum, çünkü yerel LLM’ler sadece daha verimli hale geliyor ve donanım tavan değil, zemin.
Onu Chrome için satın aldım. Satın aldığımda var olmayan bir modeli çalıştırıyor.
Dört Hata, Dört Ders
Yapının çoğu Claude Code tarafından yazıldı. İlginç olan, neredeyse dört kez yanlış bir şey göndermesiydi.
- WhisperX 3.8, diarization API’sini bozdu: En son dokunduğumdan bu yana WhisperX 3.8’in diarization API’sinde iki kritik değişiklik yapılmıştı:
whisperx.DiarizationPipeline,whisperx.diarizealt modülüne taşınmış ve yapıcı anahtar kelime argümanıuse_auth_token,tokenolarak yeniden adlandırılmıştı (pyannote 3.x’ten miras). Çözüm, imza iç gözlemiydi: betik öncetoken=‘ı deniyor ve yapıcı bir TypeError yükseltirseuse_auth_token=‘a geri dönüyor, böylece bir sonraki API karışıklığından otomatik olarak kurtuluyor. Ders: Hızlı değişen AI kütüphanelerine dışarıdan çağrı yaparken, savunmacı yapıcı çağrılar ucuz bir sigortadır. - Claude CLI izin hatalarını başarılı yanıt olarak döndürdü: CLI arka ucunun ilk testinde, dört sidecar da ‘Görüntü çerçevelerini okumak için izne ihtiyacım var…’ metniyle aynı geldi ve betiğin başarı kontrolü geçti çünkü çıkış kodu 0’dı ve çıktı boş değildi. Bunun nedeni, etkileşimli olmayan modda
--permission-mode bypassPermissionsolmadan, CLI’nin izin reddi metnini bir istem yerine yanıt gövdesi olarak döndürmesiydi, bu da hata modunun, bir dize eşleşmesi yapmadığınız sürece başarı gibi görünmesi anlamına geliyordu. Çözüm, bayrağı eklemek ve ‘İzne ihtiyacım var’ içeren herhangi bir kısa yanıtı açıklama yerine hata olarak işaretleyen savunmacı bir kontrol eklemekti. Ders: AI araçlarını betikleştirirken, etkileşimli olmayan izin akışı sessiz hataların gizlendiği yerdir. - Gemma, bir tam sayı yerine
people_count: 'many'döndürdü: Vizyon istemim kelimenin tam anlamıyla ‘tam sayı veya >10 ise ‘many’ dizesi’ diyordu. Gemma talimatları doğru bir şekilde takip etti; hata şema tasarımındaydı. Çözüm, daha katı bir istem (tahmin etmek için açık rehberlikle 0-99 arası tam sayı) ve eski ‘many’ yanıtları için ayrıştırıcıda bir dönüştürmeydi. Birleşim türü şema alanları kullanmayın. Her zaman tam sayı veya her zaman dizeyi seçin, asla ‘tam sayı veya bu özel dizeyi’ değil, çünkü her aşağı akış tüketicisi bu seçimin bedelini öder. - Kesinlikle elenmemesi gereken motosiklet klibi elendi: İlk eleme istemim fotoğrafçı portföyü şeklindeydi: ağır hareket bulanıklığı, yumuşak odak ve titrek stabilite ‘ele’ olarak derecelendirildi. Teknik olarak doğruydu. Sonra onu İspanya gezisinden elden çekilmiş bir gece motosiklet klibi üzerinde test ettim ve eleme yaptı. Yakaladım: bu eğlenceli bir anı, bulanıklık havayı yansıtıyor. Eleme kriterlerini sadece ‘gerçek bir kayıt değil’ (lens kapağı, cep çekimi, iki saniyelik test klipleri, tamamen kırpılmış pozlama) olarak yeniden çerçeveledim, ‘kusurlu çekim’ olarak değil. Ders: fotoğraf arşivleri agresif eleme yaparken, video anıları hoşgörülü eleme yapar. Aynı şema, farklı kriterler; hangi modda olduğunuzu açıkça belirtin.
Çıkarımlar: İndeksleme Katmanının Önemi
Bir hafta öncesine göre artık daha güçlü bir şekilde inandığım üç şey var:
- Enum kısıtlamaları, halüsinasyonu önlemek için talimatlardan daha iyidir: Gece çektiğim bir ortak çalışma alanı fotoğrafında Gemma 4 E4B’yi test ettim ve sahneyi ‘parlak aydınlatılmış, bol doğal ışık, tavandan tabana pencereler’ olarak tanımladı – oysa pencereler dışarıda zifiri karanlıktı, çünkü geceydi. Sonra modeli
golden_hour | bright_daylight | overcast | dim_interior | nighttime | mixed | uncleararasından seçim yapmaya zorlayan yapılandırılmış bir şema istemiyle 31B’yi test ettim ve hem düşünme kapalı hem de düşünme açık modları geceyi doğru bir şekilde kurtardı. Bir model açık uçlu düzyazı hakkında yalan söyleyebilir, ancak bir enum’dan sadece yanlış seçim yapabilir, asla yeni bir değer icat edemez. Talimatlar yerine şemalar kullanın. - Yapılandırılmış istemlerle yerel 31B, bulut ile arasındaki farkın çoğunu kapatır: Gemma 4 31B Q4’ün yapılandırılmış bir şemaya karşı düşünme kapalı modu, test kliplerimin çoğunda Sonnet 4.6’dan ayırt edilmesi zor çıktılar üretir. Bulut primi, zorlu %10-20’lik kısımda değerini korur. Toplu indeksleme (gece binlerce klip) yerel olarak çalışmalı; bulut, yerelin ‘incele’ olarak işaretlediği kliplerin yeniden derecelendirme geçişidir. Bu iki katmanlı kurulum ölçeklenebilir olanıdır.
- AI video düzenleyicileri bir katman çok yüksekte konumlandırılıyor: Değerli katman indekstir. Arşiviniz İngilizce olarak sorgulanabilir hale geldiğinde (‘Mara’dan altın saatte, insanlar içeren, 8 saniyeden uzun, elden çekilmiş iç mekan kliplerini göster’), üstteki düzenleyici basittir. AI düzenleyici alanının çoğu, var olmayan bir indeksin üzerindeki yüzey için rekabet ediyor ve indeks, hepsinin atladığı bir ön koşuldur.
Gelecek Adımlar ve Kapanış
Geriye dönüp baktığımda, bu sorunun daha erken çözülmesini engelleyen şey aslında zaman değildi. Claude Code’un geceleri kod tabanlarını yeniden düzenlemesi, Codex’in çoğu çekme isteğimi yazması, KaribuKit’i göndermek için üç ay boyunca kullandığım agent tabanlı yığın; hayatımın iş tarafına yönelik her türlü AI süper gücü vardı. Düzenleme tarafında ise hiçbirini kullanmıyordum. Bu işi yapamama, tüm yıl boyunca kafamın arkasında yaşayan küçük, düşük dereceli bir hayal kırıklığı haline gelmişti; SSD’deki bir klasörü her açtığınızda fark edip hiçbir şey yapmadan tekrar kapattığınız türden bir şey. Bir Cumartesi günü fark ettiğim şey, zaman bulmam gerektiği değil, düzenleme sorununun bir araç sorunu olduğu ve araçların şu anda çözmek için en donanımlı olduğum sorun türü olmasıydı.
Bu hafta sonu düzenleyiciyi inşa ediyorum: orkestratör olarak Claude Code, kesimler için DaVinci Resolve MCP, bilgilendirici kliplerde seslendirme için ElevenLabs. Araçlara yerleştirilmiş katı bir kural var: ses klonu sadece yardımcı içerik içindir. Yol tarifleri, oda açıklamaları, çok dilli versiyonlar, zaten şahsen söyleyeceğim gerçek bilgiler. Asla referanslar veya kurucu mesajları için değil. 2026’da açıklama yasaları gerçek, ve bir misafirperverlik markasına olan güveni kaybetmek çok kolay.
İndeks, tüm bunları yönetilebilir kılıyor. O olmasaydı, hala gün doğumu geniş açısı için 47 GB DJI Pocket çekimini tarıyor olurdum.
Şimdilik: bir yıllık Mara Hilltop çekimi, beş yıllık bir dizüstü bilgisayarda İngilizce olarak sorgulanabilir durumda. Maliyeti bir hafta sonu zamanım ve 50 GB takas alanıydı. Eski SSD’lerdeki kalan yıllar sırada.
Tüm bunların adil bir kontrolü: Mara Hilltop’un sosyal medya kanalları bugün hala ölü. İndeksleyici sorunun sadece yarısını çözüyor (doğru klibi bulma); bu klipleri bitmiş makaralara dönüştüren düzenleyici diğer yarısı ve bu, bu hafta sonu inşa ettiğim kısım. Eğer çalışırsa, kanallar tekrar canlanır ve ikinci bölümü yazarım. Çalışmazsa, nedenini yazarım.
Dürüst olmak gerekirse, buradaki doğru cevap birini işe almak olabilir. Mara Hilltop’a uygun duyarlılığa sahip (sıcak, gözlemsel, aşırı kesilmiş MTV enerjili makaralar yok) bir editör bulmak, başka bir beceri yazmaktan daha zordur. Bu tarzda çalışan birini tanıyorsanız, bana yönlendirin.
Kod: github.com/Simbastack-hq/framedex. Orijinal yerel yol referansının yararlı olmadığını işaret eden HN yorumcusuna teşekkürler. Benzer bir şey üzerinde çalışıyorsanız (kişisel arşivleri indeksleme, yerel bir modeli gerçek arşiv işleri yapmak için kullanma, düzenleme araçlarını kullanan agent’lar inşa etme), notları karşılaştırmaktan memnuniyet duyarım.

