Zum Inhalt springen
Experimentell · Canvas · WebGL

Canvas-Pixel von der GPU, die Sie angeben

Einen GPU-String zu ändern ist leicht, die Pixel, die diese GPU zeichnen würde, nicht. Die Canvas-Bridge leitet Canvas- und WebGL-Operationen an einen Rechner weiter, der die GPU Ihrer Persona wirklich hat, und gibt dessen Pixel zurück. Eine Seite, die zeichnet und zurückliest, bekommt so die Antwort, die diese GPU geben würde.

Experimentell und optional. Die meisten Setups kommen ohne aus.

Ein Render-Server, ein Tunnel, eine Option

# on the machine with the real GPU (a Windows GPU for a Windows persona), next to a regular Chrome
# started with --remote-debugging-port=9222 --user-data-dir=<a separate folder>
# (Chrome ignores the port on its default profile)
pip install playwright
python tools/canvas-bridge-server/server.py \
    --backend cdp \
    --cdp-url ws://127.0.0.1:9222/devtools/browser/... \
    --port 8443
# it prints the render GPU's renderer string: use it in step 3

Highlights

Operationen statt Aufzeichnungen

Weitergeleitet werden die Zeichenaufrufe, keine Bibliothek vorab aufgezeichneter Bilder. Deshalb funktionieren die meisten spontan erzeugten Canvases, nicht nur bekannte Probes.

Die Readbacks, auf die es ankommt

getImageData, toDataURL, readPixels und measureText liefern die echte Ausgabe des Bridge-Hosts. Lokales Rauschen entfällt auf diesem Weg; die Pixel der Bridge sind die Ground Truth.

Regeln pro Website

Alle Websites über die Bridge leiten, nur eine Allow-List von Websites, bei denen Canvas-Kohärenz zählt, oder alle außer denen auf einer Deny-List.

Warten oder weitermachen

Bei einem Cache-Miss im kalten Cache wartet block auf die Bridge; local liefert stattdessen das schnelle lokale Rendering und bleibt nicht hängen.

Aus, solange Sie nichts setzen

Ohne Bridge-URL bleibt das Rendering vollständig lokal. Ist die Bridge nicht erreichbar, protokolliert Clearcote eine Warnung und fällt auf lokales Rendering zurück.

Warum eine Bridge – und was sie kostet

Clearcote rendert Canvas und WebGL auf der GPU, die der Host tatsächlich hat. Gibt eine Persona eine andere GPU an, können Prüfungen, die gerenderte Pixel mit der angegebenen Hardware vergleichen, den Unterschied sehen – und keine Software der Welt bringt eine GPU dazu, exakt die Pixel einer anderen auszugeben. Die Bridge beseitigt die Abweichung, statt sie zu verstecken: Gezeichnet wird auf der GPU, die angegeben ist.

Der Render-Server ist ein kleiner Python-Koordinator auf dem GPU-Rechner, der dort einen Browser steuert (ein normales Chrome über CDP oder ein Headless-Clearcote, das er selbst startet) und die weitergeleiteten Operationen auf dessen echtem Canvas wiedergibt. Der Client öffnet den Bridge-Socket aus dem Renderer-Prozess und braucht deshalb --no-sandbox; das SDK ergänzt das Flag, sobald Sie eine Bridge-URL setzen.

Das hat echte Kosten. Ein Pixel-Readback, der den Cache der Bridge verfehlt, wartet auf einen Netzwerk-Roundtrip (mit fünf Sekunden Timeout, bevor der lokale Fallback greift), und jeder measureText-Aufruf löst einen aus. Halten Sie den Render-Host deshalb im selben LAN oder Rechenzentrum. Außerdem wird die Canvas-Identität zu der des Render-Hosts, nicht des Seeds: Alle Profile, die sich einen Bridge-Host teilen, teilen auch dessen Canvas-Hash. Betreiben Sie also einen GPU-Host pro Gruppe von Identitäten, die getrennt bleiben sollen.

Wofür es eingesetzt wird

Personas, die der Host nicht rendern kann

Präsentieren Sie eine GPU, die Ihr Automatisierungsrechner nicht hat – mit passenden Pixeln.

Server ohne GPU

Headless-Server, die sonst über einen Software-Rasterizer zeichnen würden.

Mobile Personas

Eine Android-Persona auf einer Desktop-Engine, gerendert auf passender Hardware.

Clearcote ist für Datenschutz, Tests, Forschung und rechtmäßige Automatisierung gebaut. Sie sind dafür verantwortlich, wie Sie es einsetzen, und dafür, die Nutzungsbedingungen der Websites einzuhalten, die Sie besuchen.

In welchem Tarif enthalten

Experimentell und in jedem Tarif enthalten. Den Render-Host stellen Sie selbst: einen Rechner mit der GPU, die Sie präsentieren wollen (eine Windows-GPU für eine Windows-Persona), erreichbar über ein privates Netzwerk.

Tarife vergleichen

FAQ

Warum lässt sich die GPU nicht einfach spoofen?

Der GPU-String schon, und das macht Clearcote auch. Eine Seite kann aber auch etwas zeichnen und die Pixel zurücklesen, und diese Pixel stammen von der GPU, die gezeichnet hat. Den String zu ändern, ohne die Pixel zu ändern, ist genau die Art von Widerspruch, nach der Prüfungen suchen.

Was brauche ich für den Betrieb?

Einen Rechner mit echter GPU als Render-Host (eine Windows-GPU für eine Windows-Persona; seine GPU wird zur Canvas-Identität, die Ihre Profile präsentieren) und eine private Netzwerkverbindung dorthin, etwa Tailscale, WireGuard oder einen SSH-Tunnel.

Ist das sicher?

Die Bridge spricht unverschlüsseltes WebSocket. Betreiben Sie sie deshalb nur über ein privates Netzwerk oder einen verschlüsselten Tunnel, und machen Sie den Bridge-Port nie im öffentlichen Internet erreichbar. Der Referenzserver prüft --canvas-bridge-auth nicht, die Zugriffskontrolle ist also Ihr Netzwerk.

Welche Canvases laufen über die Bridge?

Canvas 2D und WebGL, einschließlich prozedural erzeugter WebGL-Texturen. Bei Bild-, 2D-Canvas-, Video-, ImageBitmap- und 3D-Texturquellen fällt das betreffende Canvas auf lokales Rendering zurück: Das Ergebnis bleibt korrekt, läuft aber nicht über die Bridge.

Mehr dazu in der Dokumentation

Verwandte Funktionen

Clearcote ausprobieren

Direkt einsetzbar mit Playwright & Puppeteer, kohärent bis hinunter zum TLS-Handshake, mit einem Open-Source-Build als Ausgangspunkt.

Mit GitHub kostenlos für einen Browser. Ohne Kreditkarte.