Pixel canvas đến từ chính GPU bạn khai báo
Chuỗi GPU thì dễ đổi; pixel mà GPU đó vẽ ra thì không. Canvas bridge chuyển tiếp các thao tác canvas và WebGL tới một máy thực sự có GPU mà persona của bạn thể hiện rồi trả về pixel từ máy đó, nên một trang vẽ rồi đọc lại sẽ nhận được đúng kết quả mà GPU ấy cho ra.
Đang thử nghiệm và chỉ chạy khi bạn bật. Phần lớn cấu hình không cần đến nó.
Một render server, một tunnel, một tùy chọn
# 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Điểm nổi bật
Thao tác, không phải bản ghi
Bridge chuyển tiếp các lệnh vẽ chứ không dùng một thư viện ảnh ghi sẵn, nên hầu hết canvas được tạo động đều hoạt động, không chỉ những probe đã biết trước.
Những lần đọc lại thực sự quan trọng
getImageData, toDataURL, readPixels và measureText trả về kết quả thật từ bridge host. Noise local được bỏ qua trên đường này; pixel từ bridge là giá trị chuẩn.
Chính sách theo từng site
Đưa mọi site qua bridge, chỉ những site trong allow-list nơi tính nhất quán của canvas là quan trọng, hoặc mọi site trừ các site trong deny-list.
Chờ hay đi tiếp
Khi cache còn trống và bị miss, chế độ block sẽ chờ bridge, còn chế độ local trả về ngay bản render local nhanh thay vì đứng chờ.
Tắt trừ khi bạn cấu hình
Khi không có bridge URL, việc render diễn ra hoàn toàn ở local. Nếu không kết nối được tới bridge, Clearcote ghi log cảnh báo và quay về render local.
Vì sao cần bridge, và cái giá phải trả
Clearcote render canvas và WebGL trên GPU mà máy host thực sự có. Khi persona khai báo một GPU khác, các phép kiểm tra so sánh pixel đã render với phần cứng được khai báo có thể nhận ra sự khác biệt, và không phần mềm nào khiến một GPU xuất ra đúng từng pixel của GPU khác. Bridge loại bỏ sự sai lệch thay vì che giấu nó: việc vẽ diễn ra trên chính GPU đang được khai báo.
Render server là một coordinator Python nhỏ chạy trên máy có GPU, điều khiển một trình duyệt ở đó (Chrome thông thường qua CDP, hoặc một Clearcote headless do nó tự khởi chạy) và phát lại các thao tác được chuyển tới trên canvas thật của trình duyệt ấy. Phía client mở socket bridge từ renderer process, nên cần --no-sandbox; SDK tự thêm flag này khi bạn đặt bridge URL.
Cái giá là có thật. Một lần đọc pixel bị miss cache của bridge phải chờ một round trip qua mạng (timeout năm giây trước khi quay về render local), và mỗi lệnh measureText đều tốn một round trip như vậy, nên hãy đặt render host trong cùng mạng LAN hoặc cùng datacenter. Ngoài ra, danh tính canvas sẽ là của render host chứ không phải của seed: mọi profile dùng chung một bridge host sẽ có chung canvas hash, nên hãy dành riêng một GPU host cho mỗi nhóm danh tính mà bạn muốn tách biệt.
Mọi người dùng nó để làm gì
Persona mà máy host không render được
Thể hiện một GPU mà máy chạy automation của bạn không có, với pixel khớp tương ứng.
Server không có GPU
Server headless mà nếu không có bridge sẽ phải vẽ bằng software rasterizer.
Persona di động
Persona Android trên engine desktop, với phần render đến từ phần cứng tương ứng.
Clearcote được xây dựng cho quyền riêng tư, kiểm thử, nghiên cứu và tự động hóa hợp pháp. Bạn chịu trách nhiệm về cách mình sử dụng nó và về việc tuân thủ điều khoản của các trang web bạn truy cập.
Gói nào có tính năng này
Đang thử nghiệm, có ở mọi gói. Bạn tự cung cấp render host: một máy có GPU mà bạn muốn thể hiện (GPU Windows cho persona Windows), truy cập được qua mạng riêng.
So sánh các góiCâu hỏi thường gặp
Tại sao không đơn giản là giả mạo GPU?
Chuỗi GPU thì giả được, và Clearcote có làm điều đó. Nhưng một trang cũng có thể vẽ thứ gì đó rồi đọc lại các pixel, và những pixel đó đến từ chính GPU đã vẽ ra chúng. Đổi chuỗi mà không đổi pixel chính là kiểu mâu thuẫn mà các phép kiểm tra tìm kiếm.
Cần những gì để chạy nó?
Một máy có GPU thật làm render host (GPU Windows cho persona Windows; GPU của máy này trở thành danh tính canvas mà các profile của bạn thể hiện) và một đường mạng riêng tới máy đó, chẳng hạn Tailscale, WireGuard hoặc SSH tunnel.
Nó có an toàn không?
Bridge giao tiếp bằng WebSocket không mã hóa, nên chỉ chạy nó qua mạng riêng hoặc tunnel đã mã hóa, và tuyệt đối không mở cổng bridge ra internet công cộng. Server tham chiếu không kiểm tra --canvas-bridge-auth, nên chính lớp mạng là cơ chế kiểm soát truy cập của bạn.
Những canvas nào được đưa qua bridge?
Canvas 2D và WebGL, bao gồm cả texture WebGL sinh theo thủ tục (procedural). Với nguồn là ảnh, canvas 2D, video, ImageBitmap hay texture 3D, canvas đó quay về render local, nên kết quả vẫn đúng nhưng không đi qua bridge.
Tìm hiểu sâu hơn trong tài liệu
Tính năng liên quan
Canvas, WebGL, WebGPU, audio, font, màn hình và phần cứng được suy ra trong engine C++ từ một seed, với locale và múi giờ được đặt cho khớp, để mọi bề mặt đều nhất quán với nhau.
Mỗi tài khoản một seed: cùng một thiết bị ở mọi phiên, một thiết bị khác cho tài khoản tiếp theo, với cookie và storage được giữ lại giữa các lần chạy.
Chạy Clearcote như một CDP endpoint thường trực từ Docker image chính thức, serve() hoặc CLI, rồi kết nối bất kỳ framework nào mà không cần sửa code.
TLS handshake và frame HTTP/2 đến từ network stack của chính Chromium, và các trường phụ thuộc phiên bản theo đúng phiên bản Chrome mà persona của bạn khai báo.
Bài đọc liên quan
Dùng thử Clearcote
Thay thế drop-in cho Playwright & Puppeteer, nhất quán đến tận TLS handshake, với một bản build mã nguồn mở để bắt đầu.
Miễn phí cho một trình duyệt với GitHub. Không cần thẻ.