remotion-dev/remotion · error · Error

Renderer completed manifest references missing artifact obje

Error message

Renderer completed manifest references missing artifact object ${artifact.key}

What it means

In @remotion/serverless's s3Renderer (the S3 transport used for serverless/Cloud Run rendering), once the renderer's status.json reports state 'completed', the orchestrator downloads every artifact key listed there (files the render emitted via onArtifact). If reading a key fails with a missing-object error (isMissingObjectError, i.e. S3 NoSuchKey/404), this error is thrown instead of the raw AWS error: the renderer declared an artifact that does not exist in the bucket.

Source

Thrown at packages/serverless/src/stream-renderer.ts:419

			}

			if (status.state === 'completed') {
				const downloadedKeys: string[] = [];
				const emittedArtifacts: EmittedArtifact[] = [];
				for (const artifact of status.artifacts) {
					let artifactStream;
					try {
						artifactStream = await providerSpecifics.readFile({
							bucketName: payload.bucketName,
							key: artifact.key,
							region,
							expectedBucketOwner,
							forcePathStyle: payload.forcePathStyle,
							requestHandler,
						});
					} catch (err) {
						if (isMissingObjectError(err)) {
							throw new Error(
								`Renderer completed manifest references missing artifact object ${artifact.key}`,
							);
						}

						throw err;
					}

					emittedArtifacts.push(
						artifactFromS3({
							metadata: artifact.metadata,
							content: await readStreamAsBytes(artifactStream),
						}),
					);
					downloadedKeys.push(artifact.key);
				}

				const downloadedFiles: string[] = [];
				for (const [type, key] of [

View on GitHub (pinned to b2f4e34732)

Solutions

  1. Retry the render with a fresh renderId - a partially completed manifest cannot be repaired mid-flight.
  2. Check the bucket's lifecycle configuration and ensure nothing expires or transitions objects under the renders/ prefix while renders are in progress.
  3. Ensure every render gets a unique renderId and never reuse one while artifacts from a previous attempt are still being cleaned up.
  4. Inspect the renderer function's logs for upload errors around the artifact key named in the message.
  5. If artifacts consistently disappear with matching versions and clean lifecycle rules, report it as a Remotion bug with the renderId.
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 artifact object')) {
    // orphaned/partial manifest - clean prefix and retry once with a fresh renderId
    await deleteRenderFolder(bucketName, renderId);
    await renderMediaOnCloudRun({...input, renderId: makeRenderId()});
  } else {
    throw err;
  }
}

Prevention

When it happens

Trigger: The renderer wrote status.json='completed' before all artifact uploads finished (or an artifact upload failed silently); a bucket lifecycle rule deleted objects under the render prefix mid-render; two renders reused the same renderId/bucket paths so one render's cleanup deleted the other's objects.

Common situations: Aggressive S3 lifecycle expiration (e.g. expire after 1 day) racing long renders; retry logic reusing the same renderId; cross-account bucket setups making some keys invisible; interrupted renderer instances leaving a manifest that references uploads that never landed.

Related errors


AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-08-22). Data as JSON: /api/errors/42764b7702269ca0. Report an issue: GitHub.