mirror of
https://github.com/daijro/camoufox.git
synced 2026-08-21 00:01:07 +00:00
fix(virtdisplay): keep 1x1x24 as the headless="virtual" default
Reverts the default half of4b20b77. That commit raised Xvfb's root window from 1x1x24 to 1920x1080x24 for #458, on the reasoning that a 1x1 root "breaks anything that measures the screen". That reasoning does not hold here: - screen.* never comes from the root window. It comes from the generated fingerprint, applied per context in the browser, and clamp_screen_to_display() is skipped outright for virtual displays (the `not virtual_display` guard in utils.py), so a 1x1 root cannot clamp a generated screen down to 1x1. - #458's actual symptom -- blank/dark screenshots -- does not reproduce on 152.0.4-beta.28. Measured at both geometries on the same build, same page: Xvfb 1x1x24 493 distinct colours, 57.5% dominant -> renders Xvfb 1920x1080x24 493 distinct colours, 55.8% dominant -> renders Identical. Firefox composites offscreen, so the root window size does not gate rendering. A full-page screenshot of example.com under 1x1x24 is pixel-correct. 1x1x24 is Camoufox's long-standing default and has run that way for years. CAMOUFOX_VIRTUAL_DISPLAY_SIZE is kept as an escape hatch for anyone who does want a real framebuffer, and still validates its input. The Composite half of4b20b77was already reverted separately in75d09a3. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,15 +18,17 @@ DISPLAYFD_READ_TIMEOUT_S = 10.0
|
||||
|
||||
# Xvfb screen geometry for headless="virtual".
|
||||
#
|
||||
# This used to be hardcoded to 1x1x24. A 1x1 root window is not a plausible
|
||||
# desktop: it breaks anything that measures the screen, and it is why
|
||||
# clamp_screen_to_display() has to special-case virtual displays (otherwise a
|
||||
# generated fingerprint gets clamped to 1x1). Default to an ordinary desktop
|
||||
# size instead. The framebuffer cost is trivial -- 1920*1080*4 bytes is ~8MB.
|
||||
# 1x1x24 is Camoufox's long-standing default and stays the default. The root
|
||||
# window size is not observable as a fingerprint: screen.* comes from the
|
||||
# generated fingerprint, applied per context in the browser, and
|
||||
# clamp_screen_to_display() is skipped entirely for virtual displays (see the
|
||||
# `not virtual_display` guard in utils.py), so a 1x1 root never clamps a
|
||||
# generated screen down to 1x1.
|
||||
#
|
||||
# Override with CAMOUFOX_VIRTUAL_DISPLAY_SIZE="<width>x<height>x<depth>", e.g.
|
||||
# "2560x1440x24". Depth may be omitted.
|
||||
DEFAULT_SCREEN = "1920x1080x24"
|
||||
# "1920x1080x24", for the cases that do want a real framebuffer to draw into.
|
||||
# Depth may be omitted.
|
||||
DEFAULT_SCREEN = "1x1x24"
|
||||
SCREEN_ENV_VAR = "CAMOUFOX_VIRTUAL_DISPLAY_SIZE"
|
||||
|
||||
# The Composite extension, disabled by default (Xvfb's `-extension COMPOSITE`).
|
||||
|
||||
Reference in New Issue
Block a user