Sprachen: English · 繁體中文 · 简体中文 · 日本語 · 한국어 · Español · Français
Margin Read ist eine datenschutzorientierte Browser-Erweiterung fuer zweisprachige Webseitenuebersetzung.
Margin ersetzt den Originaltext nicht. Es fuegt die Uebersetzung unter den passenden Quelltextbloecken ein, damit Leser beide Versionen vergleichen koennen, ohne den Seitenkontext zu verlieren.
Repository: https://github.com/withmargin/margin-read
Margin ist ein fruehes MVP fuer Chrome und Chromium-Browser mit Manifest V3.
Die Erweiterung ist fuer normale Artikelseiten, alte textlastige Seiten und einige dynamische Seiten nutzbar, befindet sich aber noch in aktiver Entwicklung. Auf sehr interaktiven Web apps, ungewoehnlichen Layoutsystemen oder Websites, die das DOM stark umschreiben, kann es noch raue Kanten geben.
- Uebersetzt die aktuelle Webseite aus dem Extension-Popup.
- Erhaelt Originaltext und fuegt Uebersetzungen unter den passenden Quellbloecken ein.
- Erkennt lesbare Textbloecke wie Absaetze, Ueberschriften, Listenelemente und Zitate.
- Behandelt alte
table-,font- undbr-getrennte Seiten. - Umgeht typische Nicht-Lesebereiche wie Navigation, Formulare, Buttons, Codebloecke, versteckten Text und Seiten-UI.
- Verwendet vom Nutzer konfigurierte provider endpoints und API keys.
- Unterstuetzt OpenAI, Anthropic Claude und Google Gemini provider adapters.
- Unterstuetzt lokale OpenAI-compatible runtimes wie LM Studio, Ollama, llama.cpp server und omlx (Apple Silicon).
- Ruft provider model lists von der Optionsseite ab.
- Bietet integrierte oder hervorgehobene Uebersetzungsanzeige.
- Optional einen schwebenden Seitenbutton anzeigen, der die Uebersetzung erst nach einem Nutzerklick startet.
- Erlaubt persistenten, sitzungsbasierten oder deaktivierten Uebersetzungs-Cache.
- Zeigt Popup-Diagnosen fuer Texterkennung, Queue-Zustand und provider-Fehler.
- Beobachtet dynamisch eingefuegte Inhalte.
- Optimiert X timeline cards und longform article pages, indem lesbarer Inhalt gezielt uebersetzt und Profilnamen, Zaehler, Medien und Controls vermieden werden.
Margin enthaelt keine PDF-Uebersetzung, EPUB-Uebersetzung, Untertitel-Uebersetzung, OCR, Eingabefeld-Uebersetzung, Cloud-Sync, Accounts, Social Features, Standard-telemetry oder ein offizielles bezahltes Uebersetzungskontingent.
Margin ist noch nicht in einem Browser Extension Store paketiert. Lade es als unpacked extension:
corepack enable
pnpm install
pnpm buildDann:
- Oeffne
chrome://extensions. - Aktiviere Developer mode.
- Waehle Load unpacked.
- Waehle das erzeugte
apps/extension/dist/Verzeichnis. - Oeffne Margin options.
- Konfiguriere provider, API key, model, Zielsprache und Cache-Verhalten.
- Oeffne eine Webseite und klicke im Margin popup auf Translate this page.
Margin enthaelt keinen API key. Nutzer geben ihren eigenen rohen provider API key ohne Bearer Prefix an.
Eingebaute provider verwenden Standard-endpoints:
OpenAI: https://api.openai.com/v1/chat/completions
Anthropic Claude: https://api.anthropic.com/v1/messages
Google Gemini: https://generativelanguage.googleapis.com/v1beta/models
Das Endpoint-Feld wird nur fuer OpenAI Compatible / Local LLM Setups angezeigt, bei denen der Nutzer einen lokalen endpoint waehlen oder eingeben soll.
Fetch models liest verfuegbare Modelle vom gewaehlten provider:
- OpenAI:
GET /v1/models - Anthropic Claude:
GET /v1/models - Google Gemini:
GET /v1beta/models
Abgerufene Modelle erscheinen im model selector. Margin behaelt das aktuell konfigurierte Modell als Option, wenn ein provider default oder zuvor gespeichertes Modell nicht in der provider-Liste vorkommt.
Margin sendet nur ausgewaehlte Textsegmente an den konfigurierten provider. Standardmaessig wird kein vollstaendiges Seiten-HTML gesendet, kein Login benoetigt, kein Cloud-Sync genutzt und keine telemetry eingebaut.
Provider requests werden vom Extension service worker mit dem vom Nutzer konfigurierten endpoint und API key ausgefuehrt. Der Datenschutz beim provider haengt vom gewaehlten endpoint und Modell-provider ab.
API keys werden im browser extension storage gespeichert. Behandle das Browserprofil als Teil deiner vertrauenswuerdigen Umgebung.
Margin enthaelt einen optionalen X-specific detector fuer timeline cards und longform article pages. Wenn aktiviert, zielt er auf tweetText in tweet articles und lesbare Bloecke in X article views, statt alle sichtbaren Textnodes zu scannen.
Quoted posts sind standardmaessig deaktiviert und koennen in options aktiviert werden. Posts, die X bereits als uebersetzt markiert, werden standardmaessig uebersprungen, um doppelte Uebersetzung zu vermeiden.
Margin unterstuetzt lokale LLM runtimes ueber den OpenAI Compatible provider. Dieser provider verwendet die OpenAI-artige /v1/chat/completions API, erlaubt einen leeren API key und nutzt eine niedrigere Standard-concurrency fuer lokale Inferenz.
Haeufige endpoint presets:
LM Studio: http://localhost:1234/v1/chat/completions
Ollama: http://localhost:11434/v1/chat/completions
llama.cpp server: http://localhost:8080/v1/chat/completions
omlx: http://localhost:8000/v1/chat/completions
Lokalen runtime verwenden:
- Starte den lokalen model server.
- Oeffne Margin options.
- Waehle OpenAI Compatible als provider.
- Waehle ein endpoint preset oder gib die URL ein, die dein runtime anzeigt.
- Lasse API key leer, sofern dein lokales gateway keinen benoetigt.
- Klicke Fetch models und waehle ein bereitgestelltes Modell im model selector.
- Lasse Request JSON mode aktiviert, wenn unterstuetzt. Deaktiviere ihn, falls der lokale runtime das Feld
response_formatablehnt.
corepack enable
pnpm install
pnpm check
pnpm lint
pnpm check:extension
pnpm test
pnpm buildDer Build verwendet Rolldown und schreibt die unpacked extension nach apps/extension/dist/.
apps/extension/src/background/ Service worker, provider requests, settings und cache flow
apps/extension/src/content/ Seitentexterkennung, Queue und Uebersetzungseinfuegung
apps/extension/src/options/ Extension options page
apps/extension/src/popup/ Popup UI und Diagnosen
apps/extension/src/background/providers/ Provider adapters
apps/extension/src/shared/ Gemeinsame types, defaults, storage und messages
apps/extension/public/ Statische extension UI und content CSS
apps/extension/scripts/ Build und extension validation scripts
docs/ Product, roadmap, principles und threat model
Aktiviere Debug mode in Margin options, wenn eine Seite aktiv wirkt, aber keine Uebersetzungen eingefuegt werden. Das Popup zeigt Erkennungsanzahl, Queue, laufende requests, pending translations, completed translations, Fehleranzahl, letzten Fehler und ein Beispiel des erkannten Texts.
- Firefox ist noch nicht das Hauptziel.
- Site-specific DOM handling ist auf wenige hochwertige Faelle beschraenkt.
- Sehr dynamische Web apps koennen Uebersetzungsbloecke verschieben oder entfernen.
- Grosse Seiten werden in Batches uebersetzt, daher erscheinen Uebersetzungen schrittweise.
- Provider rate limits, Modellverfuegbarkeit und Ausgabequalitaet haengen vom konfigurierten provider ab.
MIT