remotion-dev/remotion · error · Error
Renderer S3 status has invalid progress fields
Error message
Renderer S3 status has invalid progress fields
What it means
The base fields of every renderer status are validated: lambdaInvoked must be a boolean, and renderedFrames, encodedFrames, startedAt must be finite numbers (the isNumber helper rejects NaN, Infinity, and non-numbers). Missing fields (undefined) or numbers serialized as strings fail this check.
Source
Thrown at packages/serverless-client/src/renderer-transport.ts:121
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');
}
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) {View on GitHub (pinned to 10db9de073)
Solutions
- Inspect the status.json body - confirm the four fields exist with the correct primitive types.
- Delete the render's transport prefix and retry with a fresh renderId.
- Align @remotion/* versions and redeploy the renderer functions/image.
- If reproducible, capture the body and report it as a Remotion bug.
Defensive patterns
Strategy: retry
Validate before calling
# Inspect the field types the parser rejected
aws s3 cp "s3://$BUCKET/renders/$RENDER_ID/transport/chunks/$CHUNK/attempt-$ATTEMPT/status.json" - \
| jq '{lambdaInvoked, renderedFrames, encodedFrames, startedAt}' Try / catch
try {
await renderMediaOnCloudRun({...input, renderId: makeRenderId()});
} catch (err) {
if (err.message.includes('Renderer S3 status has invalid progress fields')) {
// corrupt status payload - sweep prefix, retry with fresh renderId
await renderMediaOnCloudRun({...input, renderId: makeRenderId()});
} else {
throw err;
}
} Prevention
- Use real S3 or a well-tested S3-compatible provider; exotic storage can corrupt small status objects under load.
- Keep renderer and orchestrator versions aligned so the status field set never drifts.
- Retry transport-validation failures with a fresh renderId rather than reusing the poisoned prefix.
When it happens
Trigger: A truncated or corrupted status.json upload; a status written by a version-skewed renderer using different field names; NaN leaking into frame counters from a broken renderer build.
Common situations: Interrupted multipart uploads of small objects; mixed Remotion versions between renderer and orchestrator; exotic S3-compatible storage corrupting objects under load.
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 completed status is invalid
- 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/25fac08d29d8aa00.
Report an issue: GitHub.