Chrome extension · Persian-language news

Reads the article.
Marks the loaded words.
Shows its work.

Redline scans the Persian news article you're reading, flags language written to sway rather than inform, and swaps it for neutral phrasing in place — with the reason visible on hover. Nothing about the underlying facts changes, only the wording.

How it works

Two passes, doing two different jobs

A word list can safely judge a blanket label. It can't judge a whole sentence built on a slanted premise. So Redline doesn't ask one system to do both.

Phase 1 · instant

A public, editable dictionary

A curated list of unambiguous label swaps — the kind that don't need sentence context to judge — applies the moment the page loads. No network call, no API key, no waiting. Kept deliberately symmetric: labels from state-aligned coverage and from opposition/diaspora coverage both appear in it.

Phase 2 · optional

An AI pass for judgment calls

Loaded adjectives, unverified claims stated as fact, a sentence built on a slanted framing — these need context a static list can't have. With a Gemini API key (yours, stored only on your device), Redline reviews the full article and reports what it finds, flagged separately from the instant pass.

Transparency

The dictionary is public, and it's not a black box

"Bias" is a word worth being suspicious of in a tool that claims to detect it. So the instant-pass word list ships as a plain, readable file in the repository — every entry, every reason, editable by anyone. A few real rows from it:

Loaded label
Neutral swap
Why
اغتشاشگران
"rioters"
معترضان
"protesters"
پیش‌فرض جرم به‌جای توصیف خنثی
assumes guilt instead of describing neutrally
رژیم
"the regime"
دولت
"the government"
برچسب سیاسی به‌جای توصیف خنثی
political label instead of a neutral one
آخوند
a slur for clergy
روحانی
"cleric"
برچسب تحقیرآمیز به‌جای توصیف خنثی
derogatory label instead of a neutral one
فراری
"fugitive"
مقیم خارج از کشور
"resident abroad"
برچسب تحقیرآمیز به‌جای توصیف خنثی
derogatory label instead of a neutral one

210 entries as of this writing, across government-legitimacy, protester, loyalty, identity, media, and security labels — deliberately limited to blanket labels rather than context-dependent claims, and deliberately excluding swaps that would themselves assert a contested position rather than remove one. The full list and the reasoning behind what's excluded are in dictionary.js.

Privacy

Nothing leaves your browser unless you turn it on

  • Phase 1 is fully local. The dictionary pass never makes a network request.
  • Phase 2 only runs if you add your own Gemini API key. That request goes straight from your browser to Google — the article text is never sent to, seen by, or stored by Redline's developer.
  • Your API key stays on your device, in Chrome's local extension storage. It's never synced or transmitted anywhere except to Google's API, by you, when you use Phase 2.
  • No analytics, no tracking, nothing sold.

Read the full privacy policy →

Install

Get it running

  1. From the Chrome Web Store (once published) — click Add to Chrome above.
  2. Or load it unpacked — download the latest release zip, unzip it, open chrome://extensions, enable Developer mode, and click Load unpacked.
  3. Turn it on from the toolbar icon. The dictionary pass runs immediately; add a free Gemini API key in the popup for the deeper AI review.