remotion-dev/remotion · error · Error

Multiple frame ranges are not supported on Lambda. Use rende

Error message

Multiple frame ranges are not supported on Lambda. Use renderMedia() locally to render multiple ranges.

What it means

renderMediaOnLambda validates the input before invoking Lambda: if options.frameRange is a 2D array (Array of arrays), it means the caller passed MULTIPLE frame ranges, which Lambda does not support. The error tells the user to use local renderMedia() for multi-range rendering.

Source

Thrown at packages/lambda-client/src/render-media-on-lambda.ts:236

		isProduction: options.isProduction ?? null,
		sampleRate: options.sampleRate ?? 48000,
	};
};

const wrapped = wrapWithErrorHandling(internalRenderMediaOnLambdaRaw);

/*
 * @description Kicks off a render process on Remotion Lambda. The progress can be tracked using getRenderProgress().
 * @see [Documentation](https://remotion.dev/docs/lambda/rendermediaonlambda)
 */
export const renderMediaOnLambda = (
	options: RenderMediaOnLambdaInput,
): Promise<RenderMediaOnLambdaOutput> => {
	if (
		Array.isArray(options.frameRange) &&
		Array.isArray(options.frameRange[0])
	) {
		throw new Error(
			'Multiple frame ranges are not supported on Lambda. Use renderMedia() locally to render multiple ranges.',
		);
	}

	if (options.quality) {
		throw new Error(
			'quality has been renamed to jpegQuality. Please rename the option.',
		);
	}

	return wrapped(renderMediaOnLambdaOptionalToRequired(options));
};

/**
 * @deprecated Renamed to renderMediaOnLambda()
 */
export const renderVideoOnLambda = renderMediaOnLambda;

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Pass a single frame range to renderMediaOnLambda, e.g. frameRange: [0, 30] or frameRange: 10.
  2. If you truly need multiple ranges, call renderMedia() locally instead of renderMediaOnLambda().
  3. Flatten your range-generation logic to produce a single range for Lambda renders.

Example fix

// before
await renderMediaOnLambda({
  composition: 'MyVideo',
  frameRange: [[0, 30], [60, 90]], // multiple ranges
});

// after
await renderMediaOnLambda({
  composition: 'MyVideo',
  frameRange: [0, 30], // single range
});
Defensive patterns

Strategy: type-guard

Validate before calling

// Reject nested frame ranges before calling Lambda
function isSingleRange(r: unknown): boolean {
  return typeof r === 'number' ||
    (Array.isArray(r) && r.length === 2 && r.every(v => typeof v === 'number'));
}
if (!isSingleRange(opts.frameRange)) {
  throw new Error('Multiple frame ranges are unsupported on Lambda');
}

Type guard

const isSingleFrameRange = (r: unknown): r is number | [number, number] =>
  typeof r === 'number' ||
  (Array.isArray(r) && r.length === 2 && r.every(n => typeof n === 'number'));

Prevention

When it happens

Trigger: Calling renderMediaOnLambda with options.frameRange shaped like [[0,30],[60,90]] — i.e., Array.isArray(frameRange) && Array.isArray(frameRange[0]).

Common situations: Copying a local renderMedia() call (which supports multiple ranges) verbatim into a Lambda render; generating frame ranges programmatically and producing nested arrays; migrating from local CLI renderMedia to Lambda without collapsing the ranges.

Related errors


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