remotion-dev/remotion · error · Error

Renderer S3 completed status is invalid

Error message

Renderer S3 completed status is invalid

What it means

When status.state is 'completed', extra invariants apply: lambdaInvoked must be true, completedAt a finite number, videoKey and audioKey each string|null, and artifacts an array. Any deviation - artifacts missing, completedAt NaN, a numeric videoKey - throws this before the orchestrator acts on the manifest.

Source

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

		!isNumber(status.encodedFrames) ||
		!isNumber(status.startedAt)
	) {
		throw new Error('Renderer S3 status has invalid progress fields');
	}

	if (status.state === 'running') {
		return status as S3RendererStatus;
	}

	if (status.state === 'completed') {
		if (
			status.lambdaInvoked !== true ||
			!isNumber(status.completedAt) ||
			!(typeof status.videoKey === 'string' || status.videoKey === null) ||
			!(typeof status.audioKey === 'string' || status.audioKey === null) ||
			!Array.isArray(status.artifacts)
		) {
			throw new Error('Renderer S3 completed status is invalid');
		}

		for (const artifact of status.artifacts) {
			const candidate = artifact as {
				key?: unknown;
				metadata?: Record<string, unknown>;
			};
			if (
				typeof artifact !== 'object' ||
				artifact === null ||
				typeof candidate.key !== 'string' ||
				typeof candidate.metadata !== 'object' ||
				candidate.metadata === null ||
				typeof candidate.metadata.filename !== 'string' ||
				!isNumber(candidate.metadata.frame) ||
				typeof candidate.metadata.binary !== 'boolean' ||
				!(
					candidate.metadata.downloadBehavior === null ||

View on GitHub (pinned to 10db9de073)

Solutions

  1. Inspect status.json and verify the completed payload's field types (artifacts array, videoKey/audioKey string or null, numeric completedAt).
  2. Retry the render with a fresh renderId after cleaning the transport prefix.
  3. Align and redeploy @remotion/* versions if the payload shape looks outdated.
  4. If it reproduces with matched versions, report it with the status.json body.
Defensive patterns

Strategy: retry

Validate before calling

# Inspect the completed payload before retrying
aws s3 cp "s3://$BUCKET/renders/$RENDER_ID/transport/chunks/$CHUNK/attempt-$ATTEMPT/status.json" - \
  | jq '{state, lambdaInvoked, completedAt, videoKey, audioKey, artifacts: (.artifacts | type)}'

Try / catch

try {
  await renderMediaOnCloudRun({...input, renderId: makeRenderId()});
} catch (err) {
  if (err.message.includes('Renderer S3 completed status is invalid')) {
    await renderMediaOnCloudRun({...input, renderId: makeRenderId()});
  } else {
    throw err;
  }
}

Prevention

When it happens

Trigger: A corrupted or hand-modified completed status; version skew where an older renderer wrote a completed payload without the artifacts/videoKey/audioKey fields; a partially written status from an interrupted uploader.

Common situations: Same family as the other transport validation errors: partial uploads, mixed Remotion versions between renderer and orchestrator, third-party processes touching the renders/ prefix.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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