Doku

Wie Reuse arbeitet

Verhalten, Schnittstellen und die Entscheidungen dahinter. Das Programm selbst bleibt Closed Source: was hier an Code steht, ist ausschliesslich das, was du eingibst.

Version 1.0.0Windows 10 und 11Stand: 4. August 2026
Arbeitsbereich

Medien-Scraper

Adresse einwerfen, Tiefe wählen, scannen. Zurück kommt eine sortierbare Liste mit Typ, Grösse und Auflösung, und zwar schon, während der Scan noch läuft.

Seiten, die nachladen

Mit eingeschaltetem JavaScript-Rendering findet der Scanner auch Medien, die im Quelltext gar nicht stehen. Drei Bauarten werden erkannt:

  • Lazy Loading: die Seite wird in Schritten durchgescrollt, damit die Beobachter am Viewport auslösen.
  • Endlos-Scroll: am Seitenende wird gewartet, bis neue Blöcke da sind.
  • „Mehr laden“-Knöpfe: werden an Beschriftung und Klassennamen erkannt und gedrückt.

Schluss ist, wenn zwei Runden nacheinander nichts Neues bringen, nach einer einstellbaren Zahl Durchgänge oder wenn die Zeitgrenze je Seite erreicht ist. Bei einem Endlos-Feed bestimmen diese Zahlen, wo Schluss ist; ohne sie liefe der Scan ewig.

Auflösungen, ohne eine Datei zu laden

Ein Hintergrundlauf liest von jeder Datei nur den Dateikopf, 64 KB per Range-Anfrage. Daraus kommen Breite, Höhe und die Frage, ob sich etwas bewegt. Die Liste bekommt so eine Spalte „Auflösung“, ohne dass eine einzige Datei vollständig geholt wird.

  • PNG, JPEG, GIF, WebP und BMP, reine Kopf-Analyse ohne Bildbibliothek.
  • Videos zählen mit: bei MP4 und MOV stehen die Masse im Kopfblock. Liegt der Index am Dateiende statt vorn, holt der Scanner zusätzlich die letzten 256 KB.
  • Ein animiertes WebP ist der Sache nach ein GIF und wandert automatisch dorthin, ebenso APNG. Unter „Bilder“ stehen dann wirklich nur Standbilder.

Smart Cache

Gemerkt werden zwei Dinge: was auf einer Seite gefunden wurde und welche Auflösung jede Datei hat. Beim nächsten Scan derselben Adresse steht die Liste sofort da, mit Altersangabe. Der Scan läuft dahinter weiter und ersetzt sie. Der Speicher überbrückt die Wartezeit, er ersetzt den Scan nicht.

Gemessen an einer Seite mit 40 Dateien: 40 Abrufe beim ersten Lauf, 0 beim zweiten. Behalten werden 150 Seiten und 60 000 Auflösungen, Einträge älter als 30 Tage fallen beim Laden weg. Ausgeschaltet wird nicht mehr gelesen, aber weiter geschrieben.

Herunterladen mit Wiederaufnahme

Dateien
werden als Teilstück geschrieben und erst am Ende an ihren Platz gelegt. Beim zweiten Versuch wird per Range: bytes=…- nach dem Rest gefragt. Antwortet der Server nicht mit 206, kann er es nicht, dann wird von vorn geladen statt eine Datei aus zwei Anfängen zu bauen.
Streams
laufen mit Fortsetzung: die Zwischendatei bleibt beim Abbruch liegen und wird weitergeführt. Ein Abbruch bei Minute 40 heisst nicht mehr, wieder bei null anzufangen.
Ohne Wartezeit
Wiederholtes wird in den laufenden Schwung eingereiht, während die übrigen weiterladen.
Aufräumen
Was länger als sieben Tage als Teilstück liegt, wird beim nächsten Download weggeräumt.

Videos

Chromium kommt ohne proprietäre Codecs, ein <video> mit H.264 bliebe im eingebauten Browser schwarz. Videos laufen deshalb über einen eigenen Player mit FFmpeg-Backend für H.264, H.265, AAC und MP3. Wehrt sich ein Server gegen direktes Streamen, holt der Player die ersten paar Megabyte und zieht daraus ein Standbild aus Sekunde 3, damit man sieht, worum es geht, bevor man lädt.

Arbeitsbereich

Lead-Recherche

Branche, Ort, Land und Anzahl eingeben. Heraus kommt eine Liste mit Firmenname, Adresse, Telefon, E-Mail, Webseite, echter Bewertung und einem Score mit Begründung.

Tempo und Menge

Gemessen an „Baugewerbe / Handwerk“ in Zürich, 120 angeforderte Leads:

vorhernachher
gefundene Firmen31120
Dauer26,0 s23,5 s
Zeit je Firma0,84 s0,20 s

Derselbe Lauf mit einem Thread gegen sechzehn: 75,2 s auf 23,5 s bei identischem Ergebnis. Jeder Thread bekommt eine eigene HTTP-Sitzung.

Quellen

Gearbeitet wird von oben nach unten. Sobald genug Firmen zusammen sind, hört die Suche auf, die späteren Quellen kosten also nichts, solange die früheren liefern.

QuelleLänderReiheBesonderheit
Verzeichnisse CHCH10 · 20Bewertung, Adresse und Telefon direkt aus der Trefferkarte
Verzeichnisse DEDE10 bis 24vier Portale, seitenweise gelesen
Verzeichnis ATAT10weicht auf die Region aus, wenn die Stadt keinen eigenen Pfad hat
Google Placesweltweit40 ausbraucht einen eigenen Schlüssel und kostet Geld
OpenStreetMapweltweit60strukturiert statt geparst, ODbL-lizenziert
Web-Indexweltweit90 · 95Auffangnetz, verwirft Ranglisten und Portale

OpenStreetMap liefert als einzige Quelle strukturiert statt geparst: Telefon, E-Mail, Webseite und Adresse stehen dort als Felder. Dafür kennt sie keine Bewertungen, und bei vielen Einträgen fehlen Kontaktdaten. Deshalb darf sie höchstens 60 % des Kontingents belegen; der Überhang wird zurückgestellt und am Ende nachgereicht, falls Platz bleibt.

Firmen-Webseiten auslesen

Nach dem Verzeichnis wird die Webseite der Firma geöffnet, denn im DACH-Raum steht die E-Mail fast immer auf einer Kontakt- oder Impressumsseite. Die Kandidaten werden aus den Links der Startseite gefiltert statt geraten: je Gruppe ein Link, und zwar der mit dem kürzesten Pfad. Abgebrochen wird, sobald E-Mail und Telefon stehen, real sind das knapp zwei Abrufe je Firma statt der erlaubten vier.

Verschleierte Adressen werden aufgelöst, soweit die Kodierung bekannt ist: name (at) firma [dot] ch, HTML-Entities, verbreitete Verschlüsselungen von Content-Delivery-Anbietern, umgekehrter Text und aus Skript-Bruchstücken zusammengesetzte Adressen. Das geschieht ohne JavaScript auszuführen, die Zeichenkettenteile werden nur aneinandergelegt.

Der wichtigste Filter ist der Domainabgleich. Im Impressum steht regelmässig „Umsetzung: agentur.ch, info@agentur.ch“. Ohne diese Prüfung landet die Agenturadresse als Firmenkontakt, und man schreibt seinen Mitbewerber an. Ebenso fliegen Baukasten- und Hoster-Adressen raus, und info@ wird vor webmaster@ einsortiert.

Score mit Begründung

Jeder Lead bekommt einen Wert von 0 bis 100 und eine Herleitung. Eine Zahl ohne Begründung wäre genau die Schätzung, die dieses Programm sonst überall vermeidet.

Profil „Webdesign-Akquise“
+30  keine Website gefunden
+20  nicht mobiltauglich (kein Viewport-Meta)
+15  kein HTTPS
 +5  E-Mail vorhanden
═══════════════════════════════════════
 70  von 100

Zwei Profile lassen sich über der Liste umschalten: Webdesign-Akquise (keine, defekte oder veraltete Website zählt hoch) und Kaltakquise (vollständige Kontaktdaten zählen hoch). Das Umschalten kostet keinen einzigen Abruf, denn die Signale liegen im Lead und gewichtet wird erst beim Anzeigen.

Drei Regeln halten das ehrlich:

  • Wurde eine Website nicht geprüft, wird über ihre Technik nichts behauptet, weder gut noch schlecht.
  • Bei Baukästen wird „nicht mobiltauglich“ unterdrückt, denn die sind ausnahmslos responsiv; ein fehlendes Meta wäre dort ein Messfehler.
  • Über das Copyright-Jahr wird nur geurteilt, wenn eines im Quelltext steht. Viele Seiten setzen es per JavaScript, daraus „veraltet“ zu folgern wäre eine Erfindung.

Nur neue Firmen

Läuft dieselbe Suche ein zweites Mal, werden alle Firmen übersprungen, die frühere Durchgänge schon gefunden haben. Übersprungene belegen dabei kein Kontingent: wer 25 will, bekommt 25 neue, die Suche blättert dafür von selbst weiter.

„Zahnarzt & Arztpraxis“ in Zug
Durchgang 1:  25 Firmen
Durchgang 2:  25 NEUE Firmen, 27 bereits bekannte übersprungen
              keine einzige Überschneidung mit Durchgang 1

Wiedererkannt wird nicht nur am Namen, sonst wären „Müller AG“, „MÜLLER AG“ und „Mueller AG“ drei Firmen. Es zählen ausserdem die Telefonnummer ohne Landesvorwahl, die Domain der Webseite und die E-Mail-Adresse. Stimmt eines davon überein, ist es dieselbe Firma.

Höflichkeit und Sperren

Bis zu 32 Threads gegen dasselbe Verzeichnis sind IP-Bann-Gebiet. Deshalb hält die App einen Mindestabstand je Host: der Platz in der Schlange wird unter dem Schloss reserviert, gewartet wird ausserhalb. So stellen sich viele Threads geordnet an, statt gemeinsam loszurennen.

ZieltypMindestabstandGrund
Verzeichnisse0,4 stolerant, aber nicht grenzenlos
Suchmaschinen1,5 sreagieren am schnellsten mit Prüfseiten
Karten-Abfragedienst3,0 sfreiwillige Infrastruktur
Ortsauflösung1,1 sVorgabe der Nutzungsbedingungen
Firmen-Webseitenkein Taktjeder Host wird genau einmal berührt

Eine Schutzmassnahme wird nie umgangen. Auf 403, 429 oder eine Prüfseite folgt kein Nachdrücken, sondern Zurückweichen: langsamer werden, Ausgang wechseln, notfalls die Quelle für diesen Durchgang ruhen lassen. Es wird kein Captcha gelöst.

Bewertungen

Es werden keine Werte geschätzt. Eine Bewertung erscheint nur, wenn sie auf der Quellseite steht. Gesucht wird zuerst im Anbieter-Markup der Trefferkarte, dann in schema.org/aggregateRating auf der Detailseite, zuletzt auf der Firmen-Webseite. Anzahl und Quelle werden mitgeführt und stehen in jedem Export.

Arbeitsbereich

Eingebauter Browser

Echtes Chromium, im Aufbau nah an Chrome, aber in der Formensprache der App. Er ist kein Vorschaufenster, sondern der Browser, in dem alles landet: Links aus der Lead-Liste, Karten, Vorschauen, target="_blank".

Tabs
eigene Leiste über der Werkzeugleiste, aktiver Tab in deren Farbe. Verschiebbar, mittlere Maustaste schliesst.
Omnibox
eine Pille aus Sicherheitssymbol, Eingabe und Blocker-Schild mit Zähler. Eine Eingabe ohne Punkt wird zur Websuche.
Suchmaschine
DuckDuckGo, Google, Bing, Startpage oder Brave, dazu eine eigene Startseite.
Profil
bleibt bestehen, Logins und Cookies überleben einen Neustart. Wahlweise auch gar nicht speichern.
Datenschutz
„Do Not Track“-Header, Drittanbieter-Cookies blockieren, JavaScript und Bilder einzeln abschaltbar.
Aufräumen
Browserdaten löschen kennt Zeiträume von „letzte Stunde“ bis „gesamte Zeit“ und räumt wahlweise Verlauf, Cookies, Cache, Download-Liste und besuchte Links.

Werbe- und Trackerblocker

Vier Kategorien, einzeln zuschaltbar. Der Abgleich läuft über den Host und alle übergeordneten Domains, damit eine Unterdomain genauso greift wie die Hauptdomain.

KategorieDomainsBeispiele
Werbung82doubleclick.net, googlesyndication.com, criteo.com
Tracker & Analyse71google-analytics.com, hotjar.com, clarity.ms
Social-Widgets18connect.facebook.net, analytics.tiktok.com
Krypto-Mining11coinhive.com, cryptoloot.pro, authedmine.com

Nur Drittanbieter ist der Standard: Anfragen an die eigene Domain der Seite bleiben unangetastet, deshalb zerbrechen Seiten nicht. Ein Cosmetic-Filter blendet leere Werbeflächen aus, eigene Regeln und Ausnahmen pro Seite kommen dazu.

Erweiterungen

Klarstellung vorweg: die verwendete Engine enthält Chromiums Extension-Subsystem nicht. .crx-Dateien aus dem Chrome Web Store lassen sich damit nicht laden. Das ist eine Grenze der Engine, keine Bequemlichkeit.

Umgesetzt sind Userscripts im Greasemonkey-Format. Eine .js-Datei in den Erweiterungsordner legen, fertig:

mein-skript.user.js
// ==UserScript==
// @name         Mein Skript
// @description  Was es tut
// @version      1.0
// @match        *://*.example.com/*
// @exclude      *://example.com/admin/*
// @run-at       document-end
// ==/UserScript==

(function () {
  document.querySelectorAll("article").forEach(function (el) {
    el.style.maxWidth = "72ch";
  });
})();

Ohne @match läuft ein Skript überall. Jede Zeile im Panel hat einen Schalter und eine Pinnadel; Angeheftetes bekommt ein eigenes Symbol neben dem Puzzle-Symbol, genau wie in Chrome.

Tastenkürzel

KürzelWirkung
Strg + 1 bis 4Medien, Leads, Browser, MCP
Strg + BSeitenleiste ein- und ausklappen
Strg + PProxy-Steuerfenster
Strg + EErweiterungs-Panel
Strg + T / WTab öffnen und schliessen
Strg + H / JVerlauf und Downloads
Alt + · F5zurück und neu laden
Arbeitsbereich

MCP-Server

Die App bringt einen MCP-Server mit, an den sich Claude Code und andere MCP-Clients hängen können. Der Reiter zeigt einen fertigen Befehl zum Kopieren.

Anbinden
claude mcp add --transport http reuse http://127.0.0.1:8765/mcp \
  --header "Authorization: Bearer <Token>"

Der Reiz liegt nicht darin, dass ein Modell Webseiten abrufen kann, das kann es selbst. Sondern darin, wie: hier rendert ein echtes Chromium mit ausgeführtem JavaScript, durch den Proxy-Pool, mit aktivem Blocker und den Anmeldungen aus dem Browserprofil.

Freigaben

Der Server ist aus, und keine Gruppe ist vorausgewählt. Änderungen greifen sofort, auch bei laufendem Server: ein Werkzeug aus einer gesperrten Gruppe erscheint gar nicht erst in der Liste, und ruft ein Client es trotzdem auf, bekommt er eine Absage mit Begründung.

GruppeWerkzeugeEingriff
Seiten lesen und rendernrender_page, render_htmlliest
Lead-Recherchefind_leadsliest
Medien findenscan_medialiest
Proxysproxy_status, proxy_rotateliest
Dateien speicherndownload_media, export_leadsschreibt auf die Platte
Browser steuernbrowser_open, browser_click, browser_eval und weiterehandelt in deinem Namen

Jeder Zugriff steht im Protokoll des Reiters, mit Zeitpunkt, Werkzeug und Ergebnis.

Sicherheit

Gebunden ausschliesslich an 127.0.0.1, jede Anfrage braucht das Token aus dem Reiter, fremde Origin-Angaben werden abgewiesen. Aus dem Netz ist der Server nicht erreichbar. Das Token lässt sich jederzeit neu erzeugen, verbundene Clients müssen sich dann neu anmelden.

Warum es kein Screenshot-Werkzeug gibt

Die Engine reicht den Seiteninhalt am Zeichenpuffer vorbei direkt an den Compositor, ein Abgreifen liefert deshalb ein leeres Bild. Geprüft wurde das mit unsichtbarer Ansicht, ausserhalb des Bildschirms, mit Deckkraft 0 und mit einem sichtbaren Tab, überall einfarbig. Ein Werkzeug, das mal ein leeres Bild zurückgibt, wäre schlechter als keines. render_html liefert dafür das fertige DOM nach dem JavaScript.

Netz

Proxy-Pool

Ein eigenes kleines Fenster über dem Hauptfenster, damit man während einer laufenden Suche umstellen kann, ohne die Seite zu verlassen. Erreichbar über Strg+P, das Umweg-Symbol auf der Leads-Seite oder dasselbe Symbol in der Browserleiste.

Proxys
AusDirektverbindung
20Proxys
0erreichbar

Zustand

0OK
0Fehler
20ungeprüft
0Abrufe
Rotation
Aus — direkte Verbindung
Läuft überDirektverbindung
Alle prüfen
Der Ring sagt, was gerade gilt. Darunter der Bestand, der geprüfte Zustand und die Rotationsart.
Eine Zeile je Proxy, gemischte Formate erlaubt
198.51.100.20:6754:benutzer:geheim      host:port:user:pass
198.51.100.20:6754                     host:port
benutzer:geheim@198.51.100.20:6754     user:pass@host:port
198.51.100.20:6754@benutzer:geheim     host:port@user:pass
benutzer:geheim:198.51.100.20:6754     user:pass:host:port
socks5://198.51.100.20:1080            mit Schema (http/https/socks4/socks5)

Statt Doppelpunkt gehen auch Semikolon oder Leerzeichen, Passwörter dürfen selbst Doppelpunkte enthalten. Nicht erkannte Zeilen bleiben im Eingabefeld stehen, statt still verworfen zu werden.

Rotation
Aus, Fest (immer der erste funktionierende), Rotierend (reihum) oder Zufällig. Die Wahl passiert pro Anfrage, der Medien-Scanner verteilt seine Seitenaufrufe also über den Pool.
Statusprüfung
„Alle prüfen“ testet parallel und zeigt Erreichbarkeit, Latenz und Exit-IP je Eintrag. Wer dreimal hintereinander scheitert, gilt als defekt und wird übersprungen.
Browser
optional zuschaltbar. Die Engine kennt nur einen anwendungsweiten Proxy, Rotation greift dort deshalb erst bei der nächsten Navigation.
Statusleiste
Auf der Leads-Seite steht jederzeit, worüber gesucht wird: 4 Proxys · rotierend · 3 geprüft, oder eben Proxys aus, direkte Verbindung.

Der Schalter behauptet nichts Falsches. Ohne hinterlegten Proxy bleibt er auf „Aus“ und nennt den Grund, statt „An“ zu zeigen, während in Wahrheit direkt verbunden wird.

Netz

Eigenes VPN

Der VPN-Schaltraum arbeitet gegen WireGuard, und zwar gegen einen eigenen Server statt gegen einen Dienstleister. Ein Klick, und der gesamte Verkehr des Rechners geht durch den Tunnel.

5406

Ausgang: deine eigene Adresse

empfangen
gesendet
verbunden
Tunnel
sweaty
Frankfurt am Main · DE
38 MB / 20 GB
≤ 50 Mbit/s
0.0.1
Der Ring ist der Schalter. Die drei Zahlen darunter kommen aus WireGuard selbst, nicht aus einer Schätzung.

Der Zustand wird gelesen, nicht behauptet

Abgefragt wird, wann der letzte Handschlag war und wie viele Bytes durch sind. Daraus ergeben sich drei Zustände von selbst:

Aus
kein Tunneldienst vorhanden.
Verbindet
ein Dienst läuft, aber es gab noch keinen Handschlag.
Verbunden
frischer Handschlag. Erst dann steht es auch im Ring.

Deshalb steht im Ring nie „Verbunden“, wenn nichts verbunden ist: es gibt schlicht keinen Weg, das zu behaupten. Der Tunneldienst überlebt das Programm, damit die Verbindung nicht am Fenster hängt. Beim Start erkennt das Fenster einen bereits laufenden Tunnel und übernimmt ihn.

Verbrauch und Tempo je Gerät

Die Tagesmenge wird hart durchgesetzt, denn WireGuard zählt je Schlüssel. Tempolimits setzt der Server je Peer, der Client per Rechtsklick auf den Tunnel.

Tempolimits wirken immer nur ausgehend. Windows hat keine Warteschlange für Ankommendes; was es hat, greift vor der eigenen Netzwerkkarte, und dort liegt nur, was hinausgeht. Auf dem Server bremst das den Download des Peers, im Client den eigenen Upload. Wer seinen Download begrenzen will, muss es dem Server sagen. Die Tagesmenge hat diese Einschränkung nicht.

Einrichtung über Einmal-Links

Statt Konfigurationsdateien herumzuschicken, erzeugt der Server verschlüsselte Einmal-Links. Auf der Einladungsseite steht ein Knopf „Auf diesem PC einrichten“, der mit dieser App spricht; dafür öffnet sie einen Zuhörer auf 127.0.0.1.

Der Zuhörer ist aus, bis man ihn einschaltet, geht nach 15 Minuten von selbst wieder aus und schliesst nach der ersten angenommenen Einladung sofort. Gefragt wirst immer du, und die Frage nennt die Herkunft der Seite und den Ausgang, in den der Tunnel führen würde. Von selbst geschieht nichts. Wer nur WireGuard hat, nimmt weiterhin die Datei.

Warum der Umweg: WireGuard für Windows registriert weder ein URL-Schema noch die Endung .conf, eine Webseite hat also keinen Weg hinein. Nachgesehen, nicht vermutet.

System

Technische Daten

Plattform
Windows 10 und 11, 64 Bit. Das Setup bringt alles mit, beim Empfänger muss nichts vorinstalliert sein und es braucht keine Administratorrechte.
Oberfläche
Qt, rahmenlose Fenster mit eigener Griffleiste. Alle Vektor-Symbole werden zur Laufzeit in der Themenfarbe gerendert.
Browser-Engine
eingebettetes Chromium mit eigenem, dauerhaftem Profil.
Video
eigener Player mit FFmpeg-Backend für H.264, H.265, AAC und MP3.
Themen
dunkel und hell, vollständig aus einem Token-Satz erzeugt. Es gibt keine hartkodierte Farbe im Programm.
Nebenläufigkeit
Hintergrund-Threads melden sich über Signale zurück, die Oberfläche blockiert nie. Die Threadzahl ist einstellbar und gilt für Medien- und Lead-Suche.
Speicherorte
Einstellungen, Suchverlauf und Erweiterungen liegen im Benutzerprofil, das Browserprofil daneben. In den Programmordner wird nie geschrieben.
Netzwerk
Alle Abrufe gehen wahlweise durch den Proxy-Pool. Es gibt keinen Rückkanal: keine Telemetrie, keine Kontopflicht, keine Nutzungsstatistik.

Das Programm ist Closed Source. Diese Seite beschreibt Verhalten, Schnittstellen und die Entscheidungen dahinter. Aller Code hier ist das, was du selbst eingibst: Anbindungsbefehle, Userscript-Köpfe, Proxy-Zeilen.

System

Bekannte Grenzen

Kein Programm kann alles, und ein Prospekt, das nur Stärken kennt, hilft niemandem bei der Entscheidung.

Chrome-Erweiterungen
crx-Pakete gehen nicht, die Engine hat kein Extension-Subsystem. Userscripts decken den Grossteil der Fälle ab.
VPN braucht einen Server
Es ist kein Abo, sondern die Gegenstelle zu einem WireGuard-Server, den du selbst betreibst.
Tempolimits
wirken nur ausgehend. Zwei Geräte hinter demselben Anschluss sind serverseitig ausserdem nicht zu trennen.
Kein Screenshot über MCP
Die Engine gibt den fertigen Bildinhalt nicht heraus. Statt eines Werkzeugs, das manchmal Leeres liefert, gibt es gar keines.
Bewertungsabdeckung
hängt an der Quelle. Verzeichnisse liefern viel, reine Web-Index-Treffer meist gar nichts; dort bleibt die Spalte leer statt geraten.
Web-Index
liefert wenig, dafür Echtes. Ranglisten und Portale fliegen raus, bei manchen Suchbegriffen bleiben nur ein paar Treffer übrig.
Karte
braucht Internet. Adressen werden über OpenStreetMap geokodiert, ohne Treffer bleibt die Karte frei beweglich und sagt das auch.