{"record":{"id":"6e1ff487a4656dc9","repo":"remotion-dev/remotion","slug":"worker-is-not-available-cannot-call-parsemediao","errorCode":null,"errorMessage":"\"Worker\" is not available. Cannot call parseMediaOnServerWorker()","messagePattern":"\"Worker\" is not available\\. Cannot call parseMediaOnServerWorker\\(\\)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/media-parser/src/server-worker.module.ts","lineNumber":11,"sourceCode":"import type {Options, ParseMediaFields} from './fields';\nimport type {ParseMediaOnWorker, ParseMediaOnWorkerOptions} from './options';\nimport {parseMediaOnWorkerImplementation} from './parse-media-on-worker-entry';\n\nexport const parseMediaOnServerWorker: 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 parseMediaOnServerWorker()',\n\t\t);\n\t}\n\n\tconst worker = new Worker(new URL('./worker-server-entry', import.meta.url));\n\n\treturn parseMediaOnWorkerImplementation(\n\t\tparams,\n\t\tworker,\n\t\t'parseMediaOnServerWorker',\n\t);\n};\n","sourceCodeStart":1,"sourceCodeEnd":24,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media-parser/src/server-worker.module.ts#L1-L24","documentation":"Thrown by parseMediaOnServerWorker when the global Worker constructor is undefined. parseMediaOnServerWorker spins up a server-side worker via new Worker(new URL('./worker-server-entry', import.meta.url)); if Worker is not present on the global scope (older Node, a restricted runtime, or an environment that strips worker support), it aborts before instantiation.","triggerScenarios":"Calling parseMediaOnServerWorker in a Node version or bundler output where global Worker is unavailable, or in a sandboxed runtime that disables worker threads. The check fires before any worker is constructed.","commonSituations":"Running under Node < 20 (where global Worker may be absent), in bundlers that polyfill incorrectly, in restricted serverless runtimes, or after a transpile step that drops the .module entry and falls back to a context lacking Worker.","solutions":["Run on Node 20+ where the global Worker is available, or import from 'node:worker_threads' and bridge it.","If workers are unavailable, fall back to parseMedia (in-process) instead of parseMediaOnServerWorker.","Ensure you load the function via the ESM entry (server-worker.module) so import.meta.url resolves correctly."],"exampleFix":"// before\nimport { parseMediaOnServerWorker } from '@remotion/media-parser/server-worker';\nawait parseMediaOnServerWorker(opts); // Worker undefined\n\n// after\nimport { parseMedia } from '@remotion/media-parser';\nawait parseMedia(opts); // in-process, no Worker needed","handlingStrategy":"fallback","validationCode":"if (typeof Worker === 'undefined') throw new Error('Worker unavailable - use parseMedia instead');\nawait parseMediaOnServerWorker(opts);","typeGuard":"const hasWorker = () => typeof Worker !== 'undefined';","tryCatchPattern":"try { return await parseMediaOnServerWorker(opts); } catch (e) { if (/\"Worker\" is not available/.test(String((e as Error).message))) { return await parseMedia(opts); } else throw e; }","preventionTips":["Run on Node 20+ for global Worker support.","Fall back to in-process parseMedia when workers are unavailable.","Load the server worker via the ESM entry."],"tags":["media-parser","worker","node","environment","esm"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}