Belgelere otomatik güncellenen ekran görüntüleri eklemek
(interblah.net)- Çalışan bir web uygulamasında ekran görüntülerini otomatik yakalayan bir akış kurarak, yardım belgeleri derlenirken bunların da güncellenmesini sağlamak ve böylece UI değişikliklerinden sonra bile belge görsellerini güncel tutmak
- Markdown içindeki
SCREENSHOTyorumları hedef yol, yakalama yöntemi, CSS selector gibi talimatları taşır; build sürecinde bunlar okunur ve gerçek görsellerle doldurulur - Rake task, Capybara ve Cuprite üzerinden headless Chrome çalıştırır; işleri takım bazında gruplayarak bir kez giriş yaptıktan sonra birden fazla URL’yi dolaşıp yakalama yapar
- Yakalama, element, full_page, viewport olmak üzere üç modu destekler;
click,wait,crop,torn,hidegibi seçeneklerle açık durumdaki UI veya gereksiz öğeler de kontrol edilir rails manual:buildtek komutuyla ekran görüntüsü üretimi ve yardım sayfası build’i birlikte çalışır; kod ve belgeleri aynı PR ya da commit içinde hizalamak kolaylaşır ve manuel yakalama ile manuel crop kaynaklı sürtünme büyük ölçüde azalır
Otomatik güncellenen ekran görüntüsü yaklaşımı
- Canlıda çalışan Jelly (ekipler için paylaşımlı e-posta gelen kutusu hizmeti) yardım merkezi, çalışan web uygulamasından ekran görüntülerini otomatik yakalayacak ve yeniden build alındığında bunları birlikte güncelleyecek şekilde kurgulanmış
- Belgeler Markdown ile yazılıyor; Self-updating screenshots yazısındaki yapıya göre önce Redcarpet ile HTML’e dönüştürülüyor, ardından Rails uygulamasının ERB view’larıyla render ediliyor
- Markdown içinde
SCREENSHOTyorumları yer alıyor; burada hedef yol, yakalama yöntemi, CSS selector gibi talimatlar birlikte tutuluyor<!-- SCREENSHOT: acme-tools/inbox | element | selector=#inbox-brand-new-section -->- Hemen altındaki görsel etiketi, sonucun yerleştirileceği konum olarak kullanılıyor
- UI’daki renkler, buton konumu ya da metinler biraz değişse bile mevcut belge ekran görüntüleri hızla eskimeye yatkın; bu akış bu tür manuel güncelleme yükünü azaltıyor
Yakalama hattı ve bakım etkisi
- İçeride Rake task, Capybara ve Cuprite üzerinden headless Chrome çalıştırarak tüm Markdown dosyalarındaki
SCREENSHOTyorumlarını tarıyor - Ekran görüntüsü işleri takım bazında gruplanıyor; aynı takım için yalnızca bir kez giriş yapıldıktan sonra birden fazla URL sırayla ziyaret ediliyor
- Desteklenen üç yakalama modu var
- element: CSS selector ile belirli bir DOM öğesini yakalar
- full_page: Tüm sayfayı yakalar; gerekirse yükseklik ölçütüne göre kırpılabilir
- viewport: Yalnızca tarayıcı penceresinde o anda görünen alanı yakalar
- Ayrıntı seçenekleri olarak click, wait, crop kullanılabiliyor; böylece butona tıklandıktan sonra ortaya çıkan durum veya animasyon sonrasındaki ekran da otomatik olarak yakalanabiliyor
<!-- SCREENSHOT: nectar-studio/manage/rules | full_page | click=".rule-create-button" wait=200 crop=0,800 -->- Butona basıp formu açtıktan sonra 200 ms bekler ve ardından belirli bir alanı kırparak yakalar
- Ek seçenekler olarak torn ve hide da bulunuyor
torn, CSSclip-pathkullanarak yırtık kağıt kenarı efekti uygularhide, dev toolbar ya da cookie banner gibi ekranda görünmemesi gereken öğeleri geçici olarak gizler
- Tüm hat, tek bir
rails manual:buildkomutuyla çalışır; tüm ekran görüntüsü yakalamalarını ve yardım sayfası build’ini birlikte işler - Belge kaynakları
public/manual/altında basics, setup, advanced gibi bölümlere göre düzenlenmiştir - Build aşamasında bu Markdown dosyaları
app/views/help/altındaki ERB view’larına dönüştürülür; breadcrumb ve bölüm navigasyonu da birlikte üretilir - Özellik geliştirme ile yardım güncellemelerini aynı kod tabanında birlikte ele almak mümkün olduğu için, kod ile belgenin senkronizasyonunu aynı PR ya da aynı commit içinde korumak kolaylaşır
- Kaydırma gerektiren öğeler, tıklanınca açılan popover’lar ve gereksiz kısımlardan kaçınmak için kullanılan crop gibi istisna durumları uygulamada daha fazla zaman gerektirmiş; ancak kurulduktan sonra yardım merkezi çok daha sık güncellenmeye başlanmış
- UI değiştirildikten sonra build’i yeniden çalıştırıp sonucu commit etmek yeterli olduğundan, ekran görüntülerini her zaman güncel tutmak mümkün oluyor; manuel yakalama ve manuel crop kaynaklı sürtünme neredeyse tamamen ortadan kalkıyor
1 yorum
Hacker News yorumları
Ekran görüntülerini programatik olarak üretirken uygulamanın light/dark theme için iki sürümünü de birlikte oluşturup,
prefers-color-scheme: darkile uygun olanı değiştirmek yeterli oluyor.Bu tür şeyler GitHub README'lerinde de gayet iyi çalışıyor: https://github.com/CyberShadow/CyDo#readme
Mobil uygulamalarda Nix ile tek seferlik bir Android emülatörü ayağa kaldırıp güncel ekran görüntülerini ürettim; önceden yapılandırma gerekmiyor ve çalıştırma sonrası veri de kalmıyor.
Benim durumumda kurulumun kendisi o kadar da zor değildi; asıl zor olan fikri bulmaktı ve Nix kodunu da sevdiğim bir LLM ile tek seferde oluşturdum.
Ekran görüntülerini manuel güncellemek dünyanın en zor işi değil ama
upload-apk + take-screenshot + transfer-back-to-PC + editakışı hep hafif sinir bozucu olduğundan sonunda neredeyse hiç yapmamaya başlıyorum.Bağlamdan aşağı yukarı ne olduğu anlaşılabiliyordu ama yine de rahatsız ediciydi.
Uygulama mağazalarında ekran görüntüleri zorunlu ve ekran boyutu ile yerelleştirme sayısı kadar görsel üretmek gerektiği için iş hızla zahmetli hale geliyor.
Eskiden bunun için kendi script'lerimi yazıyordum; şimdi ise https://fastlane.tools/ gibi Fastlane araçları çok yardımcı oluyor.
Mantık bulmaca oyunum Nonoverse için de Fastlane kullanıyorum; örnek ekran görüntülerini uygulama mağazası sayfasında görebilirsiniz: https://apps.apple.com/us/app/nonoverse-nonogram-puzzles/id6...
App Preview videolarının kaydını da birden fazla sahneyi içerecek şekilde otomatikleştirdim; merak eden olursa bunun hakkında ayrıca yazılabilecek bir konu bence.
vibe coding ile yaptığım küçük casual oyunlar her zaman uygulamanın CLI üzerinden headless çalışabildiği, offscreen texture rendering, ekran görüntüsü komutu ve performans ölçümü yapabildiği bir halde başlıyor.
Bunu eklemek neredeyse hiç zaman almıyor ve ajanın UI'ı otomatikleştirip önemli noktalara bakabilmesi için de bir kanal açıyor.
Bu sayede ajanın ekran görüntülerini güncellemesini sağlamak da çok kolaylaşıyor.
Build sürecine tamamen gömülü hali kadar temiz değil ama artık o kısmı da eklemeyi düşünüyorum.
offscreen screenshot path ile world pos/camera view vector için CLI argümanlarım da var ve metin tabanlı bir giriş formatıyla script benchmark'ları çalıştırıyorum.
Bu format; isimlendirilmiş segmentlerden oluşan birden çok satır, segment başına
noyun tick süresi ve her segmentin kontrol girdilerinden oluşuyor.Oyun kodu üzerinde çalışırken görselleri ve performansı A/B test etmek için bunu çok sık kullanıyorum.
Ben de vibe coding'in oyun geliştirmeyi ne kadar kolaylaştırdığıyla çok ilgileniyorum.
Adobe Flash döneminde bağımsız oyun ekosistemi gerçekten çok canlıydı; o zamandan beri neredeyse hiçbir şey bu kadar kolay geliştirme imkânı sunmadı.
vibe coding, bu seviyeyi ilk kez aşan araç gibi görünüyor.
Bunu eklemek neredeyse hiç zaman almıyorsözü duruma göre değişir.Hangi engine'i kullandığını merak ettim.
Markdown belgelerinin içine ekran görüntüsü bildirimlerini satır içinde koyabilme fikri özellikle çok hoşuma gitti.
Masaüstü uygulamam için farklı dillerde ve light/dark modlarda ekran görüntüleri üreten, gürültüyü temizleyen ve Windows/macOS pencere çerçeveleri ekleyen bir çözüm hazırlamıştım.
Burada anlattım: https://maxschmitt.me/posts/cakedesk-website-redesign#screen...
Şu anda ayrı bir script olduğu için bakımı epey can sıkıcı; bunu markdown/mdx'in bir parçası haline getirmeyi düşünmeliyim.
Güzel bir ilham oldu.
kimsenin fark etmediği X en iyi çalışması tarzı bir meme olarak bile kullanılabilir.
Benim https://github.com/zombocom/rundoc projemde de benzer bir özellik var.
Ana amaç tutorial oluşturma olduğu için, çalıştırılan komutların çıktısını da tekrar belgenin içine yerleştiriyor.
Aracın canlı önizlemesini bir dikdörtgenin içine yerleştirmek gibi.
Araç hafifse görsel olarak da en iyi seçenek olabilir ve tarayıcının erişilebilirlik ayarları ya da kullanıcı eklentileri gibi render ayarları da aynen yansıtılabilir.
iommi belgelerinde gerçekten bunu yapıyorlar: https://kodare.net/2025/01/14/iframes-not-screenshots.html
Belgeler için
docs/klasörünü de aynı depoda tutup, belgeleri güncellerken yeni ekran görüntüsü gerektiğinde yeni bir test eklemek oldukça uyumlu bir yaklaşım gibi duruyor.Ben de birkaç yıl önce tam olarak bunu yapmaya başlamıştım ama sonunda https://picshift.io/ gibi daha genel amaçlı bir çözüme soyutladım.
Yine de ekran görüntüsü kullanım senaryosu hâlâ çok hoşuma gidiyor ve bu projenin ilk adı da
ScreenSyncidi.