remotion-dev/remotion · error

${support.detailedReason}

Error message

${support.detailedReason}

What it means

The caption transcription queue checks WebGPU availability with canUseWhisperWebGpu() before starting a Whisper job. If unsupported, the reason string from that check is thrown so the job fails with the concrete hardware/browser limitation.

Source

Thrown at packages/studio/src/components/RenderQueue/CaptionQueueProcessor.tsx:36

	const {
		updateCaptionJobProgress,
		markCaptionJobDone,
		markCaptionJobFailed,
		setProcessCaptionJobCallback,
	} = useContext(RenderQueueContext);

	const processJob = useCallback(
		async (job: CaptionJob) => {
			let captionCount: number | null = null;
			let processingError: Error | null = null;
			try {
				updateCaptionJobProgress(job.id, {
					message: 'Checking WebGPU support...',
					value: 0,
				});
				const support = await canUseWhisperWebGpu();
				if (!support.supported) {
					throw new Error(support.detailedReason);
				}

				updateCaptionJobProgress(job.id, {
					message: `Checking ${job.model}...`,
					value: 0.02,
				});
				await clearStaleModels();
				await loadModelForJob({
					model: job.model,
					progressStart: 0.03,
					progressSpan: 0.27,
					isModelCached: (model) => isWhisperModelCached({model}),
					loadModel: (model, onProgress) =>
						loadWhisperModel({
							model,
							onProgress: (progress) => onProgress(progress.progress),
						}),
					updateProgress: (progress) =>

View on GitHub (pinned to b2f4e34732)

Solutions

  1. Use a browser with WebGPU enabled (recent Chrome/Edge; enable chrome://flags WebGPU if needed)
  2. Update GPU drivers and ensure hardware acceleration is on
  3. Check the detailedReason message for the exact blocker and address it (e.g. enable the flag, switch machine)
  4. Run transcription locally in a capable browser instead of a headless/remote session

Example fix

// before (blind run)
await startWhisperJob(model);
// after
const support = await canUseWhisperWebGpu();
if (support.supported) {
  await startWhisperJob(model);
} else {
  alert(`Whisper transcription unavailable: ${support.detailedReason}`);
}
Defensive patterns

Strategy: validation

Validate before calling

const support = await canUseWhisperWebGpu();
if (!support.supported) {
  throw new Error(`Transcription unavailable: ${support.detailedReason}`);
}

Type guard

const whisperReady = async (): Promise<boolean> => (await canUseWhisperWebGpu()).supported;

Try / catch

try {
  await runCaptionJob(job);
} catch (e) {
  markJobFailed(job.id, (e as Error).message);
}

Prevention

When it happens

Trigger: canUseWhisperWebGpu() returns {supported: false} inside the Studio caption job — e.g. browser lacking WebGPU, GPU disabled, or feature not exposed in the current Chrome/Safari version.

Common situations: Running Studio in Firefox or an older browser without WebGPU; headless environments without GPU; GPU drivers disabled or GPU blocked (chrome://gpu shows WebGPU unavailable); remote desktop without GPU.

Related errors


AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-09-09). Data as JSON: /api/errors/ec746b52bc00e888. Report an issue: GitHub.