packages/docs/docs/lambda/custom-destination.mdx
By default a render artifact is saved into the same S3 bucket as where the site is located under the key renders/${renderId}/out.{extension} (for example: renders/hy0k2siao8/out.mp4)
You can modify the output destination by passing a different filename, writing it into a different bucket or even upload it to a different S3-compatible provider.
To customize the output filename, pass outName: "my-filename.mp4" to renderMediaOnLambda() or renderStillOnLambda().
On the CLI, use the --out-name flag.
The output name must match /^([0-9a-zA-Z-!_.*'()/]+)$/g.
To render into a different bucket, specify the outName option to renderMediaOnLambda() or renderStillOnLambda() and pass an object with the key and bucketName values:
import {renderMediaOnLambda} from '@remotion/lambda';
// ---cut---
const {bucketName, renderId} = await renderMediaOnLambda({
region: 'us-east-1',
functionName: 'remotion-render-bds9aab',
composition: 'MyVideo',
serveUrl: 'https://remotionlambda-qg35eyp1s1.s3.eu-central-1.amazonaws.com/sites/bf2jrbfkw',
inputProps: {},
codec: 'h264',
imageFormat: 'jpeg',
maxRetries: 1,
privacy: 'public',
outName: {
key: 'my-output',
bucketName: 'output-bucket',
},
});
If you like to use this feature:
downloadMedia() or getRenderProgress(), you must pass the bucketName where the site resides in, not the bucket where the video gets saved.key must match /^([0-9a-zA-Z-!_.*'()/]+)$/g/^(?=^.{3,63}$)(?!^(\d+\.)+\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])$)/.This feature is not supported from the CLI.
You can upload the file to another S3-compatible provider.
List of working providers (non-exhaustive):
✅ Supabase
✅ DigitalOcean Spaces
✅ Google Cloud Storage
Notes about Google Cloud Storage:
accessKeyId and secretAccessKey, create a service account that has Cloud Storage read + write permissions. Then run the following command:gcloud storage hmac create insert_google_service_account_email --project=insert_project_id
List of unsupported providers (non-exhaustive):
You must pass an outName as specified above and also provide an s3OutputProvider like in the example below.
import {renderMediaOnLambda} from '@remotion/lambda';
// ---cut---
const {bucketName, renderId} = await renderMediaOnLambda({
region: 'us-east-1',
functionName: 'remotion-render-bds9aab',
composition: 'MyVideo',
serveUrl: 'https://remotionlambda-qg35eyp1s1.s3.eu-central-1.amazonaws.com/sites/bf2jrbfkw',
inputProps: {},
codec: 'h264',
imageFormat: 'jpeg',
maxRetries: 1,
privacy: 'no-acl',
outName: {
key: 'my-output',
bucketName: 'output-bucket',
s3OutputProvider: {
endpoint: 'https://fra1.digitaloceanspaces.com',
accessKeyId: '<DIGITAL_OCEAN_ACCESS_KEY_ID>',
secretAccessKey: '<DIGITAL_OCEAN_SECRET_ACCESS_KEY>',
},
},
});
In this example, the output file will be uploaded to DigitalOcean Spaces. The cloud provider will give you the endpoint and credentials.
If you want to use this feature, note the following:
downloadMedia() or getRenderProgress(), you must pass the AWS bucketName where the site resides in, not the bucket name of the foreign cloud.downloadMedia() or getRenderProgress(), you must provide the s3OutputProvider option with the same credentials again.privacy: "no-acl" if you don't want to use ACL.This feature is not supported from the CLI.
If you plan on saving to another bucket on AWS S3 and would like to use different credentials, you can specify the region in the s3OutputProvider object.
{
"s3OutputProvider": {
"endpoint": "https://s3.us-west-1.amazonaws.com",
"accessKeyId": "<AWS_ACCESS_KEY_ID>",
"secretAccessKey": "<AWS_SECRET_ACCESS_KEY>",
"region": "us-west-1"
}
}
Note that it is not necessary to provide a custom s3OutputProvider if you want to use the same role as you already gave to the Lambda.
You may need to extend your role policy to allow writing to this bucket.
downloadBehavior: For renderMediaOnLambda() and renderStillOnLambda()