packages/docs/docs/cloudrun/rendermediaoncloudrun.mdx
Kicks off a media rendering process on Remotion Cloud Run.
Requires a service to already be deployed to execute the render.
A site or a Serve URL needs to be specified to determine what will be rendered.
// ---cut---
import {renderMediaOnCloudrun} from '@remotion/cloudrun/client';
const result = await renderMediaOnCloudrun({
region: 'us-east1',
serviceName: 'remotion-render-bds9aab',
composition: 'MyVideo',
serveUrl: 'https://storage.googleapis.com/remotioncloudrun-123asd321/sites/abcdefgh',
codec: 'h264',
});
if (result.type === 'success') {
console.log(result.bucketName);
console.log(result.renderId);
}
:::note
Import from @remotion/cloudrun/client to not load the whole renderer, which cannot be bundled.
:::
An object with the following properties:
cloudRunUrl?Required if serviceName not supplied. The url of the Cloud Run service which should be used to perform the render. You must set either cloudRunUrl or serviceName, but not both.
serviceName?Required if cloudRunUrl not supplied. The name of the Cloud Run service which should be used to perform the render. This is used in conjunction with the region to determine the service endpoint, as the same service name can exist across multiple regions.
regionIn which GCP region your Cloud Run service is deployed. It's highly recommended that your Remotion site is also in the same region.
serveUrlA URL pointing to a Remotion project. Use deploySite() to deploy a Remotion project.
compositionThe id of the composition you want to render.
codecWhich codec should be used to encode the video.
Video codecs h264, vp8 and prores are supported.
Audio codecs mp3, aac and wav are also supported.
See also renderMedia() -> codec.
metadata?<AvailableFrom v="4.0.216" />inputProps?Input Props to pass to the selected composition of your video..
Must be a JSON object.
From the root component the props can be read using getInputProps().
You may transform input props using calculateMetadata().
privacy?One of:
"public" (default): The rendered media is publicly accessible under the Cloud Storage URL."private": The rendered media is not publicly available, but is available within the GCP project to those with the correct permissions.forceBucketName?Specify a specific bucket name to be used for the output. The resulting Google Cloud Storage URL will be in the format gs://{bucket-name}/renders/{render-id}/{file-name}. If not set, Remotion will choose the right bucket to use based on the region.
updateRenderProgress?import type {UpdateRenderProgress} from '@remotion/cloudrun/client';
const updateRenderProgress: UpdateRenderProgress = (progress: number, error: boolean) => {
if (error) {
console.error('Render failed');
} else {
console.log(`Render progress: ${progress * 100}%`);
}
};
renderStatusWebhook?Your webhook URL that will be called with the progress of the render. This will be sent using a POST request.
url: The webhook URL endpoint.headers: The headers to send. Content-Type: application/json is added automatically.data: The data that you want to be sent alongside the progress data.webhookProgressInterval (optional): The interval at which the webhook is called. Defaults to 0.1 (10%). (min: 0.01, max: 1){
"url": "https://example.com/webhook",
"headers": {
"Authorization": "Bearer 1234567890"
},
"data": {
"projectId": "1234567890"
},
"webhookProgressInterval": 0.1
}
{
"progress": 0.1,
"renderedFrames": 100,
"encodedFrames": 100,
"renderId": "1234567890",
"projectId": "1234567890"
}
renderIdOverride?Provide a specific render ID for the render. Otherwise a random one will be generated.
:::note You will be responsible for ensuring that the render ID is unique, otherwise it will overwrite existing renders with the same configured Render ID. :::
audioCodec?Choose the encoding of your audio.
pcm-16 if you need uncompressed audio.codec option also specifies an audio codec.Refer to the Encoding guide to see defaults and supported combinations.
jpegQuality?See renderMedia() -> jpegQuality.
audioBitrate?videoBitrate?bufferSize?<AvailableFrom v="4.0.78" />maxRate?<AvailableFrom v="4.0.78" />proResProfile?See renderMedia() -> proResProfile.
x264Preset?gopSize?<AvailableFrom v="4.0.466" />crf?See renderMedia() -> crf.
pixelFormat?See renderMedia() -> pixelFormat.
imageFormat?See renderMedia() -> imageFormat.
scale?everyNthFrame?Renders only every nth frame. For example only every second frame, every third frame and so on. Only works for rendering GIFs. See here for more details.
numberOfGifLoops?downloadBehavior?<AvailableFrom v="4.0.176"/>How the output file should behave when accessed through the Cloud Storage output link in the browser.
{"type": "play-in-browser"} - the default. The video will play in the browser.{"type": "download", fileName: null} or {"type": "download", fileName: "download.mp4"} - a Content-Disposition header will be added which makes the browser download the file. You can optionally override the filename.frameRange?Specify a single frame (a number) or a range of frames (a tuple [number, number]) to be rendered. Pass [number, null] to render from a frame to the end of the composition.<AvailableFrom v="4.0.421" inline />
envVariables?See renderMedia() -> envVariables.
chromiumOptions?Allows you to set certain Chromium / Google Chrome flags. See: Chromium flags.
disableWebSecurityboolean - default false
This will most notably disable CORS among other security features.
ignoreCertificateErrorsboolean - default false
Results in invalid SSL certificates, such as self-signed ones, being ignored.
glmuted?Disables audio output. See also renderMedia() -> muted.
sampleRate?<AvailableFrom v="4.0.448" />forceWidth?Overrides default composition width.
forceHeight?Overrides default composition height.
forceFps?<AvailableFrom v="4.0.424" />Overrides the default composition FPS.
forceDurationInFrames?<AvailableFrom v="4.0.424" />Overrides the default composition duration in frames.
logLevel?outName?The file name of the media output.
It can either be:
undefined - it will default to out plus the appropriate file extension, for example: renders/${renderId}/out.mp4.string - it will get saved to the same Cloud Storage bucket as your site under the key renders/{renderId}/{outName}. Make sure to include the file extension at the end of the string.delayRenderTimeoutInMilliseconds?A number describing how long the render may take to resolve all delayRender() calls before it times out. Default: 30000
concurrency?A number or a string describing how many browser tabs should be opened. Default "50%".
:::note Before v4.0.76, this was "100%" by default. It is now aligned to the other server-side rendering APIs. :::
enforceAudioTrack?Render a silent audio track if there wouldn't be any otherwise.
preferLossless?<AvailableFrom v="4.0.123"/>mediaCacheSizeInBytes?<AvailableFrom v="4.0.352"/>offthreadVideoCacheSizeInBytes?<AvailableFrom v="4.0.23"/>offthreadVideoThreads<AvailableFrom v="4.0.261"/>colorSpace?<AvailableFrom v="4.0.28"/>Returns a promise resolving to an object.
typeUse this to determine the structure of the response. It can either be:
The resulting object contains the following:
type'success' - render has been performed successfully.
publicUrl?The publicly accessible URL of the rendered file. Only available when the request had the privacy property set to 'public'.
renderIdA unique alphanumeric identifier for this render. Useful for obtaining status and finding the relevant files in the Cloud Storage bucket.
bucketNameThe Cloud Storage bucket name in which all files are being saved.
privacyPrivacy of the output file, either:
publicUrlIf the privacy is set to public, this will be the publicly accessible URL of the rendered file. If the privacy is not public, this will be null.
cloudStorageUriGoogle Storage path, beginning with gs://{bucket-name}. Can be used with the gsutil CLI tool.
sizeSize of the rendered media in KB.
The resulting object contains the following:
type'crash' - Cloud Run service has crashed without a response.
cloudRunEndpointEndpoint that was called when executing the render. Used by the CLI to parse the service name to determine timeout and memory limit of the service. This can then be used when analysing the logs, to provide a hint as to the reason of the crash.
message'Service crashed without sending a response. Check the logs in GCP console.' This is used by the CLI for displaying an error message.
requestStartTimedatetime of when the request was made, in UTC format - "2020-01-01T00:00:00+02:00". Can be useful for filtering the logs of the service.
requestCrashTimedatetime of when the crash was detected, in UTC format - "2020-01-01T00:00:00+02:00". Can be useful for filtering the logs of the service.
requestElapsedTimeInSecondsSeconds elapsed between the request start and crash time. Can be checked against the timeout limit to understand if this was the likely cause of the crash.