{"record":{"id":"dc97d1a34b7a116e","repo":"remotion-dev/remotion","slug":"whisper-folder-to-exists-but-the-executable","errorCode":null,"errorMessage":"Whisper folder ${to} exists but the executable (${getWhisperExecutablePath(to, version)}) is missing. Delete ${to} and try again.","messagePattern":"Whisper folder (.+?) exists but the executable \\((.+?)\\) is missing\\. Delete (.+?) and try again\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/install-whisper-cpp/src/install-whisper-cpp.ts","lineNumber":179,"sourceCode":"};\n\nexport const installWhisperCpp = async ({\n\tversion,\n\tto,\n\tprintOutput = true,\n\tsignal,\n}: {\n\tversion: string;\n\tto: string;\n\tsignal?: AbortSignal | null;\n\tprintOutput?: boolean;\n}): Promise<{\n\talreadyExisted: boolean;\n}> => {\n\tif (existsSync(to)) {\n\t\tif (!existsSync(getWhisperExecutablePath(to, version))) {\n\t\t\tif (printOutput) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Whisper folder ${to} exists but the executable (${getWhisperExecutablePath(\n\t\t\t\t\t\tto,\n\t\t\t\t\t\tversion,\n\t\t\t\t\t)}) is missing. Delete ${to} and try again.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn Promise.resolve({alreadyExisted: false});\n\t\t}\n\n\t\tif (printOutput) {\n\t\t\tconsole.log(`Whisper already exists at ${to}`);\n\t\t}\n\n\t\treturn Promise.resolve({alreadyExisted: true});\n\t}\n\n\tif (process.platform === 'darwin' || process.platform === 'linux') {","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/install-whisper-cpp/src/install-whisper-cpp.ts#L161-L197","documentation":"Thrown by `installWhisperCpu` when the target install folder already exists but the whisper.cpp executable is not present inside it. This indicates a partial or broken previous install. Like the model-size error (1053), it only throws when `printOutput` is true (the default); with `printOutput: false` it returns `{alreadyExisted: false}` and re-installs.","triggerScenarios":"A previous install was interrupted after creating the folder but before placing the binary; the executable was manually deleted; antivirus quarantined the binary. The check is `existsSync(to) && !existsSync(getWhisperExecutablePath(to, version))`.","commonSituations":"CI cancelled mid-install; an AV on Windows removing whisper.exe; partial extraction of the zip; switching versions leaves an incompatible folder layout.","solutions":["Delete the folder named in the message and re-run `installWhisperCpu`.","Programmatically, pass `printOutput: false` so a missing executable triggers an automatic re-install.","On Windows, whitelist the whisper folder in your antivirus if it keeps removing the binary."],"exampleFix":"// before\ninstallWhisperCpu({version: '1.7.0', to: 'whisper'});\n\n// after (auto-recover)\ninstallWhisperCpu({\n  version: '1.7.0',\n  to: 'whisper',\n  printOutput: false,\n});","handlingStrategy":"validation","validationCode":"import {existsSync} from 'fs';\n\nfunction whisperInstallIsComplete(to: string, version: string): boolean {\n  return existsSync(to) && existsSync(getWhisperExecutablePath(to, version));\n}\n\nif (!whisperInstallIsComplete(to, version)) {\n  fs.rmSync(to, {recursive: true, force: true});\n}","typeGuard":null,"tryCatchPattern":"try {\n  await installWhisperCpu({version, to});\n} catch (err) {\n  if (/executable .* is missing/.test(String(err))) {\n    fs.rmSync(to, {recursive: true, force: true});\n    return installWhisperCpu({version, to}); // retry after cleanup\n  }\n  throw err;\n}","preventionTips":["In CI, start from a clean whisper folder or verify the executable exists before reusing it.","Pass printOutput: false in pipelines so a missing executable auto-triggers a re-install.","On Windows, whitelist the whisper folder in your antivirus so it does not delete the binary."],"tags":["whisper","filesystem","install"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}