remotion-dev/remotion · error · error

failed to upload inputProps to S3: %w

Error message

failed to upload inputProps to S3: %w

What it means

Returned by uploadInputPropsToS3 when PutObject fails while writing the serialized input props JSON to the bucket. This path is only reached when the props are too large to inline (see needsUpload), so it implies the bucket exists but the object write itself was rejected.

Source

Thrown at packages/lambda-go/s3.go:159

			LocationConstraint: types.BucketLocationConstraint(region),
		}
	}
	if _, err := svc.CreateBucket(context.TODO(), input); err != nil {
		return "", fmt.Errorf("failed to create bucket: %w", err)
	}
	return bucket, nil
}

// uploadInputPropsToS3 writes the serialized props to S3 as private JSON.
func uploadInputPropsToS3(svc objectUploader, bucket string, key string, payload string) error {
	_, err := svc.PutObject(context.TODO(), &s3.PutObjectInput{
		Bucket:      new(bucket),
		Key:         new(key),
		Body:        strings.NewReader(payload),
		ContentType: new("application/json"),
	})
	if err != nil {
		return fmt.Errorf("failed to upload inputProps to S3: %w", err)
	}
	return nil
}

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Grant s3:PutObject on `arn:aws:s3:::<bucket>/input-props/*` to the caller's role.
  2. Inspect the wrapped error code: AccessDenied → permission; NoSuchBucket → bucket vanished; SlowDown → add retry/backoff.
  3. Reduce input props size; very large props should be pre-uploaded and referenced by URL instead of inlined.
  4. Check for a bucket policy that denies puts from outside a VPC endpoint and add the endpoint if needed.
Defensive patterns

Strategy: try-catch

Try / catch

if err := uploadInputPropsToS3(svc, bucket, key, payload); err != nil {
    var awsErr smithy.APIError
    if errors.As(err, &awsErr) && awsErr.ErrorCode() == "AccessDenied" {
        // grant s3:PutObject on arn:aws:s3:::<bucket>/input-props/*
    }
    return err
}

Prevention

When it happens

Trigger: svc.PutObject returns AccessDenied (no s3:PutObject on the bucket), the bucket was deleted between resolution and upload, a bucket policy blocks puts from the caller's principal, or the payload exceeded allowed object size limits (very large input props).

Common situations: IAM policy scoped to specific prefixes that does not include `input-props/*`. A bucket policy denying non-TLS or non-VPCE requests. Passing very large input props (multi-hundred-MB) that the SDK struggles to stream.

Related errors


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/9ff449ba7408dc17. Report an issue: GitHub.