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

  1. Run on Node 20+ where the global Worker is available, or import from 'node:worker_threads' and bridge it.
  2. If workers are unavailable, fall back to parseMedia (in-process) instead of parseMediaOnServerWorker.
  3. 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

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


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/6e1ff487a4656dc9. Report an issue: GitHub.