remotion-dev/remotion · error · Error

No WebGPU adapter available

Error message

No WebGPU adapter available

What it means

After confirming navigator.gpu exists, getGpuDevice() calls requestAdapter() to obtain a hardware adapter. If the system returns null (no suitable GPU adapter available, drivers blacklisted, or WebGPU disabled at the OS/flag level despite the API being present), the promise rejects with this error. This is a hardware/driver-level failure beyond Remotion's control.

Source

Thrown at packages/core/src/effects/gpu-device.ts:30

export const getGpuDevice = (): Promise<unknown> => {
	if (devicePromise) {
		return devicePromise;
	}

	devicePromise = (async () => {
		if (typeof navigator === 'undefined' || !('gpu' in navigator)) {
			throw new Error('WebGPU is not available in this environment');
		}

		const {gpu} = navigator as unknown as {
			gpu: {requestAdapter: () => Promise<unknown>};
		};
		const adapter = (await gpu.requestAdapter()) as {
			requestDevice: () => Promise<unknown>;
		} | null;
		if (!adapter) {
			throw new Error('No WebGPU adapter available');
		}

		return adapter.requestDevice();
	})();

	return devicePromise;
};

// Test-only: reset the cached device. Not exported from `remotion`.
export const _resetGpuDeviceForTesting = (): void => {
	devicePromise = null;
};

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Update GPU drivers and remove GPU blocklist overrides; ensure Chrome is not launched with --disable-gpu.
  2. In headless, use --enable-unsafe-webgpu and a software adapter (SwiftShader) where available.
  3. Fall back to a webgl2 effect when no adapter is available.

Example fix

// launch headless chrome with webgpu + swiftshader
// before: chrome --headless --disable-gpu
// after:  chrome --headless=new --enable-unsafe-webgpu --use-gl=angle --use-angle=swiftshader
Defensive patterns

Strategy: fallback

Validate before calling

const adapter = await navigator.gpu?.requestAdapter();
if (!adapter) {
  // no adapter: fall back to webgl2 backend
}

Try / catch

try {
  const device = await getGpuDevice();
} catch (e) {
  if (String(e?.message).includes('No WebGPU adapter')) {
    // fall back to a webgl2 effect
  } else throw e;
}

Prevention

When it happens

Trigger: Running on a machine whose GPU/driver is blocked by Chrome's blocklist (common on Linux with certain drivers, in some VMs, or when GPU acceleration is disabled), or in headless Chrome where the GPU adapter is unavailable.

Common situations: Headless/CI Linux without proper GPU drivers; VMs without GPU passthrough; Chrome launched with --disable-gpu; outdated or blocklisted drivers.

Related errors


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/d56f166c840e22bb. Report an issue: GitHub.