News Deframer is a Proof of Concept (PoC) RSS feed proxy designed to detect journalistic neutrality and framing in news articles. By leveraging Large Language Models (LLMs), it analyzes the headlines and bodies of RSS feed items to provide a "framing score" and context, helping users decide if an article is worth reading or if it is heavily biased.
In the modern media landscape, headlines are often sensationalized or framed to push specific narratives. News Deframer acts as a middleware between the original news source and your RSS reader. It:
- Fetches original RSS feeds.
- Analyzes the content (Title and Description) using AI.
- Scores the content on a scale from
0.0(No framing/Neutral) to1.0(High framing/Absolute nonsense). - Generates a corrected, neutral headline and a brief reasoning for the score.
- Injects this metadata back into the RSS feed.
This allows you to see the "BS level" of an article directly in your favorite RSS reader before clicking through.
- Framing Detection: Automated scoring of journalistic neutrality.
- Neutral Headlines: Generates an objective version of sensationalized titles.
- Reasoning: Provides a short explanation of why a specific score was assigned.
- RSS Proxy: Works with any standard RSS reader, making it accessible to a large audience without complex client-side setups.
While this project currently operates as an RSS proxy, the goal is to develop a browser plugin. This plugin would overlay framing scores and neutral headlines directly on news websites (e.g., as an overlay).
Currently, the computational power required for high-quality LLM analysis makes a server-side proxy the most viable solution compared to running heavy models directly within a browser extension.
Check algorithm document for more details.
The application is configured via a JSON source file (e.g., source.json).
{
"feeds": [
{
"rss_url": "http://rss.cnn.com/rss/edition.rss",
"language": "en"
},
{
"rss_url": "https://www.tagesschau.de/index~rss2.xml",
"language": "de"
}
],
"prompts": [
{
"user": "Parse the following text. Check if the language is ideologically framed...",
"system": "You are a neutral reporter who is objective...",
"language": "en"
},
{
"user": "Parse den folgenden Text. Prüfe ob die Sprache ideologisch geframed wird. Erstelle die korrigierte Schlagzeile - in einer objektiven Form falls hohes Framing vorhanden ist (Feld 'title_corrected'). Gib das Framing an in einem Wert von 0.0 (gar kein Framing) bis 1.0 (maximales Framing). (Feld 'framing'). Gibt eine Begründung an warum du auf diesen Framing Wert kommst (max 10 Worte) (Feld 'reason'). Der Titel ist: $TITLE - Der Inhalt ist: $DESCRIPTION",
"system": "Du bist ein neutraler Reporter der objektiv ist. Antworte immer auf Deutsch. Die Ausgabe ist strikt in dem JSON Format zu geben. { \"title_corrected\": \"Corrected title\", \"framing\": 0.1, \"reason\": \"my reason\" }",
"language": "de"
}
]
}Check the example.env for Adding your LLM.
This project is written in Go.
go run cmd/service/main.goThis is a Proof of Concept. AI analysis may not always be 100% accurate. The scoring and "neutral" rewrites are generated by a language model and should be treated as an assistive tool rather than absolute truth.