Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
site/
.python-venv
.venv
__pycache__
3 changes: 3 additions & 0 deletions .markdownlint-cli2.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
config:
default: true
MD013: false # Disable line length check
MD033:
allowed_elements:
- img

globs:
- "docs/**/*.md"
Expand Down
12 changes: 7 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
VENV := .venv
export VIRTUAL_ENV := $(CURDIR)/$(VENV)
export PATH := $(VIRTUAL_ENV)/bin:$(PATH)

all:
@echo all

sync:
uv sync

build:
. .venv/bin/activate && \
mkdocs build
mkdocs build

serve:
. .venv/bin/activate && \
mkdocs serve -a 0.0.0.0:8000
mkdocs serve -a 0.0.0.0:8000

clean:
rm -rf site .env

lint:
docker run --rm -v "$$(pwd):/workdir" davidanson/markdownlint-cli2:latest

fix-lint:
lint-fix:
docker run --rm --user "$$(id -u):$$(id -g)" -v "$$(pwd):/workdir" davidanson/markdownlint-cli2:latest --fix
12 changes: 12 additions & 0 deletions docs/assets/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screenshots/bbc/bbc-portal.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screenshots/bbc/portal-hover.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screenshots/lmstudio-rtx3060.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 0 additions & 4 deletions docs/de/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@ Warum ist Sprachanalyse effektiv?

Richten Sie Ihre eigene [Instanz](https://github.com/deframer/news-deframer/blob/main/docs/SETUP.md) ein.

## Übersicht

- [TODO / Status](https://github.com/deframer/news-deframer/blob/main/TODO.md)

## Ressourcen

- [Quellcode](https://github.com/deframer/news-deframer/)
Expand Down
41 changes: 41 additions & 0 deletions docs/de/screenshots/bbc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# BBC

- RSS-Feed `https://feeds.bbci.co.uk/news/world/rss.xml`

## Portal

Das Plugin überlagert die ursprüngliche Webseite, um eine ablenkungsfreie Umgebung zu schaffen.

**Hauptmerkmale:**

- **Neutralisierter Inhalt**: Sie sehen nicht die ursprünglichen, potenziell emotional aufgeladenen Titel oder Beschreibungen. Stattdessen generiert die KI neutrale Zusammenfassungen, die informieren statt zu provozieren.
- **Sensations-Score**: Die Prozentanzeige zeigt das Niveau des erkannten Sensationalismus oder der Voreingenommenheit an. Ein roter Indikator deutet auf ein hohes Maß an Manipulation, Framing, Voreingenommenheit oder Fehlinformationen hin.

**Empfehlung**: Ein Score von 50 % oder höher deutet auf eine erhebliche Voreingenommenheit hin. Wir empfehlen, alternative Quellen für eine ausgewogenere Perspektive zu suchen.

<img src="/assets/screenshots/bbc/bbc-portal.jpg" alt="BBC Portal" width="1000"/>

**Schnelle Einblicke**: Wenn Sie mit der Maus über die Prozentanzeige fahren, wird die detaillierte Analyse des News Deframers angezeigt. Dies bietet oft genügend Kontext, um den vollständigen Artikel zu überspringen.

<img src="/assets/screenshots/bbc/portal-hover.png" alt="Portal Hover" width="200"/>

## Artikel

Sie behalten die volle Kontrolle über Ihr Leseerlebnis. Das Plugin fängt die Navigation zu Artikel-URLs ab. Unabhängig davon, ob Sie über das Portal oder einen direkten Link auf den Artikel zugreifen, präsentiert News Deframer immer zuerst die Analysevorschau, um Sie zu schützen.

**Wichtiger Hinweis**: Das Plugin analysiert derzeit nur die Metadaten des RSS-Feeds (Titel und Beschreibung). Der Inhalt des Artikels bleibt unberührt. Zukünftige Updates können eine Volltext-KI-Analyse beinhalten, die von vertrauenswürdigen menschlichen Prüfern ausgelöst wird.

- **"Verstecken"-Button**: Schließt das Deframer-Overlay, um den ursprünglichen Artikel auf der Website des Herausgebers anzuzeigen.
- **Geschützte Ansicht**: Standardmäßig sind der ursprüngliche Titel und die Beschreibung ausgeblendet, um die emotionale Wirkung zu reduzieren. Sie können die Ansicht erweitern, um die Argumentation der KI und den Originaltext zu sehen.

Artikel 1

| Einfach | Erweitert |
| :---: | :---: |
| <img src="/assets/screenshots/bbc/bbc-article1-basic.png" alt="BBC Artikel 1 - Einfach" width="600"/> | <img src="/assets/screenshots/bbc/bbc-article1-expanded.png" alt="BBC Artikel 1 - Erweitert" width="600"/> |

Artikel 2

| Einfach | Erweitert |
| :---: | :---: |
| <img src="/assets/screenshots/bbc/bbc-article2-basic.png" alt="BBC Artikel 2 - Einfach" width="600"/> | <img src="/assets/screenshots/bbc/bbc-article2-expanded.png" alt="BBC Artikel 2 - Erweitert" width="600"/> |
29 changes: 29 additions & 0 deletions docs/de/screenshots/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Screenshots

Beispiele für unser Browser-Plugin.

## Präsentationen

- [BBC](bbc.md)
- [Tagesschau](tagesschau.md)

## KI-Konfiguration

Die folgende Konfiguration wurde verwendet, um diese Beispiele zu erstellen:

- **Hardware**: Mac Mini M1 (16GB RAM), unter macOS Tahoe 26.2
- **Software**: [LM Studio](https://lmstudio.ai/) 0.3.39
- **Modell**: [meta-llama-3.1-8b-instruct](https://huggingface.co/lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF)

Das System verwendet diese [Prompts](https://github.com/deframer/news-deframer/tree/main/pkg/think/prompts/).

**Zitat:** *"Du bist ein streng objektiver, neutraler Medienanalyst und Nachrichtenredakteur. Deine Aufgabe ist es, Texte (Titel und Beschreibung) auf journalistische Qualität, Einseitigkeit (Bias) und Sensationalismus zu analysieren und eine neutrale Version zu erstellen. Du musst spezifische, prägnante Begründungen für jede Bewertung und Korrektur liefern, die in einer gesamtanalytischen Zusammenfassung gipfeln. [...]"*

Dieser Prompt weist die KI an, strikte Objektivität und politische Neutralität zu wahren.

*Hinweis: Obwohl die LLM-Leistung auf dem M1-Chip bescheiden ist (ca. 26s pro Anfrage), bietet sie eine kostengünstige und effiziente lokale Lösung.*

```txt
level=DEBUG msg="openai request duration" duration=26.833331235s
level=DEBUG msg="openai token usage" prompt_tokens=1470 completion_tokens=303 thoughts_tokens=0 total_tokens=1773
```
23 changes: 23 additions & 0 deletions docs/de/screenshots/tagesschau.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Tagesschau

- RSS-Feed `https://www.tagesschau.de/index~rss2.xml`

## Portal

**Empfehlung**: Ein Score von 50 % oder höher dient als Warnung. Er deutet auf die Verwendung von Spekulationen, Framing oder Sensationslust hin. Wir empfehlen, den ursprünglichen Titel und die Beschreibung vollständig zu meiden und objektivere Quellen zu suchen. Dies deutet darauf hin, dass professionelle Techniken absichtlich eingesetzt werden, um Ihre Wahrnehmung zu manipulieren.

<img src="/assets/screenshots/tagesschau/tagesschau-portal.jpg" alt="Tagesschau Portal" width="1000"/>

## Artikel

Artikel 1

| Einfach | Erweitert |
| :---: | :---: |
| <img src="/assets/screenshots/tagesschau/tagesschau-article1-basic.png" alt="Tagesschau Artikel 1 - Einfach" width="600"/> | <img src="/assets/screenshots/tagesschau/tagesschau-article1-expanded.png" alt="Tagesschau Artikel 1 - Erweitert" width="600"/> |

Artikel 2

| Einfach | Erweitert |
| :---: | :---: |
| <img src="/assets/screenshots/tagesschau/tagesschau-article2-basic.png" alt="Tagesschau Artikel 2 - Einfach" width="600"/> | <img src="/assets/screenshots/tagesschau/tagesschau-article2-expanded.png" alt="Tagesschau Artikel 2 - Erweitert" width="600"/> |
4 changes: 0 additions & 4 deletions docs/en/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@ Why is language analysis effective?

Set up your own [instance](https://github.com/deframer/news-deframer/blob/main/docs/SETUP.md).

## Overview

- [TODO / Status](https://github.com/deframer/news-deframer/blob/main/TODO.md)

## Resources

- [Source Code](https://github.com/deframer/news-deframer/)
Expand Down
27 changes: 27 additions & 0 deletions docs/en/license.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# License

```txt
Copyright © 2025,2026 News Deframer Contributors

MIT License

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
41 changes: 41 additions & 0 deletions docs/en/screenshots/bbc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# BBC

- RSS feed `https://feeds.bbci.co.uk/news/world/rss.xml`

## Portal

The plugin overlays the original web page to provide a distraction-free environment.

**Key Features:**

- **Neutralized Content**: You will not see the original, potentially emotionally charged titles or descriptions. Instead, the AI generates neutral summaries designed to inform rather than provoke.
- **Sensationalism Score**: The percentage indicator reveals the level of detected sensationalism or bias. A red indicator suggests high levels of manipulation, framing, bias, or misinformation.

**Recommendation**: A score of 50% or higher suggests significant bias. We recommend seeking alternative sources for a more balanced perspective.

<img src="/assets/screenshots/bbc/bbc-portal.jpg" alt="BBC Portal" width="1000"/>

**Quick Insights**: Hovering over the percentage bar reveals the detailed analysis from the News Deframer. This often provides enough context to skip the full article.

<img src="/assets/screenshots/bbc/portal-hover.png" alt="Portal Hover" width="200"/>

## Article

You retain full control over your reading experience. The plugin intercepts navigation to article URLs. Regardless of whether you access the article via the portal or a direct link, News Deframer always presents the analysis preview first to protect you.

**Important Note**: The plugin currently analyzes only the RSS feed metadata (title and description). The body of the article remains untouched. Future updates may include full-text AI analysis triggered via human trusted flaggers.

- **"Hide" Button**: Dismisses the Deframer overlay to reveal the original article on the publisher's site.
- **Protected Viewing**: By default, the original title and description are hidden to reduce emotional impact. You can choose to expand the view to see the AI's reasoning and the original text.

Article 1

| Basic | Expanded |
| :---: | :---: |
| <img src="/assets/screenshots/bbc/bbc-article1-basic.png" alt="BBC Article 1 - Basic" width="600"/> | <img src="/assets/screenshots/bbc/bbc-article1-expanded.png" alt="BBC Article 1 - Expanded" width="600"/> |

Article 2

| Basic | Expanded |
| :---: | :---: |
| <img src="/assets/screenshots/bbc/bbc-article2-basic.png" alt="BBC Article 2 - Basic" width="600"/> | <img src="/assets/screenshots/bbc/bbc-article2-expanded.png" alt="BBC Article 2 - Expanded" width="600"/> |
29 changes: 29 additions & 0 deletions docs/en/screenshots/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Screenshots

These are showcases for our browser plugin.

## Showcases

- [BBC](bbc.md)
- [Tagesschau](tagesschau.md)

## AI Configuration

The following setup was used to generate these examples:

- **Hardware**: Mac Mini M1 (16GB RAM), running macOS Tahoe 26.2
- **Software**: [LM Studio](https://lmstudio.ai/) 0.3.39
- **Model**: [meta-llama-3.1-8b-instruct](https://huggingface.co/lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF)

The system utilizes these [Prompts](https://github.com/deframer/news-deframer/tree/main/pkg/think/prompts/).

**Quote:** *"You are a strictly objective, neutral media analyst and news editor. Your task is to analyze texts (title and description) for journalistic quality, bias, and sensationalism, and to create a neutral version. You must provide specific, concise reasons for every assessment and correction, culminating in an overall summary. [...]"*

This prompt directs the AI to maintain strict objectivity and political neutrality.

*Note: While the LLM performance on the M1 chip is modest (approx. 26s per request), it provides a cost-effective and efficient local solution.*

```txt
level=DEBUG msg="openai request duration" duration=26.833331235s
level=DEBUG msg="openai token usage" prompt_tokens=1470 completion_tokens=303 thoughts_tokens=0 total_tokens=1773
```
23 changes: 23 additions & 0 deletions docs/en/screenshots/tagesschau.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Tagesschau

- RSS feed `https://www.tagesschau.de/index~rss2.xml`

## Portal

**Recommendation**: A score of 50% or higher serves as a warning. It indicates the use of speculation, framing, or sensationalism. We recommend avoiding the original title and description entirely and seeking more objective sources. This suggests that professional techniques are being intentionally employed to manipulate your perception.

<img src="/assets/screenshots/tagesschau/tagesschau-portal.jpg" alt="Tagesschau Portal" width="1000"/>

## Article

Article 1

| Basic | Expanded |
| :---: | :---: |
| <img src="/assets/screenshots/tagesschau/tagesschau-article1-basic.png" alt="Tagesschau Article 1 - Basic" width="600"/> | <img src="/assets/screenshots/tagesschau/tagesschau-article1-expanded.png" alt="Tagesschau Article 1 - Expanded" width="600"/> |

Article 2

| Basic | Expanded |
| :---: | :---: |
| <img src="/assets/screenshots/tagesschau/tagesschau-article2-basic.png" alt="Tagesschau Article 2 - Basic" width="600"/> | <img src="/assets/screenshots/tagesschau/tagesschau-article2-expanded.png" alt="Tagesschau Article 2 - Expanded" width="600"/> |
43 changes: 43 additions & 0 deletions docs/en/todo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Status & Todo

## Core

- [x] Basic RSS Proxy
- [x] Polling and auto updating of feeds
- [x] Dummy LLM support (zero wait time, zero cost, developer friendly)
- [x] ChatGPT / Generic OpenAI LLM support / [Local](../assets/screenshots/lmstudio-rtx3060.png) e.g. LM-Studio
- [x] Grok LLM support (simply use OpenAI)
- [x] Gemini LLM support
- [x] Support filtering the RSS Proxy result with a min rating
- [x] Enhance the parsing of items e.g. media / thumbnails etc.
- [x] Enhance the handling of exotic feeds e.g. the bbc uses a different feed url then the item URLs.
- [x] Move to <https://github.com/deframer>
- [ ] Handle empty items / special items e.g. special video news feeds / ads
- [ ] Fix support for multiple concurrent workers
- [ ] Valkey Cache (read through)
- [ ] Make a public instance

## Webbrowser Plugin

- [x] Webbrowser Plugin (make deframer act as an Ad-Blocker but for bad news)
- [x] Updated the Browser Plugin Manifest to V3.
- [x] Webbrowser Plugin enable/disable
- [x] Webbrowser Plugin icon
- [x] Webbrowser Plugin theme support
- [x] Publish the Browser Plugin to Chrome Store (Waiting for Test)
- [x] Webbrowser Plugin i18n
- [ ] Webbrowser Plugin show more data (missing: author, category)
- [x] pubDate
- [ ] Webbrowser Plugin i18n support more languages
- [ ] Webbrowser Plugin add tabs or sections
- [ ] Webbrowser Plugin Admin UI enhancement e.g. show the supported domains / disable the plugin etc.
- [ ] Try to get a Favicon / Logo from somewhere

## Website

- [x] Website <https://deframer.github.io/>
- [ ] Video

## Future ideas

- Implement Trend Mining to broaden user perspectives. Many users are confined to a small set of feeds, creating "blind spots" regarding important local or global events. By visualizing what others are reading, we can help users discover relevant content outside their usual bubble. This approach may be based on the findings in this [PhD Thesis](https://refubium.fu-berlin.de/bitstream/handle/fub188/7212/streibel-diss-online-1.pdf?sequence=1&isAllowed=y).
Loading