remotion-dev/remotion · error · Error

Unsupported renderer S3 status schema: ${String(status.schem

Error message

Unsupported renderer S3 status schema: ${String(status.schema)}

What it means

The renderer status file carries a schema field that must be exactly 1. Any other value - including undefined when the field is missing - is rejected, so the orchestrator never guesses at a payload format it does not fully understand.

Source

Thrown at packages/serverless-client/src/renderer-transport.ts:104

const isNumber = (value: unknown): value is number =>
	typeof value === 'number' && Number.isFinite(value);

export const parseS3RendererStatus = ({
	value,
	expectedChunk,
	expectedAttempt,
}: {
	value: unknown;
	expectedChunk: number;
	expectedAttempt: number;
}): S3RendererStatus => {
	if (typeof value !== 'object' || value === null) {
		throw new Error('Renderer S3 status must be an object');
	}

	const status = value as Record<string, unknown>;
	if (status.schema !== 1) {
		throw new Error(
			`Unsupported renderer S3 status schema: ${String(status.schema)}`,
		);
	}

	if (status.chunk !== expectedChunk || status.attempt !== expectedAttempt) {
		throw new Error(
			`Renderer S3 status identifies chunk ${String(status.chunk)}, attempt ${String(status.attempt)}; expected chunk ${expectedChunk}, attempt ${expectedAttempt}`,
		);
	}

	if (
		typeof status.lambdaInvoked !== 'boolean' ||
		!isNumber(status.renderedFrames) ||
		!isNumber(status.encodedFrames) ||
		!isNumber(status.startedAt)
	) {
		throw new Error('Renderer S3 status has invalid progress fields');
	}

View on GitHub (pinned to 10db9de073)

Solutions

  1. Align versions: set every @remotion/* package to the same version and redeploy the renderer functions/image, then re-run the render.
  2. Run npx remotion versions to find mismatched Remotion versions across the project.
  3. Clear the render's transport prefix in S3 and retry with a fresh renderId.
  4. Pin exact Remotion versions (no ^ ranges) in CI to prevent partial upgrades.
Defensive patterns

Strategy: validation

Validate before calling

# CI gate: refuse to deploy/render when Remotion versions are mixed
npx remotion versions
# then, fail the pipeline unless every @remotion/* package reports the same version
npm ls @remotion/serverless @remotion/serverless-client @remotion/cli --depth=0

Try / catch

try {
  await renderMediaOnCloudRun(input);
} catch (err) {
  if (err.message.startsWith('Unsupported renderer S3 status schema')) {
    throw new Error('Renderer/orchestrator version skew - redeploy functions, then retry with a fresh renderId');
  }
  throw err;
}

Prevention

When it happens

Trigger: Version skew: the deployed renderer (Cloud Run image / Lambda layer) that wrote status.json is older or newer than the @remotion/serverless(-client) version parsing it - e.g. a newer schema number read by a schema-1 client, or an old renderer that predates the field entirely (undefined).

Common situations: Upgrading Remotion in package.json without redeploying the Cloud Run image or Lambda functions (or the reverse); mixed @remotion/* versions in a monorepo; stale deployed layers continuing to run old code.

Related errors


AI-assisted analysis of remotion-dev/remotion@10db9de073 (2026-08-22). Data as JSON: /api/errors/e5a142a47c4db439. Report an issue: GitHub.