Listening to the news
instead of reading it
Build note · Chrome extension · Two voices · Zero servers
In short§1
I built a Chrome extension that reads Turkish news aloud: İstima. On a news site you click its icon, it pulls the article out of the page and reads it in a natural Turkish voice. The paragraph being read is highlighted, and reading continues when you switch tabs.
The voice is generated on your own computer. No server, no account, and the article you are reading goes nowhere. The extension is free and open source.
Why now§2
Reading the news with your eyes is not always possible: while cooking, when your eyes are tired, while doing something else. Built-in browser read-aloud sounds robotic in Turkish and often gets numbers, dates and abbreviations wrong. The good voices live in the cloud, which means sending the text to a company and usually paying for it.
In early October the PatientDesk AI team released Antalia-2 Mini as open source: a small Turkish voice model with 7.6 million parameters that needs no graphics card. Its own demo page ran entirely in the browser. That was the missing piece.
Moving the model into the browser§3
The model comes in four parts and runs in the browser through WebAssembly. I took the inference code and the model’s Turkish text normaliser from the demo page and put them inside the extension; the roughly 23 MB model ships with it.
The background part of a Chrome extension cannot play sound, so the voice is generated and played in a separate, invisible page. Once that page ran in the most isolated mode the browser allows, the model could use four cores: it is ready in under a second on a laptop and speaks much faster than real time. It prepares the next paragraphs while you listen, so reading never stalls.
The real work: getting the article out§4
The hard part was the text, not the voice. On a news page the article is a small island surrounded by menus, ads, “you may also like” boxes and comments. I extracted the body with Mozilla Readability, the library behind Firefox’s reader view, but Turkish news sites left behind debris it could not handle.
Category labels were taken for paragraphs. Bylines like “Newsroom, 10 October 2026, 09:45” were read aloud. One site had “Follow our news on Google” in the middle of the article, another a copyright note at the end, another a list of tags. Each got a small rule. A short line without closing punctuation is a label unless it is a heading. A short line carrying a date and time is a byline.
Then I tried the extension one by one on Anadolu Agency, NTV, Hürriyet, Sözcü, Cumhuriyet, Habertürk, Milliyet and TRT Haber. TRT’s short news items failed Readability’s “is this page readable” pre-check, so I added a fallback that checks whether the page declares itself an article. On Anadolu Agency the article arrived a moment after the page loaded; the extension now takes a second look a few seconds later.
Three rounds with the store§5
The Chrome Web Store did not even accept the first upload: the package contained two manifest.json files, one of them the model’s own info file. I renamed it.
The second warning was about permissions. To work on every site by itself, the extension asked for access to all sites, and the store said that meant a longer review. Fair enough. I changed the default: İstima now touches no site when installed and reads a tab only when you click its icon. If you want the automatic “Listen” button in the corner, you turn it on in the settings and grant the permission yourself.
The third was a rejection for keyword spam. I had listed the browsers the extension works in at the end of the description. I removed that line, resubmitted, and it went live.
First feedback, first contribution§6
After launch, Sez Saygılı from the team behind the model pointed out that the jump from the headline to the first paragraph felt abrupt. Fair point: there was no silence between paragraphs at all. The new version takes a short breath after headings and a small pause between paragraphs.
Then the first outside contribution arrived. Ahmet Bedir sent a change that adds a second Turkish voice: Canberk Aslan’s EMA Lightning model. A careful contribution that came with its own tests. You can now choose between two voices in the settings.
The price of staying serverless§7
The easy way to add the second model was to download it when a user picks it. I did not. İstima’s promise from day one was that the article you read never leaves your computer and the extension never connects anywhere. A single download would break that sentence.
The price was size: the extension grew from 25 MB to 57 MB. That is a few seconds on a fast connection and about a minute on a slow one. Only the voice you pick is loaded while reading, so speed and quality stay the same. I made that trade on purpose.
What stayed with me§8
The hardest part of this project was not the AI; it was the mess of news sites and the rules of the store. The model was ready and worked well. My job was to carry it to where people already are every day: the corner of their browser. I had an AI coding assistant beside me while building it, but the extension itself needs no cloud to run.
A small coincidence: the Turkish posts on this blog are voiced with the same model. Press “Listen” on the Turkish version of this post and you will hear İstima’s voice.
The extension is on the Chrome Web Store and the source is on GitHub.