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
- Align versions: set every @remotion/* package to the same version and redeploy the renderer functions/image, then re-run the render.
- Run npx remotion versions to find mismatched Remotion versions across the project.
- Clear the render's transport prefix in S3 and retry with a fresh renderId.
- 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
- Pin every @remotion/* package to one exact version (no ^ ranges).
- After upgrading, always redeploy the Cloud Run image / Lambda functions before rendering.
- Run npx remotion versions as a CI check to catch partial upgrades.
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
- Unknown renderer S3 status state: ${String(status.state)}
- Renderer S3 status must be an object
- Renderer S3 status identifies chunk ${String(status.chunk)},
- Renderer S3 status has invalid progress fields
- Renderer S3 completed status is invalid
AI-assisted analysis of remotion-dev/remotion@10db9de073 (2026-08-22).
Data as JSON: /api/errors/e5a142a47c4db439.
Report an issue: GitHub.