Triggering renders from Python
available from v4.0.15
To trigger a Lambda render using Python, install the remotion-lambda
package using pip
, by executing pip install remotion-lambda
from your python project. Use the same version as the remotion
version you are using from NPM, e.g. pip install remotion-lambda==4.0.15
(see newest version).
You first need to complete the Lambda setup.
Limitations
Before v4.0.315: Sending large input props (>200KB) was not supported.
Starting from v4.0.315, the Python SDK automatically handles large input props by uploading them to S3 when they exceed AWS Lambda payload limits. Props larger than 200KB for video renders and 5MB for still renders are automatically compressed using the same logic as the JavaScript SDK. The SDK will automatically find or create an appropriate S3 bucket following Remotion's naming conventions.
Rendering a video
Below is a snippet showing how to initiate a render request and get its status.
render_media.pypython
from remotion_lambda import RenderMediaParams, Privacy, ValidStillImageFormatsfrom remotion_lambda import RemotionClientimport osfrom dotenv import load_dotenvload_dotenv()# Load env variablesREMOTION_APP_REGION = os.getenv('REMOTION_APP_REGION')if not REMOTION_APP_REGION:raise Exception("REMOTION_APP_REGION is not set")REMOTION_APP_FUNCTION_NAME = os.getenv('REMOTION_APP_FUNCTION_NAME')if not REMOTION_APP_FUNCTION_NAME:raise Exception("REMOTION_APP_FUNCTION_NAME is not set")REMOTION_APP_SERVE_URL = os.getenv('REMOTION_APP_SERVE_URL')if not REMOTION_APP_SERVE_URL:raise Exception("REMOTION_APP_SERVE_URL is not set")# Construct clientclient = RemotionClient(region=REMOTION_APP_REGION,serve_url=REMOTION_APP_SERVE_URL,function_name=REMOTION_APP_FUNCTION_NAME)# Set render requestrender_params = RenderMediaParams(composition="react-svg",privacy=Privacy.PUBLIC,image_format=ValidStillImageFormats.JPEG,input_props={'hi': 'there'},)render_response = client.render_media_on_lambda(render_params)if render_response:# Execute render requestprint("Render ID:", render_response.render_id)print("Bucket name:", render_response.bucket_name)# Execute progress requestprogress_response = client.get_render_progress(render_id=render_response.render_id, bucket_name=render_response.bucket_name)while progress_response and not progress_response.done:print("Overall progress")print(str(progress_response.overallProgress * 100) + "%")progress_response = client.get_render_progress(render_id=render_response.render_id, bucket_name=render_response.bucket_name)print("Render done!", progress_response.outputFile)
Large input props available from v4.0.315
The Python SDK automatically handles large input props by uploading them to S3 when they exceed AWS Lambda payload limits:
- Video/audio renders: Props larger than ~194KB
- Still renders: Props larger than ~4.9MB
When large props are detected, they are automatically uploaded to S3 and referenced by the Lambda function. The SDK will find an existing Remotion bucket or create a new one automatically, following the same logic as the JavaScript SDK. This process is transparent to the user.
large_props_example.pypython
# Large input props are handled automaticallylarge_props = {'bigData': ['x' * 1000] * 250, # ~250KB of data'description': 'This will be automatically uploaded to S3'}render_params = RenderMediaParams(composition="my-composition",input_props=large_props, # Automatically compressed# ... other parameters)# The render works the same way, compression is handled internallyresponse = client.render_media_on_lambda(render_params)
Rendering an image
Below is a snippet showing how to initiate a still image render. Note that it does not require monitoring the render progress.
render_still.pypython
from remotion_lambda import RenderStillParams, Privacy, ValidStillImageFormatsfrom remotion_lambda import RemotionClientimport osfrom dotenv import load_dotenvload_dotenv()# Load env variablesREMOTION_APP_REGION = os.getenv('REMOTION_APP_REGION')if not REMOTION_APP_REGION:raise Exception("REMOTION_APP_REGION is not set")REMOTION_APP_FUNCTION_NAME = os.getenv('REMOTION_APP_FUNCTION_NAME')if not REMOTION_APP_FUNCTION_NAME:raise Exception("REMOTION_APP_FUNCTION_NAME is not set")REMOTION_APP_SERVE_URL = os.getenv('REMOTION_APP_SERVE_URL')if not REMOTION_APP_SERVE_URL:raise Exception("REMOTION_APP_SERVE_URL is not set")# Construct clientclient = RemotionClient(region=REMOTION_APP_REGION,serve_url=REMOTION_APP_SERVE_URL,function_name=REMOTION_APP_FUNCTION_NAME)# Set render still requestrender_params = RenderStillParams(composition="still-helloworld",privacy=Privacy.PUBLIC,image_format=ValidStillImageFormats.JPEG,input_props={'message': 'Hello from props!'},)render_response = client.render_still_on_lambda(render_params)if render_response:# Execute render requestprint("Render ID:", render_response.render_id)print("Bucket name:", render_response.bucket_name)print("Render done! File at ", render_response.url)
Breaking changes
4.0.82
- The
data
field is nowinput_props
. RenderParams
has been renamed toRenderMediaParams
.RenderProgress
has been renamed toRenderMediaProgress
.RenderResponse
is nowRenderMediaResponse
, and its fields have been updated:renderId
is nowrender_id
, andbucketName
has been changed tobucket_name
.- The following types have been added:
CostsInfo
,Privacy
,ValidStillImageFormats
,LogLevel
,OpenGlRenderer
,ChromiumOptions
,CustomCredentialsWithoutSensitiveData
,CustomCredentials
,OutNameInputObject
,PlayInBrowser
,Download
,DeleteAfter
. These can be used for the fields onRenderMediaParams
andRenderStillParams
.