{"record":{"id":"ec746b52bc00e888","repo":"remotion-dev/remotion","slug":"support-detailedreason","errorCode":null,"errorMessage":"${support.detailedReason}","messagePattern":"\\$\\{support\\.detailedReason\\}","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/studio/src/components/RenderQueue/CaptionQueueProcessor.tsx","lineNumber":36,"sourceCode":"\tconst {\n\t\tupdateCaptionJobProgress,\n\t\tmarkCaptionJobDone,\n\t\tmarkCaptionJobFailed,\n\t\tsetProcessCaptionJobCallback,\n\t} = useContext(RenderQueueContext);\n\n\tconst processJob = useCallback(\n\t\tasync (job: CaptionJob) => {\n\t\t\tlet captionCount: number | null = null;\n\t\t\tlet processingError: Error | null = null;\n\t\t\ttry {\n\t\t\t\tupdateCaptionJobProgress(job.id, {\n\t\t\t\t\tmessage: 'Checking WebGPU support...',\n\t\t\t\t\tvalue: 0,\n\t\t\t\t});\n\t\t\t\tconst support = await canUseWhisperWebGpu();\n\t\t\t\tif (!support.supported) {\n\t\t\t\t\tthrow new Error(support.detailedReason);\n\t\t\t\t}\n\n\t\t\t\tupdateCaptionJobProgress(job.id, {\n\t\t\t\t\tmessage: `Checking ${job.model}...`,\n\t\t\t\t\tvalue: 0.02,\n\t\t\t\t});\n\t\t\t\tawait clearStaleModels();\n\t\t\t\tawait loadModelForJob({\n\t\t\t\t\tmodel: job.model,\n\t\t\t\t\tprogressStart: 0.03,\n\t\t\t\t\tprogressSpan: 0.27,\n\t\t\t\t\tisModelCached: (model) => isWhisperModelCached({model}),\n\t\t\t\t\tloadModel: (model, onProgress) =>\n\t\t\t\t\t\tloadWhisperModel({\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tonProgress: (progress) => onProgress(progress.progress),\n\t\t\t\t\t\t}),\n\t\t\t\t\tupdateProgress: (progress) =>","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/remotion-dev/remotion/blob/b2f4e34732f3c6c222ea029413e22dc402218cd7/packages/studio/src/components/RenderQueue/CaptionQueueProcessor.tsx#L18-L54","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Use a browser with WebGPU enabled (recent Chrome/Edge; enable chrome://flags WebGPU if needed)","Update GPU drivers and ensure hardware acceleration is on","Check the detailedReason message for the exact blocker and address it (e.g. enable the flag, switch machine)","Run transcription locally in a capable browser instead of a headless/remote session"],"exampleFix":"// before (blind run)\nawait startWhisperJob(model);\n// after\nconst support = await canUseWhisperWebGpu();\nif (support.supported) {\n  await startWhisperJob(model);\n} else {\n  alert(`Whisper transcription unavailable: ${support.detailedReason}`);\n}","handlingStrategy":"validation","validationCode":"const support = await canUseWhisperWebGpu();\nif (!support.supported) {\n  throw new Error(`Transcription unavailable: ${support.detailedReason}`);\n}","typeGuard":"const whisperReady = async (): Promise<boolean> => (await canUseWhisperWebGpu()).supported;","tryCatchPattern":"try {\n  await runCaptionJob(job);\n} catch (e) {\n  markJobFailed(job.id, (e as Error).message);\n}","preventionTips":["Verify WebGPU support before offering transcription features","Use up-to-date Chrome/Edge with hardware acceleration","Check chrome://gpu to confirm WebGPU is active","Avoid running GPU jobs in headless/remote sessions"],"tags":["webgpu","whisper","transcription","hardware"],"backgroundTag":"feature-not-enabled","analyzedSha":"b2f4e34732f3c6c222ea029413e22dc402218cd7","analyzedAt":"2026-09-09T13:27:51.281Z","contentChangedAt":"2026-09-09T13:27:51.281Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}