{"record":{"id":"c0707a577dade85e","repo":"remotion-dev/remotion","slug":"renderer-s3-failed-status-is-invalid","errorCode":null,"errorMessage":"Renderer S3 failed status is invalid","messagePattern":"Renderer S3 failed status is invalid","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/serverless-client/src/renderer-transport.ts","lineNumber":172,"sourceCode":"\t\t\t\t\tcandidate.metadata.downloadBehavior === null ||\n\t\t\t\t\ttypeof candidate.metadata.downloadBehavior === 'object'\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrow new Error('Renderer S3 completed status has an invalid artifact');\n\t\t\t}\n\t\t}\n\n\t\treturn status as S3RendererStatus;\n\t}\n\n\tif (status.state === 'failed') {\n\t\tif (\n\t\t\t!isNumber(status.failedAt) ||\n\t\t\ttypeof status.shouldRetry !== 'boolean' ||\n\t\t\ttypeof status.errorInfo !== 'object' ||\n\t\t\tstatus.errorInfo === null\n\t\t) {\n\t\t\tthrow new Error('Renderer S3 failed status is invalid');\n\t\t}\n\n\t\treturn status as S3RendererStatus;\n\t}\n\n\tthrow new Error(`Unknown renderer S3 status state: ${String(status.state)}`);\n};\n","sourceCodeStart":154,"sourceCodeEnd":180,"githubUrl":"https://github.com/remotion-dev/remotion/blob/10db9de07356446fb0edb3c3ae211369b693d18b/packages/serverless-client/src/renderer-transport.ts#L154-L180","documentation":"When status.state is 'failed', the parser requires failedAt to be a finite number, shouldRetry a boolean, and errorInfo a non-null object. These fields carry the renderer's real error back to the orchestrator, so a malformed failed status masks the original failure with this validation error.","triggerScenarios":"A crashed or OOM-killed renderer wrote a partial failed status (errorInfo truncated or missing); version skew changed the failure payload shape between renderer and orchestrator.","commonSituations":"Renderer processes dying mid-write; mixed Remotion versions; interrupted uploads of the status object right at failure time.","solutions":["Inspect status.json - the malformed failure payload may still contain traces of the underlying renderer error.","Check the renderer function's CloudWatch/run logs for the true error - a failed status exists because the render already failed once.","Fix the underlying render failure, then retry with a fresh renderId.","Align @remotion/* versions and redeploy the renderers."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"# Inspect the failed payload - traces of the true renderer error may survive\naws s3 cp \"s3://$BUCKET/renders/$RENDER_ID/transport/chunks/$CHUNK/attempt-$ATTEMPT/status.json\" - \\\n  | jq '{state, failedAt, shouldRetry, errorInfo}'","typeGuard":null,"tryCatchPattern":"try {\n  await renderMediaOnCloudRun({...input, renderId: makeRenderId()});\n} catch (err) {\n  if (err.message.includes('Renderer S3 failed status is invalid')) {\n    // the render failed AND its error report is corrupt - check renderer logs,\n    // fix the root cause, then retry with a fresh renderId\n    throw new Error('Renderer failed with an unreadable error report - inspect function logs');\n  }\n  throw err;\n}","preventionTips":["A malformed failed-status means the render already failed - always pull the renderer function logs for the real error before retrying.","Align versions and redeploy after upgrades to keep failure payloads well-formed.","Raise renderer memory limits if processes die mid-write while reporting failures."],"tags":["serverless","s3","validation","status-json","failure-reporting"],"backgroundTag":"schema-validation-failed","analyzedSha":"10db9de07356446fb0edb3c3ae211369b693d18b","analyzedAt":"2026-08-22T21:45:17.748Z","contentChangedAt":"2026-08-22T21:45:17.748Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}