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
- Grant s3:PutObject on `arn:aws:s3:::<bucket>/input-props/*` to the caller's role.
- Inspect the wrapped error code: AccessDenied → permission; NoSuchBucket → bucket vanished; SlowDown → add retry/backoff.
- Reduce input props size; very large props should be pre-uploaded and referenced by URL instead of inlined.
- 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
- Grant s3:PutObject on the input-props prefix to the caller role.
- Keep input props small enough to stay inline when possible.
- Pre-upload large data yourself and pass a reference URL.
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
- could not get location of S3 bucket %q: %w
- could not list S3 buckets: %w
- failed to create bucket: %w
- Failed to upload to S3: {$exception->getMessage()}
- could not invoke Lambda function %q: %w
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/9ff449ba7408dc17.
Report an issue: GitHub.