remotion-dev/remotion · error · Error
"Worker" is not available. Cannot call parseMediaOnServerWor
Error message
"Worker" is not available. Cannot call parseMediaOnServerWorker()
What it means
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.
Source
Thrown at packages/media-parser/src/server-worker.module.ts:11
import type {Options, ParseMediaFields} from './fields';
import type {ParseMediaOnWorker, ParseMediaOnWorkerOptions} from './options';
import {parseMediaOnWorkerImplementation} from './parse-media-on-worker-entry';
export const parseMediaOnServerWorker: ParseMediaOnWorker = <
F extends Options<ParseMediaFields>,
>(
params: ParseMediaOnWorkerOptions<F>,
) => {
if (typeof Worker === 'undefined') {
throw new Error(
'"Worker" is not available. Cannot call parseMediaOnServerWorker()',
);
}
const worker = new Worker(new URL('./worker-server-entry', import.meta.url));
return parseMediaOnWorkerImplementation(
params,
worker,
'parseMediaOnServerWorker',
);
};
View on GitHub (pinned to 78fe4bb3fd)
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.
Example fix
// before
import { parseMediaOnServerWorker } from '@remotion/media-parser/server-worker';
await parseMediaOnServerWorker(opts); // Worker undefined
// after
import { parseMedia } from '@remotion/media-parser';
await parseMedia(opts); // in-process, no Worker needed Defensive patterns
Strategy: fallback
Validate before calling
if (typeof Worker === 'undefined') throw new Error('Worker unavailable - use parseMedia instead');
await parseMediaOnServerWorker(opts); Type guard
const hasWorker = () => typeof Worker !== 'undefined';
Try / catch
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; } Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- "Worker" is not available. Cannot call parseMediaOnWebWorker
- parseMediaOnServerWorker is not available in CJS mode. Load
- parseMediaOnWebWorker is not available in CJS mode. Load thi
- `reader` should not be provided to `${apiName}`. If you want
- src must be a string when using `nodeReader`
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/6e1ff487a4656dc9.
Report an issue: GitHub.