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
- Inspect status.json and verify the completed payload's field types (artifacts array, videoKey/audioKey string or null, numeric completedAt).
- Retry the render with a fresh renderId after cleaning the transport prefix.
- Align and redeploy @remotion/* versions if the payload shape looks outdated.
- 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
- Align @remotion/* versions and redeploy renderers after every upgrade - malformed completed payloads are almost always version skew.
- Never hand-edit or replay status.json objects in the transport prefix.
- Treat a completed-but-invalid manifest as unrecoverable and retry with a fresh renderId.
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
- Renderer S3 status must be an object
- Renderer S3 status has invalid progress fields
- Renderer S3 completed status has an invalid artifact
- Renderer S3 failed status is invalid
- Unsupported renderer S3 status schema: ${String(status.schem
AI-assisted analysis of remotion-dev/remotion@10db9de073 (2026-08-22).
Data as JSON: /api/errors/87e426a0e5e6122e.
Report an issue: GitHub.