Des pixels canvas rendus par le GPU que vous annoncez
Changer la chaîne d'un GPU est facile ; changer les pixels que ce GPU dessinerait ne l'est pas. Le pont canvas transmet les opérations canvas et WebGL à une machine qui possède réellement le GPU présenté par votre persona, puis renvoie ses pixels : une page qui dessine puis relit obtient la réponse que donnerait ce GPU.
Expérimental et à activer vous-même. La plupart des configurations n'en ont pas besoin.
Un serveur de rendu, un tunnel, une 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 3Points clés
Des opérations, pas des enregistrements
Il transmet les appels de dessin, pas une bibliothèque d'images préenregistrées : la plupart des canvas générés à la volée fonctionnent, pas seulement les sondes connues.
Les relectures qui comptent
getImageData, toDataURL, readPixels et measureText renvoient la sortie réelle de l'hôte du pont. Le bruit local est désactivé sur ce chemin ; les pixels du pont font foi.
Une politique par site
Faites passer par le pont tous les sites, seulement une liste de sites autorisés où la cohérence canvas compte, ou tous les sites sauf une liste d'exclusion.
Attendre ou continuer
Sur un cache miss à froid, block attend le pont, tandis que local sert le rendu local rapide au lieu de rester en suspens.
Désactivé tant que vous ne le configurez pas
Sans URL de pont, le rendu reste entièrement local. Si le pont est injoignable, Clearcote journalise un avertissement et bascule sur le rendu local.
Pourquoi un pont, et ce qu'il coûte
Clearcote effectue le rendu canvas et WebGL sur le GPU dont l'hôte dispose réellement. Quand un persona annonce un autre GPU, les vérifications qui comparent les pixels rendus au matériel annoncé peuvent voir la différence, et aucun logiciel ne peut faire produire à un GPU les pixels exacts d'un autre. Le pont supprime l'incohérence au lieu de la masquer : le dessin se fait sur le GPU annoncé.
Le serveur de rendu est un petit coordinateur Python installé sur la machine GPU : il y pilote un navigateur (un Chrome classique via CDP, ou un Clearcote headless qu'il lance lui-même) et rejoue les opérations transmises sur son vrai canvas. Le client ouvre le socket du pont depuis le processus de rendu (renderer) ; il a donc besoin de --no-sandbox, que le SDK ajoute quand vous définissez une URL de pont.
Cela a un vrai coût. Une relecture de pixels absente du cache du pont attend un aller-retour réseau (avec un timeout de cinq secondes avant le repli local), et chaque appel à measureText en déclenche un : gardez donc l'hôte de rendu sur le même LAN ou dans le même datacenter. Par ailleurs, l'identité canvas devient celle de l'hôte de rendu, et non celle du seed : tous les profils qui partagent un même hôte de pont partagent son hash canvas. Prévoyez donc un hôte GPU par groupe d'identités que vous voulez garder séparées.
Cas d'usage
Des personas que l'hôte ne peut pas rendre
Présentez un GPU que votre machine d'automatisation n'a pas, avec les pixels qui vont avec.
Serveurs sans GPU
Des serveurs headless qui, sinon, dessineraient via un rasterizer logiciel.
Personas mobiles
Un persona Android sur un moteur desktop, avec un rendu issu d'un matériel correspondant.
Clearcote est conçu pour la confidentialité, les tests, la recherche et l'automatisation licite. Vous êtes responsable de l'usage que vous en faites et du respect des conditions d'utilisation des sites que vous visitez.
Offres qui l'incluent
Expérimental, et inclus dans toutes les formules. C'est à vous de fournir l'hôte de rendu : une machine équipée du GPU que vous voulez présenter (un GPU Windows pour un persona Windows), joignable via un réseau privé.
Comparer les offresFAQ
Pourquoi le GPU ne peut-il pas simplement être falsifié ?
La chaîne du GPU peut l'être, et c'est ce que fait Clearcote. Mais une page peut aussi dessiner quelque chose et en relire les pixels, et ces pixels viennent du GPU qui a fait le rendu. Changer la chaîne sans changer les pixels, c'est précisément le genre de contradiction que cherchent les vérifications.
De quoi ai-je besoin pour le faire tourner ?
Une machine dotée d'un vrai GPU qui sert d'hôte de rendu (un GPU Windows pour un persona Windows ; son GPU devient l'identité canvas que présentent vos profils), et un chemin réseau privé jusqu'à elle, comme Tailscale, WireGuard ou un tunnel SSH.
Est-ce sécurisé ?
Le pont communique en WebSocket non chiffré : ne l'utilisez que sur un réseau privé ou dans un tunnel chiffré, et n'exposez jamais son port sur l'internet public. Le serveur de référence ne vérifie pas --canvas-bridge-auth : c'est donc le réseau qui fait office de contrôle d'accès.
Quels canvas passent par le pont ?
Canvas 2D et WebGL, y compris les textures WebGL générées de façon procédurale. Les sources de type image, canvas 2D, vidéo, ImageBitmap et texture 3D basculent vers le rendu local pour ce canvas : elles restent correctes, mais ne passent pas par le pont.
Aller plus loin dans la documentation
Fonctionnalités associées
Canvas, WebGL, WebGPU, audio, polices, écran et matériel dérivés d'un seul seed dans le moteur C++, avec la locale et le fuseau horaire assortis : chaque surface concorde avec toutes les autres.
Un seed par compte : le même appareil à chaque session, un autre pour le compte suivant, avec des cookies et un stockage qui persistent d'une exécution à l'autre.
Exécutez Clearcote comme endpoint CDP permanent depuis l'image Docker officielle, serve() ou une CLI, et connectez n'importe quel framework sans toucher au code.
Le handshake TLS et les trames HTTP/2 viennent de la pile réseau propre à Chromium, et les champs dépendant de la version suivent la version de Chrome annoncée par votre persona.
À lire aussi
Essayer Clearcote
S'utilise tel quel avec Playwright et Puppeteer, cohérent jusqu'au handshake TLS, avec un build open source comme point de départ.
Gratuit pour un navigateur avec GitHub. Sans carte.