- Spegel ist ein Browser, der HTML-Webseiten in LLM-Prompts umwandelt und sie im Terminal als Markdown anzeigt
- Auf Basis von Benutzer-Prompts lassen sich Seiten in Echtzeit individuell umformen, sodass nur die wichtigen Informationen kompakt angezeigt werden
- Das Kernprinzip ist HTML-Crawling → Verarbeitung per LLM-Prompt → Umwandlung und Ausgabe als Markdown
- Mit einer auf Textual basierenden TUI bietet es eine intuitive und leichtgewichtige Terminal-Oberfläche; Ansichten und Prompts lassen sich per Konfigurationsdatei einfach verwalten und in Echtzeit ändern
- Anders als bestehende Terminal-Browser wie Lynx, Links2 oder Browsh ist es auf benutzerindividuelle Inhaltsoptimierung mit LLMs spezialisiert
- Die Installation ist einfach per
pip install spegel möglich; als Open Source eignet es sich gut für verschiedenste Experimente und Erweiterungen
Projektüberblick und Merkmale
- Spegel ist eine Art Webbrowser, der im Terminal läuft, indem es HTML an ein LLM übergibt und die Seite mit benutzerdefinierten Prompts neu zusammensetzt
- Die Ausgabe wird in Markdown umgewandelt und in einer auf Textual basierenden Terminal-UI intuitiv dargestellt
- Minimalistisches Design ohne JS-Unterstützung, verarbeitet nur GET-Anfragen
- Anpassbare LLM-Prompts ermöglichen verschiedene Transformationsansichten (z. B. Rezeptzusammenfassungen, Hervorhebung wichtiger Aktionen)
Personalisierung und Anwendungsbeispiele
- Prompts und Ansichten lassen sich frei über die Benutzerkonfiguration (
~/.spegel.toml) verwalten
- Beispiele:
- Aus Rezepten nur Zutaten und die wichtigsten Schritte extrahieren
- Komplexe Erklärungen in einen einfachen ELI5-Stil umwandeln
- Bei Bedarf mehrere Ansichten gleichzeitig registrieren und schnell zwischen ihnen wechseln
Funktionsweise
- Spegel holt HTML und übergibt es zusammen mit den Prompts aus der Konfigurationsdatei an ein LLM
- Das LLM-Ergebnis wird in Markdown umgewandelt und über Textual im Terminal gerendert
- Prompts und Ansichten können auch während der Navigation in Echtzeit angepasst werden
- Die Ergebnisse werden zeilenweise gestreamt; eine Pufferverarbeitung verhindert Fehler im Markdown-Format
Unterschiede zu bestehenden Terminal-Browsern
- Lynx, Links2 und Browsh zeigen im Terminal nur die HTML-Struktur selbst an
- Spegel ist auf LLM-basierte Umwandlung spezialisiert, um unnötige Informationen zu entfernen und optimierte Ansichten bereitzustellen
- Moderne Websites sind stark von CSS und JS abhängig und wirken im Terminal schnell überladen; Spegel extrahiert nur die Kerninhalte und verbessert so Fokus und Zugänglichkeit
Installation und Verwendung
- Einfache Installation per pip:
pip install spegel
- Ausführen:
spegel <URL>
- Eine Anpassung der Konfigurationsdatei (
~/.spegel.toml) ist erforderlich; Beispiele siehe GitHub
- Quellcode und Beiträge: https://github.com/simedw/spegel
Hinweise
- Noch im Proof-of-Concept-Stadium, daher mit einigen unvollständigen Funktionen und rauen Kanten
- Keine Unterstützung für POST-Anfragen; Erweiterungsideen wie Formulareingaben sind für die Zukunft angedacht
- Eher kein Ersatz für bestehende Terminal-Browser, sondern stark als Experiment zur inhaltsbezogenen Personalisierung auf Basis von LLM+TUI angelegt
2 Kommentare
Hacker-News-Kommentar
Ich finde diese Technik eine wirklich interessante Idee. Sie wird den Browser zwar nicht vollständig ersetzen, aber durch die Kombination aus deterministischer Suche und Prompts könnte sie eine völlig andere Art des Webbrowsings hervorbringen. Als Kommandozeilen-Tool würde sie meiner Meinung nach noch besser passen.
Als nächsten Schritt stelle ich mir eine Funktion vor, die mehrere „Tabs“ gleichzeitig behandelt: zum Beispiel Tab 1 mit der Berichterstattung von Nachrichtenquelle A, Tab 2 mit Nachrichtenquelle B und Tab 3 mit Wikipedia, um solche Materialien zusammenzufassen und Referenzlinks zu erzeugen. Ich frage mich allerdings, ob es überhaupt ein Modell gibt, das stabil genug ist, um so einen Workflow zu unterstützen. Selbst aktuelle SOTA-Modelle wirken in dieser Hinsicht begrenzt.
So eine Funktion, bei der man Berichte mehrerer Medien auf einen Blick sieht, zusammenfasst und mit Referenzen versieht, ist im Grunde das, was Ground News macht. Ich habe nichts mit ihnen zu tun, ich habe sie nur in einem Kurzgesagt-Video als Sponsor erwähnt gesehen. In der UI kann es natürlich deutliche Unterschiede geben.
Ich würde selbst dann, wenn mehrere Tabs/Views gleichzeitig angezeigt werden, eher nur innerhalb derselben Quelle arbeiten. Zum Beispiel könnte ein Tab die für die CLI optimierte Originaldarstellung zeigen und ein anderer sich ausschließlich auf Fact-Checking konzentrieren, also Belege über Google oder Brave suchen. Solche Experimente klingen sehr spannend.
Im Grunde heißt das: Mit voller Kraft LLM-basierten SEO-Spam erzeugen, damit ein anderes LLM ihn grob zusammenfasst und wieder ausspuckt. Was für eine großartige Zukunft.
Dass als erstes Beispiel das Extrahieren nur des Rezepts von einer bekannten Rezeptseite auftaucht, wirkt auf mich wie ein absolut klassischer Moment. Ich würde so ein Projekt spontan weiterempfehlen, es wirkt wirklich originell.
Für mich ist das wieder ein Beispiel dafür, wie der LLM-Hype etwas, das es schon gab, neu interpretiert und dabei viel schlechter und nicht deterministisch macht. Standardisierte Strukturen wie schema.org/Recipe gab es bereits.
Interessant ist, dass bei der Rezept-Extraktion Inhalte, Zutaten oder Mengenangaben zufällig verändert werden. Ich finde, dass sich die Natur von LLMs in so einem Mikrokosmos sehr gut zeigt, nur eben in eine völlig andere Richtung, als die meisten Kommentare hier es erwarten.
Es gibt bereits Erweiterungen, die ganz ohne LLM nur das Rezept deterministisch extrahieren. Zum Beispiel zeigt die Chrome-Erweiterung Recipe Filter das Rezept in einem Pop-up an, wenn sie eines auf der Seite erkennt.
Mir gefällt, dass ein LLM dazwischengeschaltet wird und damit sowohl den jüngsten Trend zu SEO-optimiertem Schreiben bei Google als auch die SEO-Struktur selbst umgeht. Alles Überflüssige zu entfernen und nur das Rezept herauszufiltern, ist meiner Meinung nach ein Anwendungsfall, der sehr gut zu LLMs passt. Ich habe das Gefühl, dass wir künftig mehr Beispiele sehen werden, in denen LLMs aktiv als Filter eingesetzt werden. Natürlich wäre es schön, wenn man Rezepte direkt aus dem HTML extrahieren könnte, aber der SEO-Krieg ist inzwischen so extrem, dass das realistisch kaum noch möglich ist.
Wenn LLMs dazu dienen sollen, alles Überflüssige zu entfernen, sollte man auch bedenken, dass sie ein Rezept unvorhersehbar verändern können. Ich verstehe nicht, wie man in einem fehlertoleranzfreien Umfeld solcher probabilistischen Software vertrauen kann.
Ich habe diese Zukunft schon vor Jahren erwartet. Es gibt bereits LLM-Tools mit eingebauter Suche, und die Möglichkeit, mehrere Suchvorgänge miteinander zu verknüpfen, ist wirklich mächtig. Spegel funktioniert aber völlig anders. Ich glaube, der Werbeblocker der Zukunft wird ein kleines, effizientes lokales LLM sein. Damit ließe sich zum Beispiel eine Timeline chronologisch sortieren, die UI verändern oder nur bestimmte Elemente anzeigen. Auch minderwertige Kommentare könnte man automatisch ausblenden, wenn das LLM zwischengeschaltet als Proxy oder Agent arbeitet. Ich habe das Gefühl, dass diese Entwicklung für Werbetreibende ziemlich unangenehm werden dürfte.
Man sollte auch bedenken, dass ein LLM beim Webbrowsing möglicherweise Millionen von Tokens pro Minute verarbeiten müsste und dass die Rechenkosten entsprechend hoch sind.
Ein LLM erzeugt überflüssige Dinge, und ein weiteres LLM entfernt dann wieder Überflüssiges. Es ist ein Kreislauf, der scheinbar ohne Missverständnisse weiterläuft.
Ich denke, es könnte funktionieren, mit einem weniger komplexen Modell — meiner Meinung nach sogar auf LSTM-Basis — den DOM zu durchlaufen, nur die benötigten Teile auszuwählen und in einer Datenstruktur zu sammeln, die direkt im Browser dargestellt werden kann. Mit der vom Autor bereits aufgebauten LLM-basierten Toolchain ließen sich vermutlich auch die Trainingsdaten leicht erzeugen.
Viele scheinen zu übersehen, dass HTML nur der Anfang ist. Wenn man eine Webseite in eine andere Sichtweise umwandeln kann, dann lässt sich im Grunde jede Eingabe transformieren, die das Modell verarbeiten kann: PDFs, ZIP-Dateien mit Bildern, große JSON-Dateien und so weiter. Entscheidend ist am Ende nicht der HTML-Input, sondern die erzeugte View als Ausgabe.
Vorschlag, bei spegel eine
-p-Option hinzuzufügen:also eine Funktion, mit der sich per Prompt nur die gewünschten Informationen extrahieren lassen.
Ich denke, wenn man nicht bei jedem Seitenaufruf alles neu umschreibt, sondern den Inhalt nach einem Besuch einmal in Markdown umwandelt und dann saubere Versionen miteinander teilt, könnte man den Rechenaufwand für das ständige Neuberechnen verringern.
Da die Bedürfnisse und das Vorwissen jedes Nutzers unterschiedlich sind, wird selbst bei noch so sauber aufbereitetem gemeinsamem Material am Ende wohl immer ein individueller Bearbeitungsschritt bleiben. Ein globaler Deduplizierungs-Cache wie ein P2P-Cache auf Basis von IPFS könnte aber bei Datenerhalt, Verfügbarkeit und Ressourcenschonung helfen.
Cache-Header dienen dazu, dem Client mitzuteilen, wie lange Informationen gecacht werden dürfen. Ich fände es sinnvoll, clientseitig zusätzlich eine Cache-Schicht einzubauen, die solche Header beachtet.
Wenn ein konsistentes Layout das Ziel ist, könnte man dem Modell auch das Markdown-Ergebnis der letzten Seite als Beispiel mitgeben, also als One-Shot-Beispiel.
Das Projekt verfolgt ja das Ziel einer „personalisierten promptbasierten View“, daher könnte man zumindest die Ergebnisse des Standard-Prompts zwischenspeichern und wiederverwenden.
Ich fand das ein wirklich hervorragendes POC, und es hat einiges mit der Chrome-Erweiterung „reader view“ gemeinsam, die ich oft benutze.
Link zur reader-view-Erweiterung
Die Idee ist ausgesprochen cool und hat auch aus Sicht der Barrierefreiheit großes Potenzial.
Es gibt ein altes Video, in dem mein inzwischen eingestellter KI-Agent die Echtzeit-Umwandlung von Webseiten demonstriert.
Demo: HN in My Little Pony umwandeln (Video)
Das Ergebnis ist ungefähr ab Sekunde 37 zu sehen.
Ich habe auch eine Open-Source-Chrome-Erweiterung gebaut; wer neugierig ist, kann sich ChromeGPT ansehen.
spegel -p "extract only the product reviews" > REVIEWS.mdWenn es nur diese Option gäbe, würden mir dafür allerhand Einsatzmöglichkeiten einfallen, aber offenbar gibt es sie noch nicht.