remotion-dev/remotion · error · Error
Renderer completed manifest references missing media object
Error message
Renderer completed manifest references missing media object ${key} What it means
Same s3Renderer flow as the artifact case: after status.json reports 'completed', the orchestrator downloads the chunk's media objects (status.videoKey / status.audioKey) to the output directory as chunk-XXXXXXXX-{video,audio} files. A missing-object error (isMissingObjectError, S3 NoSuchKey/404) on either key throws this - the renderer's manifest promised media that is not in the bucket.
Source
Thrown at packages/serverless/src/stream-renderer.ts:461
}
const filename = join(
outdir,
`chunk-${String(payload.chunk).padStart(8, '0')}-${type}`,
);
let media;
try {
media = await providerSpecifics.readFile({
bucketName: payload.bucketName,
key,
region,
expectedBucketOwner,
forcePathStyle: payload.forcePathStyle,
requestHandler,
});
} catch (err) {
if (isMissingObjectError(err)) {
throw new Error(
`Renderer completed manifest references missing media object ${key}`,
);
}
throw err;
}
await pipeline(media, createWriteStream(filename));
downloadedFiles.push(filename);
downloadedKeys.push(key);
}
for (const emittedArtifact of emittedArtifacts) {
const artifactRegistration = onArtifact({
artifact: emittedArtifact,
chunk: payload.chunk,
attempt: payload.attempt,
});View on GitHub (pinned to b2f4e34732)
Solutions
- Retry the render with a fresh renderId - the missing chunk media cannot be recovered.
- Audit the bucket lifecycle rules so nothing deletes renders/* objects during a render.
- Guarantee unique renderIds and single-writer access per render prefix.
- Check the renderer's logs for upload errors on the exact key named in the message.
- If reproducible with matched versions, report it as a Remotion bug including the renderId and key.
Defensive patterns
Strategy: retry
Validate before calling
# Pre-render check: nothing may expire or transition render objects mid-render
aws s3api get-bucket-lifecycle-configuration --bucket "$BUCKET" \
| jq '.Rules[] | select(.Filter | tostring | contains("renders"))' \
| grep . && echo "WARNING: lifecycle rule touches renders/ prefix" || echo "renders/ prefix safe" Try / catch
try {
await renderMediaOnCloudRun({...input, renderId: makeRenderId()});
} catch (err) {
if (err.message.includes('manifest references missing media object')) {
// chunk media upload was lost - retry the whole render with a new renderId
await renderMediaOnCloudRun({...input, renderId: makeRenderId()});
} else {
throw err;
}
} Prevention
- Generate a unique renderId per render attempt; reuse is the top cause of missing chunk media.
- Do not let lifecycle rules delete objects under renders/ while renders are in progress.
- Monitor renderer logs for upload failures - a completed manifest with missing media usually means an upload failed silently.
When it happens
Trigger: The renderer uploaded the completed status before the large video/audio chunk uploads finished; a bucket lifecycle rule deleted the chunk objects; renderId reuse made one attempt's cleanup remove another's media; an oversized chunk upload failed server-side after the status was already written.
Common situations: Large chunk files timing out on upload in constrained networks; lifecycle rules racing long renders; concurrent renders sharing a bucket prefix; partially upgraded deployments writing inconsistent manifests.
Related errors
- Renderer completed manifest references missing artifact obje
- Renderer S3 status must be an object
- Unsupported renderer S3 status schema: ${String(status.schem
- Renderer S3 status identifies chunk ${String(status.chunk)},
- Renderer S3 status has invalid progress fields
AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-08-22).
Data as JSON: /api/errors/fb744df43e53b854.
Report an issue: GitHub.