{"record":{"id":"1ae06a102333ed7e","repo":"remotion-dev/remotion","slug":"worker-is-not-available-cannot-call-parsemediao-1ae06a","errorCode":null,"errorMessage":"\"Worker\" is not available. Cannot call parseMediaOnWebWorker()","messagePattern":"\"Worker\" is not available\\. Cannot call parseMediaOnWebWorker\\(\\)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/media-parser/src/worker.module.ts","lineNumber":21,"sourceCode":"import {parseMediaOnWorkerImplementation} from './parse-media-on-worker-entry';\n\nexport {\n\thasBeenAborted,\n\tImageType,\n\tIsAnImageError,\n\tIsAnUnsupportedFileTypeError,\n\tIsAPdfError,\n\tMediaParserAbortError,\n} from './errors';\nexport type {ParseMediaOnWorker, ParseMediaOnWorkerOptions} from './options';\n\nexport const parseMediaOnWebWorker: ParseMediaOnWorker = <\n\tF extends Options<ParseMediaFields>,\n>(\n\tparams: ParseMediaOnWorkerOptions<F>,\n) => {\n\tif (typeof Worker === 'undefined') {\n\t\tthrow new Error(\n\t\t\t'\"Worker\" is not available. Cannot call parseMediaOnWebWorker()',\n\t\t);\n\t}\n\n\tif (import.meta.url.includes('.vite/deps')) {\n\t\tconst err = [\n\t\t\t'Detected Vite pre-bundling, which will break the worker.',\n\t\t\t'Please add the following to your vite.config.js:',\n\t\t\t'  optimizeDeps: {',\n\t\t\t'    exclude: [\"@remotion/media-parser/worker\"]',\n\t\t\t'  }',\n\t\t].join('\\n');\n\t\tthrow new Error(err);\n\t}\n\n\tconst worker = new Worker(new URL('./worker-web-entry.mjs', import.meta.url));\n\n\treturn parseMediaOnWorkerImplementation(","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media-parser/src/worker.module.ts#L3-L39","documentation":"Thrown by parseMediaOnWebWorker when the global Worker constructor is undefined. The web worker entry instantiates new Worker(new URL('./worker-web-entry.mjs', import.meta.url)); without a global Worker (Node without worker support, test sandboxes, or environments that strip workers) it aborts before creation.","triggerScenarios":"Calling parseMediaOnWebWorker in a non-browser runtime lacking global Worker, or in a browser build that polyfilled Worker away. The guard fires prior to any worker construction.","commonSituations":"Running browser-targeted code under Node in a test runner without a Worker polyfill. SSR/edge environments. Older bundler outputs that exclude the worker constructor. Confusing server worker vs web worker entry points.","solutions":["Call parseMediaOnWebWorker only in a real browser context where Worker exists.","On the server, use parseMediaOnServerWorker or in-process parseMedia instead.","If a Worker polyfill is needed in tests, configure jsdom/happy-dom or run the test in a real browser environment."],"exampleFix":"// before\nimport { parseMediaOnWebWorker } from '@remotion/media-parser/worker';\nawait parseMediaOnWebWorker(opts); // in Node test\n\n// after\nimport { parseMedia } from '@remotion/media-parser';\nawait parseMedia(opts); // works without Worker","handlingStrategy":"fallback","validationCode":"if (typeof Worker === 'undefined') throw new Error('parseMediaOnWebWorker requires a browser Worker');\nawait parseMediaOnWebWorker(opts);","typeGuard":"const hasBrowserWorker = () => typeof Worker !== 'undefined' && typeof window !== 'undefined';","tryCatchPattern":"try { return await parseMediaOnWebWorker(opts); } catch (e) { if (/\"Worker\" is not available/.test(String((e as Error).message))) { const { parseMedia } = await import('@remotion/media-parser'); return parseMedia(opts); } else throw e; }","preventionTips":["Call parseMediaOnWebWorker only in real browser contexts.","Use parseMediaOnServerWorker or parseMedia on the server.","Configure test environments to provide a Worker polyfill or skip the web-worker path."],"tags":["media-parser","worker","browser","environment","esm"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}