Toplantı iki dilde, altyazı ikisinde de
A meeting in two languages, captioned in both
Söyleneni kendi dilinde yazan, karşı dile çeviren, toplantı bitince notunu çıkaran yerel bir deneme. Ses bilgisayardan çıkmıyor.
A local experiment that writes down what is said in its own language, translates it into the other, and writes the notes when the meeting ends. The audio never leaves the computer.
Senaryolu bir toplantı. Türkçe konuşan: ben · Almanca: Thorsten (Piper, CC0). Sesler Loopback ile uygulamaya verildi. Renkli çizgi konuşulan dili gösterir; gri italik satırlar taslaktır, cümle bitince beyaz, son hâline döner. Video düzeltilmedi; hataları aşağıda.A scripted meeting. Turkish: me · German: Thorsten (Piper, CC0). The audio was routed into the app with Loopback. The coloured bar shows the spoken language; grey italic lines are drafts that turn white, into the final version, when the sentence ends. The video is unedited; its mistakes are listed below.
notlar.md · toplantı bitince, aynı toplantıdanwhen the meeting ended, from the same meeting
Kararlar
- Sürüm yayın tarihi Perşembe günü saat 14:00 olarak belirlendi.
- Yayın sonrası 24 saat boyunca geri dönüş seçeneği açık tutulacak.
- Müşterilere gecikme hakkında bilgilendirme yapılıp yapılmayacağına proje yönetimi karar verecek.
Yapılacaklar
- Test raporu Çarşamba öğlene kadar tamamlanacak.
- Sürüm notları Çarşamba saat 16:00'da yazılacak.
- Görsel sorun Perşembe sabah 10:00'a kadar düzeltilecek.
- Zaman planı Perşembe tarihine göre güncellenecek.
Açık Sorular
- Gecikme müşterilere ayrıca duyurulacak mı?
Toplantıda önce "cuma saat 14" denildi, sonra düzeltildi: "cuma değil, perşembe". Notta yalnızca perşembe var. Turuncu olan yanlış: Almanca "bis Mittwoch, 16 Uhr" (çarşamba 16'ya kadar) "des Mittwoch" diye duyuldu, notta son tarih bir saate dönüştü. Notlar modelin yazdığı gibi, değiştirilmeden; vurgular bizim.In the meeting, "Friday at 14:00" was said first, then corrected: "not Friday, Thursday". The notes only say Thursday. The orange one is wrong: German "bis Mittwoch, 16 Uhr" (by Wednesday 16:00) was heard as "des Mittwoch", and in the notes the deadline became an appointment. The notes are as the model wrote them, unedited; the highlights are ours.
videodaki hatalar · düzeltmeden bıraktımmistakes in the video · left as they are
söylenensaidTestler planlanandan iki gün daha uzun sürdü.
yazılanwrittenTestler planlarından iki gün daha uzun sürdü
Anlam aynı kaldı.The meaning survived.
söylenensaidYayından sonra 24 saat geri dönüş seçeneğini açık tutalım.
yazılanwrittenbu yayından sonra 24 saat geri dönüş seçeneğini açık tutalım
Fazladan bir kelime; çeviri doğru.One extra word; the translation is right.
söylenensaidGecikmeyi müşteriye ayrıca duyuracak mıyız?
yazılanwrittenGecikmeyi müşteriyi ayrıca duyacak mıyız?
Türkçe satır yanlış; Almanca çeviri yine de doğru anlamda.The Turkish line is wrong; the German translation still carries the meaning.
söylenensaidGenel olarak gecikme küçük, kapsam kontrol altında.
yazılanwrittenGenel olarak gecikme küçüğü kapsam kontrol altında.
Türkçe satır yanlış; Almanca doğru anlamda. Toplantı sözlüğünde "kapsam = Umfang" var.The Turkish line is wrong; the German carries the meaning. The meeting glossary has "kapsam = Umfang".
söylenensaidDann schreibe ich die Release-Notes bis Mittwoch, 16 Uhr.
yazılanwrittenDann schreibe ich die Release-Notes des Mittwoch, 16 Uhr.
Türkçede "çarşamba saat 16:00'te" oldu: son tarih bir saate dönüştü, notta da öyle.In Turkish it became "on Wednesday at 16:00": a deadline turned into an appointment, in the notes too.
1 · Sorun1 · Problem
Altyazı ve özet var, ama toplantı dışarı çıkıyor
Captions and summaries exist, but the meeting leaves the building
Zoom, Teams ve Meet altyazı da verir, özet de. Hepsi bunu toplantıyı bir şirketin sunucusuna göndererek yapar. Toplantı iki dilde geçiyorsa bir de çeviri gerekir. Aynı işi toplantıyı bilgisayardan çıkarmadan yapmayı denedim.
Zoom, Teams and Meet give you captions and summaries. All of them do it by sending the meeting to a company's servers. If the meeting runs in two languages, you also need translation. I tried doing the same job without the meeting leaving the computer.
2 · Kapsam2 · Scope
Ne yapar, ne yapmaz
What it does, and what it doesn't
- Yapar: iki dilli bir toplantıyı dinler; her cümleyi kendi dilinde yazar ve karşı dile çevirir; tarayıcıda canlı altyazı olarak gösterir; sonunda Kararlar / Yapılacaklar / Açık Sorular notu çıkarır.
- Yapmaz: konuşanı tanımaz, yalnızca dili tanır. Altyazıyı Zoom'a göndermez. Yalnızca Apple Silicon Mac'te çalışır.
- Sınırları: tek bir senaryolu toplantıda denendi: Türkçesi benim evde kaydettiğim sesim, Almancası yapay bir ses. Temiz duraklar, araya giren yok, kimse aynı anda konuşmuyor. Gerçek bir toplantıda çalıştığı gösterilmedi.
- Yazıya dökme hataları: Whisper Türkçede bazen yanlış kelime yazıyor; videodakiler yukarıda. Tasarımla hafifletildi: çeviri önceki iki satırı ve toplantıya özgü kısa bir sözlüğü görüyor, böylece Türkçe satır yanlışken Almanca çoğu zaman doğru anlamı taşıyor. "Küçüğü"de Whisper en emin olduğu yerde yanılıyor; güven puanıyla yakalanamaz. Bunun için çözüm tasarımda: konuşan kendi sözünü ekranda görür, yanlışsa tekrarlar.
- Yerelde bulabildiğimin en iyisi: bağımsız bir Türkçe sıralamada yerelde çalışan en iyi model Whisper large-v3, hemen ardından videodaki turbo. Aynı kayıtta dört modeli daha denedim — daha büyük Whisper, Türkçeye özel iki ince ayar, Qwen3-ASR: hiçbiri temiz değildi, her biri başka kelimede yanıldı. Ayrıntısı aşağıda: Ne denedim, ne buldum.
- Ses düzeyi: Türkçe kayıtlarım Almanca sesten ~19 dB kısıktı; o hâliyle ilk kelime "Sürüm", Türkçede olmayan "Çürüm" diye yazılıyordu. Kayıtları Almanca sesin düzeyine getirdim; bir aramada da sesi kısık konuşana "sesini aç" denir. Sesle oynamak çözüm değil: gerçek bir toplantı bundan çok daha az kontrollü.
- Bilinen bir zaaf: denediğim her çeviri modeli bir noktada günü ya da saati değiştirdi — "Mittwoch" (çarşamba) "salı" oldu, kimsenin söylemediği bir "dün" belirdi. Bunları kod denetliyor; ama doğru bir tarihi yanlış işe bağlarsa yakalayamaz. Notları göndermeden önce dökümle karşılaştır.
- Does: listens to a two-language meeting; writes each sentence in its own language and translates it into the other; shows both as live captions in a browser; at the end writes notes — Decisions / Actions / Open Questions.
- Doesn't: recognise who is speaking, only which language. Send captions into Zoom. Run anywhere but an Apple Silicon Mac.
- Limits: tested on one scripted meeting: the Turkish is my own voice, recorded at home; the German is a synthetic voice. Clean pauses, no interruptions, nobody talking over anyone. Not shown to work in a real meeting.
- Transcription mistakes: Whisper sometimes writes the wrong Turkish word; the ones in the video are listed above. Softened by design: the translator sees the two previous lines and a short glossary for the meeting, so even when the Turkish line is wrong the German often carries the right meaning. On "küçüğü" Whisper is wrong where it is most confident; a confidence score cannot catch it. The answer is in the design: speakers see their own words on screen and repeat if they are wrong.
- The best I could find to run locally: on an independent Turkish ranking, the best model that runs locally is Whisper large-v3, with the video's turbo right behind it. I tried four more models on the same recording — a bigger Whisper, two Turkish fine-tunes, Qwen3-ASR: none was clean, each was wrong on different words. Details below: What I tested and found.
- Audio level: my Turkish recordings were ~19 dB quieter than the German voice; like that, the first word "Sürüm" came out as "Çürüm", which is not a Turkish word. I brought them to the German voice's level; in a call, too, a quiet speaker is asked to speak up. Tweaking the audio is not a fix: a real meeting is far less controlled than this.
- A known weakness: every translation model I tried changed a day or a time at some point — "Mittwoch" (Wednesday) became Tuesday, a "yesterday" appeared that nobody said. Code checks for this; but it cannot catch a right date attached to the wrong task. Check the notes against the transcript before sending them.
3 · Mimari3 · Architecture
Dinle, yaz, çevir, denetle
Listen, write, translate, check
Ses sessizliklerden cümlelere bölünür; Whisper her cümleyi kendi dilinde yazar. Hızlı bir model hemen kaba bir taslak verir, büyük model birkaç saniye sonra son çeviriyi. Gün, saat ve sayıları model değil kod denetler: çeviri bunlardan birini değiştirdiyse aslından düzeltilir, düzeltilemiyorsa satır çevrilmeden gösterilir. Eksik bir satır eksiktir; yanlış bir gün yanlış kayıttır.
Audio is cut into sentences at the silences; Whisper writes each one in its own language. A small model gives a rough draft at once, the large model the final translation a few seconds later. Days, times and numbers are checked by code, not the model: if a translation changed one, it is repaired from the original, or the line is shown untranslated. A missing line is incomplete; a wrong day is a false record.
4 · Gerekenler4 · Requirements
Güçlü bir Mac
A capable Mac
Daha küçük modellerle de denedim: Türkçe konuşmayı yazıya dökmek ya da çeviri kalitesi belirgin biçimde düştü. Ölçümler ve bilinmeyenler DECISIONS.md'de.I also tried smaller models: transcribing Turkish, or the translation, got clearly worse. Measurements and unknowns are in DECISIONS.md.
5 · Adımlar5 · Steps
Nasıl kurdum
How I built it
DinleListen
Sesi al, sessizliklerden cümlelere böl.Capture audio, cut it into sentences.
capture.py · silero-vadYazWrite
Her cümle kendi dilinde.Each sentence in its own language.
Whisper large-v3-turboÇevirTranslate
Önce taslak, sonra son hâli.A draft first, then the final version.
NLLB · Qwen3.8 27BDenetleCheck
Gün, saat, sayı aslıyla aynı mı?Same days, times, numbers as said?
facts.pyGösterShow
Tarayıcıda canlı altyazı.Live captions in a browser.
web.pyNot çıkarNotes
Toplantıdan sonra, dökümden.After the meeting, from the transcript.
notes.pyKendin çalıştırRun it yourself
Gereken: Apple Silicon Mac, Python 3.13, ffmpeg, Ollama ve ses yönlendirme. Komutlar Terminal içindir.You need: an Apple Silicon Mac, Python 3.13, ffmpeg, Ollama and audio routing. Commands are for Terminal.
Çeviri ve notlar için (bir kez, ~15 GB). Qwen3.8 27B'nin topluluk tarafından yüklenmiş bir sıkıştırması; resmî sürüm için qwen3.8:27b-q4_K_M.For translation and notes (once, ~15 GB). A community-uploaded quant of Qwen3.8 27B; for the official one, qwen3.8:27b-q4_K_M.
ollama pull batiai/qwen3.8-27b:iq4Yalnızca bu projeyi çek, Python ortamını kur. Whisper ve NLLB ilk çalıştırmada iner.Fetch just this project and set up Python. Whisper and NLLB download on the first run.
git clone --filter=blob:none --sparse https://github.com/tanselokay/Atolye.git
git -C Atolye sparse-checkout set projects/yerel-canli-altyazi
cd Atolye/projects/yerel-canli-altyazi
python3.13 -m venv .venv && ./.venv/bin/pip install -r requirements.txtToplantı uygulamasının sesini Loopback'e (ya da BlackHole'a) ver; kendin de duymak için izlemeyi aç. Ses geliyor mu, bak:Send the meeting app's audio to Loopback (or BlackHole), with monitoring on so you still hear it. Check that audio arrives:
./.venv/bin/python levels.py loopbackToplantının iki dilini ver, sonra tarayıcıda http://127.0.0.1:8770 adresini aç. İsteğe bağlı: toplantıya özgü terimler için --glossary sozluk.txt (satır başına sürüm = Version); daha büyük konuşma modeli için --whisper large-v3 (daha yavaş).Give the meeting's two languages, then open http://127.0.0.1:8770 in a browser. Optional: --glossary glossary.txt for the meeting's own terms (one per line, sürüm = Version); --whisper large-v3 for the bigger speech model (slower).
./.venv/bin/python stream.py --live loopback --web --languages tr,de --lines 3 --log toplanti.txtToplantıdan sonra. Söylenmemiş bir gün ya da sayı varsa terminal uyarır.After the meeting. If the notes contain a day or a number nobody said, the terminal warns.
./.venv/bin/python notes.py toplanti.txt --out notlar.mdNe denedim, ne buldumWhat I tested and found
Meraklısı için. Videodaki kaydın aynı 20 cümlesi, aynı kesimler; Türkçe ve Almanca. Kaydı yeniden oynatarak ölçüldü, canlı değil.For the curious. The same 20 sentences from the video's recording, cut the same way; Turkish and German. Measured by replaying the recording, not live.
Türkçe için bağımsız bir sıralama var: herkese aynı kayıtlar, aynı ölçüt (FLEURS, okunmuş konuşma). Kelime hatası: Whisper large-v3 %5,66 · large-v3-turbo %6,07 · Meta Omnilingual 7B %6,09 · Qwen3-ASR 1.7B %8,46. Yerelde çalışanlar arasında bağımsız kanıtı olan en iyisi Whisper. SıralamaThere is an independent Turkish ranking: the same recordings and the same scoring for every model (FLEURS, read speech). Word error rate: Whisper large-v3 5.66% · large-v3-turbo 6.07% · Meta Omnilingual 7B 6.09% · Qwen3-ASR 1.7B 8.46%. Among models that run locally, Whisper is the best with independent evidence. Ranking
10 Türkçe satırda yanlış yazılan kelime (büyük harf, noktalama, rakam/yazı farkı sayılmadı). "küçük" ve Almanca "bis" anlamı değiştiren iki kelime. Süre cümle başına; large-v3 başka bir Mac'te ölçüldü. Hatalar: turbo — planlarından, bu, müşteriyi, duyacak, küçüğü · large-v3 ve BuzzASR — planlandan, küçüğü · TurkMedSTT — planlandan, düzeldir, küçüğü · Qwen3-ASR — Tesel, Tesr (özne "Testler" iki kez bozuldu), sorununu, mız.Wrongly written words on the 10 Turkish lines (case, punctuation and digits vs. words not counted). "küçük" and German "bis" are the two words that change the meaning. Time per sentence; large-v3 was timed on another Mac. The errors: turbo — planlarından, bu, müşteriyi, duyacak, küçüğü · large-v3 and BuzzASR — planlandan, küçüğü · TurkMedSTT — planlandan, düzeldir, küçüğü · Qwen3-ASR — Tesel, Tesr (the subject "Testler" garbled twice), sorununu, mız.
İnternette Türkçe için önerilen modelleri de denedim. Whisper small tabanlı ikisi düz small'dan kötüydü (%24 ve %45 kelime hatası, small %20,8; biri hiç söylenmemiş cümleler uydurdu). large-v3 tabanlı ikisi (BuzzASR, TurkMedSTT) kendi ölçümlerinde large-v3'ü geçiyor; bizim kayıtta geçmediler ve bağımsız sıralamada yoklar. Almancayı bozmadılar.I also tried models recommended online for Turkish. Two based on Whisper small were worse than plain small (24% and 45% word errors, small 20.8%; one invented sentences nobody said). Two based on large-v3 (BuzzASR, TurkMedSTT) beat large-v3 in their own measurements; on our recording they did not, and they are not on the independent ranking. They did not break the German.
Whisper "küçüğü"de en emin olduğu yerde yanıldı; güven puanıyla yakalanamaz. Ama turbo ile Qwen3-ASR'ın aynı cümle için yazdıklarını yan yana koyunca: her hata, iki modelin anlaşmadığı bir kelimedeydi; anlaştıkları satırların hepsi doğruydu. Tek toplantı, 19 satır — bir sonuç değil, bir laboratuvar notu. Ama "iki farklı model anlaşmıyorsa konuşana göster" denenmeye değer.Whisper was wrong on "küçüğü" exactly where it was most confident; a confidence score cannot catch it. But put what turbo and Qwen3-ASR wrote for the same sentence side by side: every error sat on a word where the two models disagreed, and every line they agreed on was right. One meeting, 19 lines — a lab note, not a result. But "when two different models disagree, show it to the speaker" is worth trying.
Türkçe kayıtlarım Almanca sesten ~19 dB kısıktı; o hâliyle "Sürüm" "Çürüm" oldu, düzey eşitlenince her modelde doğru çıktı. Cümlenin başı kesilmesin diye 0,3 sn ön kayıt eklendi; uzunluğu yalnızca hangi başka kelimenin bozulacağını değiştirdi. Whisper'a toplantı sözlüğünü ipucu olarak vermek "Çürüm"ü düzeltti ama düzeltme cümlesinden "Haklısın"ı sildi; kullanmadım. Tüm sayılar: DECISIONS.md.My Turkish recordings were ~19 dB quieter than the German voice; like that, "Sürüm" became "Çürüm", and with the levels matched every model got it right. A 0.3 s pre-roll keeps the start of each sentence; its length only changed which other word broke. Giving Whisper the meeting glossary as a hint fixed "Çürüm" but deleted "Haklısın" (you're right) from the correction; I did not use it. All the numbers: DECISIONS.md.
Tüm kaynak ve ölçümler:Full source and measurements: github.com/tanselokay/Atolye
6 · İleri6 · Further
Sırada ne var
What's next
- Gerçek bir toplantı. İnsan sesi, araya girenler, gürültü — her şeyden önce bu.
- Kim ne dedi. Zoom her katılımcıyı ayrı kaydedebiliyor; bu kayıtlar ayrı ayrı yazıya dökülüp zamana göre birleştirilirse notlar kişilere bağlanabilir.
- İki model anlaşmıyorsa göster. Whisper ile Qwen3-ASR'ın aynı cümle için yazdıklarını karşılaştırıp anlaşmadıkları kelimeyi konuşana işaretlemek; bizim 19 satırda her hata böyle bir kelimedeydi.
- Türkçe kelime denetimi. "Çürüm" gibi Türkçede olmayan bir kelimeyi bir biçimbilim denetleyicisi (ör. Zemberek) işaretleyebilir; "küçüğü" gibi geçerli ama yanlış bir kelimeyi yakalayamaz.
- Daha küçük makineler. Darboğaz Türkçe: küçük konuşma modelleri Almanca ve İngilizcede iyiyken Türkçede belirgin biçimde zayıf.
- Altyazıyı paylaşmak. Aynı ağdakiler sayfayı açabiliyor; uzaktakiler için yalnızca şifreli bir aktarım düşünülebilir.
- A real meeting. Human voices, interruptions, noise — before anything else.
- Who said what. Zoom can record each participant separately; transcribed one by one and merged on time, notes could be tied to people.
- Show where two models disagree. Compare what Whisper and Qwen3-ASR write for the same sentence and mark the words they disagree on for the speaker; on our 19 lines every error was on such a word.
- A Turkish word check. A morphological checker (e.g. Zemberek) could flag a non-word like "çürüm"; it cannot catch a real but wrong word like "küçüğü".
- Smaller machines. The bottleneck is Turkish: small speech models do well on German and English and clearly worse on Turkish.
- Sharing the captions. People on the same network can open the page; for remote ones, only an encrypted relay would do.
Kod GitHub'da: The code is on GitHub: github.com/tanselokay/Atolye
Yapay zekanın eleştirisi
The AI's critique
- Tek toplantı, kolay koşullar. Yalnızca bir senaryolu toplantıda ölçüldü: 9 Türkçe cümle, bir insan sesi, bir yapay ses, temiz sıra, araya giren yok. Konuşmacılar arasına 3 saniyelik duraklar kondu ki çeviri cevaptan önce ekrana gelsin. Gerçek bir toplantıda — üst üste konuşma, kötü mikrofon, aksan — denenmedi; rakamlar oran değil, anekdot.One meeting, easy conditions. Measured on a single scripted meeting: 9 Turkish sentences, one human voice, one synthetic voice, clean turns, no interruptions. 3-second pauses were put between speakers so the translation appears before the reply. Untested in a real meeting — crosstalk, bad microphones, accents; the numbers are anecdotes, not rates.
- Sözlük bu toplantı için, hatalar görüldükten sonra yazıldı. "kapsam = Umfang" gibi terimler ilk çekimdeki hatalar görüldükten sonra eklendi; Almancanın "küçüğü"ye rağmen doğru çıkması kısmen bundan. Gerçek bir toplantıda sözlüğü biri önceden yazmalı ve yalnızca öngördüğü terimlerde işe yarar. 0,3 sn'lik ön kayıt ve ses düzeyi ayarı da bu tek kayda bakılarak seçildi.The glossary was written for this meeting, after seeing the mistakes. Terms like "kapsam = Umfang" were added after the first take went wrong; that is partly why the German comes out right despite "küçüğü". In a real meeting someone has to write the glossary in advance, and it only helps with the terms they foresee. The 0.3 s pre-roll and the level match were also chosen by looking at this one recording.
- Çevirmen tahmin ediyor; bu, hatayı gizleyebilir. Türkçe satır yanlışken Almancanın doğru çıkması başarı gibi görünüyor, ama model bağlamdan tahmin ediyor. Bağlamın yanılttığı bir yerde aynı tahmin kendinden emin ve yanlış bir çeviri üretir — okuyan bunu bilemez. Hatayı yakalamak konuşana kalıyor; konuşurken ekranı izlemek, gerçek bir toplantıda kimsenin yapmayacağı bir iş.The translator guesses, which can hide a mistake. The German coming out right while the Turkish line is wrong looks like success, but the model is guessing from context. Where context misleads, the same guess produces a confident, wrong translation — and the reader cannot tell. Catching it is left to the speaker; watching the screen while talking is a job nobody does in a real meeting.
- Notlar temiz görünür, hatayı sessizce taşır. "bis Mittwoch" (çarşambaya kadar) "des" diye duyuldu ve notta son tarih bir saate dönüştü. Kod günleri ve sayıları denetliyor, "-e kadar" ile "-de" arasındaki farkı değil. Notlar düzenli ve yetkili göründüğü için, dökümle karşılaştırılmadan paylaşılırsa yanlış bir kayıt olur.The notes look clean and carry a mistake silently. "bis Mittwoch" (by Wednesday) was heard as "des", and in the notes the deadline became an appointment. Code checks days and numbers, not the difference between "by" and "at". Because the notes look tidy and authoritative, shared without checking against the transcript they become a false record.
- Ağır ve tek platform. ~22 GB model, 27 milyar parametreli bir dil modeli, yalnızca Apple Silicon Mac. Sıradan bir dizüstünde çalışmaz; denediğim küçük düzenler Türkçede belirgin biçimde kötüydü. Altyazı Zoom'un içine girmiyor, ayrı bir tarayıcı sayfasında duruyor.Heavy, and one platform. ~22 GB of models, a 27-billion-parameter language model, Apple Silicon Macs only. It won't run on an ordinary laptop; the smaller setups I tried were clearly worse on Turkish. Captions don't go into Zoom; they live in a separate browser page.
Kısacası: yerelde neyin mümkün olduğunu gösteren dürüst bir deneme; toplantıda güvenilecek bir araç değil.In short: an honest look at what is possible locally — not a tool to rely on in a meeting.