Haberi okumadan
dinlemek
Yapım notu · Chrome eklentisi · İki ses modeli · Sıfır sunucu
Sentetik ses · antalia-mini ile okundu
Kısaca§1
Türkçe haberleri sesli okuyan bir Chrome eklentisi yaptım: İstima. Bir haber sitesindeyken simgesine basıyorsunuz, eklenti haberi sayfadan ayıklıyor ve doğal bir Türkçe sesle okuyor. Okunan paragraf sayfada vurgulanıyor; başka sekmeye geçseniz de okuma sürüyor.
Ses bilgisayarın içinde üretiliyor. Sunucu yok, hesap yok, okuduğunuz haber hiçbir yere gitmiyor. Eklenti ücretsiz ve açık kaynak.
Neden şimdi§2
Bir haberi gözle okumak her zaman mümkün olmuyor: yemek yaparken, gözler yorgunken, başka bir işle uğraşırken. Tarayıcıların kendi sesli okuma özelliği Türkçede robotik kalıyor; sayıları, tarihleri, kısaltmaları çoğu zaman yanlış okuyor. İyi sesler ise bulutta duruyor ve metni bir şirkete göndermeyi, çoğu zaman da ödeme yapmayı gerektiriyor.
Ekimin başında PatientDesk AI ekibi Antalia-2 Mini’yi açık kaynak olarak yayınladı. 7,6 milyon parametrelik, ekran kartı istemeyen küçük bir Türkçe ses modeli. Üstelik modelin kendi demo sayfası tamamen tarayıcıda çalışıyordu. Aradığım parça buydu.
Modeli tarayıcıya taşımak§3
Model dört ayrı parçadan oluşuyor ve tarayıcıda WebAssembly üzerinden çalışıyor. Demo sayfasındaki çalıştırma kodunu ve modelin Türkçe metin düzelticisini eklentinin içine aldım; yaklaşık 23 MB’lık model eklentiyle birlikte geliyor.
Chrome eklentilerinde arka planda çalışan kısım ses çalamıyor. Bu yüzden ses, görünmeyen ayrı bir sayfada üretilip çalınıyor. Bu sayfayı tarayıcının izin verdiği en yalıtılmış hâle getirince model dört çekirdekle çalışabildi: dizüstünde bir saniyenin altında hazır oluyor, konuşmayı gerçek zamandan çok daha hızlı üretiyor. Sıradaki paragrafları siz dinlerken önceden hazırladığı için okuma takılmıyor.
Asıl iş: haberi sayfadan çıkarmak§4
En çok uğraştıran kısım ses değil, metin oldu. Bir haber sayfasında haberin kendisi küçük bir ada; etrafı menü, reklam, “ilginizi çekebilir” kutuları ve yorumlarla çevrili. Gövdeyi Firefox’un okuma modunun da kullandığı Mozilla Readability ile ayıkladım. Ama Türk haber siteleri ona yetmeyen kendi kalıntılarını bırakıyordu.
Kategori etiketi paragraf sanılıyordu. “Haber Merkezi, 10 Ekim 2026, 09:45” gibi künyeler okunuyordu. Bir sitede haberin ortasında “Haberlerimizi Google’da takip edin”, bir başkasında sonunda telif notu, bir diğerinde etiket listesi vardı. Her biri için küçük bir kural yazdım. Kısa ve noktalamayla bitmeyen bir satır, başlık değilse etikettir. Tarih ve saat taşıyan kısa satır künyedir.
Sonra eklentiyi Anadolu Ajansı, NTV, Hürriyet, Sözcü, Cumhuriyet, Habertürk, Milliyet ve TRT Haber’de tek tek denedim. TRT’nin kısa haberleri “bu sayfa okunur mu” ön kontrolünden geçemiyordu; sayfanın kendini haber olarak tanıtıp tanıtmadığına bakan bir yedek ekledim. Anadolu Ajansı’nda haber, sayfa açıldıktan biraz sonra geliyordu; eklenti artık birkaç saniye sonra bir kez daha bakıyor.
Mağazayla üç tur§5
Chrome Web Mağazası ilk denemede paketi yüklemedi bile: içinde iki tane manifest.json vardı, biri modelin kendi bilgi dosyasıydı. Adını değiştirdim.
İkinci uyarı izinlerle ilgiliydi. Eklenti her sitede kendiliğinden çalışmak için tüm sitelere erişim istiyordu; mağaza bunun daha uzun bir incelemeye gireceğini söyledi. Haklıydı da. Varsayılanı değiştirdim: İstima artık kurulduğunda hiçbir siteye erişmiyor, yalnızca siz simgeye bastığınızda o sekmeyi okuyor. Köşedeki otomatik “Haberi dinle” düğmesini isteyen, ayarlardan açıp izni kendisi veriyor.
Üçüncüsü bir ret oldu: anahtar kelime spam’i. Açıklamanın sonuna eklentinin çalıştığı tarayıcıları sıralamıştım. O satırı silip yeniden gönderdim, bu sefer yayına çıktı.
İlk geri bildirim, ilk katkı§6
Yayından sonra modeli geliştiren ekipten Sez Saygılı’nın bir notu oldu: başlık bitip ilk paragrafa geçerken geçiş keskin kalıyordu. Haklıydı; paragrafların arasında hiç sessizlik yoktu. Yeni sürümde başlıklardan sonra kısa bir nefes payı, paragraflar arasında da küçük bir duraksama var.
Bir de ilk dış katkı geldi. Ahmet Bedir, eklentiye ikinci bir Türkçe ses ekleyen bir değişiklik gönderdi: Canberk Aslan’ın EMA Lightning modeli. Testleriyle birlikte gelen, özenli bir katkıydı. Artık ayarlardan iki ses arasında seçim yapılabiliyor.
Sunucusuz kalmanın bedeli§7
İkinci modeli eklemenin en kolay yolu, kullanıcı onu seçtiğinde internetten indirmekti. Yapmadım. İstima’nın baştan verdiği söz, okuduğunuz haberin bilgisayarınızdan çıkmaması ve eklentinin hiçbir yere bağlanmamasıydı. Tek bir indirme bile bu cümleyi bozuyordu.
Bunun bedeli boyut oldu: eklenti 25 MB’tan 57 MB’a çıktı. Hızlı bir bağlantıda birkaç saniye, yavaş bir bağlantıda bir dakika demek. Okurken yalnızca seçtiğiniz ses belleğe yükleniyor; hız da kalite de aynı. Bu takası bilerek yaptım.
Aklımda kalan§8
Bu projede beni en çok uğraştıran şey yapay zekâ değildi; haber sitelerinin dağınıklığı ve mağazanın kurallarıydı. Model hazırdı ve iyi çalışıyordu. Benim işim onu insanların her gün açtığı yere, tarayıcının köşesine taşımaktı. Eklentiyi yazarken yanımda bir yapay zekâ kod asistanı vardı; ama eklentinin çalışması için hiçbir buluta ihtiyaç yok.
Bir de küçük bir tesadüf: bu blogdaki yazıların sesli sürümleri de aynı modelle üretiliyor. Bu yazının başındaki “Dinle” düğmesine basarsanız, İstima’nın sesini duymuş olursunuz.
Eklenti Chrome Web Mağazası’nda, kaynak kodu GitHub’da.