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
- 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
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
- 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
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
- Error: Model ${model} does not exist at ${modelFolder ? mode
- ${support.detailedReason}
- Unknown Whisper model: ${selectedModel}
- WebGPU is not available in this environment for canvas effec
- WebGPU is not available in this environment
AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-09-09).
Data as JSON: /api/errors/ec746b52bc00e888.
Report an issue: GitHub.