openclaw/openclaw · error
viewport ${label} exceeds maximum of ${ACT_MAX_VIEWPORT_DIME
Error message
viewport ${label} exceeds maximum of ${ACT_MAX_VIEWPORT_DIMENSION} What it means
Thrown by resolveViewportDimension when a viewport width or height exceeds ACT_MAX_VIEWPORT_DIMENSION (currently 8192). Oversized viewports cause excessive memory allocation, rendering performance degradation, and potential Playwright/browser crashes. The same limit is enforced in the tool schema (optionalPositiveIntegerSchema with maximum) and the CLI resize path.
Source
Thrown at extensions/browser/src/browser/pw-tools-core.snapshot.ts:62
function resolveBoundedTimeoutMs(
timeoutMs: number | undefined,
fallbackMs: number,
minMs: number,
maxMs: number,
): number {
const parsed = parseFiniteNumber(timeoutMs);
return Math.max(minMs, Math.min(maxMs, Math.floor(parsed ?? fallbackMs)));
}
function resolveSnapshotTimeoutMs(timeoutMs: number | undefined): number {
return resolveBoundedTimeoutMs(timeoutMs, 5_000, 500, 60_000);
}
function resolveViewportDimension(value: unknown, label: "width" | "height"): number {
const dimension = resolveIntegerOption(value, 1, { min: 1 });
if (dimension > ACT_MAX_VIEWPORT_DIMENSION) {
throw new Error(`viewport ${label} exceeds maximum of ${ACT_MAX_VIEWPORT_DIMENSION}`);
}
return dimension;
}
async function collectSnapshotUrls(page: Page): Promise<SnapshotUrlEntry[]> {
const urls = await page
.evaluate(() => {
const seen = new Set<string>();
const out: SnapshotUrlEntry[] = [];
for (const anchor of Array.from(document.querySelectorAll("a[href]"))) {
const href = anchor instanceof HTMLAnchorElement ? anchor.href : "";
if (!href || seen.has(href)) {
continue;
}
const text =
(anchor.textContent || anchor.getAttribute("aria-label") || "")
.replace(/\s+/g, " ")
.trim()View on GitHub (pinned to 01804a7531)
Solutions
- Reduce the viewport dimension to 8192 or below.
- Use a standard device descriptor via setDeviceViaPlaywright instead of manual dimensions.
- Validate dimensions client-side: Math.min(8192, Math.max(1, value)).
Example fix
// before
await resizeViewportViaPlaywright({ cdpUrl, targetId, width: 16384, height: 8192 });
// after
await resizeViewportViaPlaywright({ cdpUrl, targetId, width: 8192, height: 8192 }); Defensive patterns
Strategy: validation
Validate before calling
const ACT_MAX_VIEWPORT_DIMENSION = 8192;
function validateViewportDimension(value: unknown, label: "width" | "height"): number {
const n = typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : 0;
if (n < 1 || n > ACT_MAX_VIEWPORT_DIMENSION) {
throw new Error(`viewport ${label} must be between 1 and ${ACT_MAX_VIEWPORT_DIMENSION}`);
}
return n;
} Type guard
function isValidViewportDimension(value: unknown): value is number {
return typeof value === "number" && Number.isFinite(value) && value >= 1 && value <= 8192;
} Prevention
- Clamp viewport dimensions to [1, 8192] before passing to resize or snapshot.
- Prefer standard device descriptors over manual viewport dimensions.
- Validate dimensions client-side to avoid hitting the runtime limit.
When it happens
Trigger: Calling resizeViewportViaPlaywright or a snapshot with viewport options where width or height > 8192. Also triggered by device descriptors with extreme dimensions.
Common situations: Models or configs that pass very large numbers for viewport dimensions. Copy-paste errors where pixel values are multiplied incorrectly. Attempts to emulate 8K+ displays.
Related errors
- ${label} exceeds maximum of ${maxMs}ms
- resize requires positive width and height
- url is required
- Invalid URL: ${diagnostic}
- output path is required
AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12).
Data as JSON: /api/errors/6093cc96e0bdd20f.
Report an issue: GitHub.