{"record":{"id":"da6a09d8f3bb685d","repo":"remotion-dev/remotion","slug":"remotion-app-serve-url-is-not-set-da6a09","errorCode":null,"errorMessage":"REMOTION_APP_SERVE_URL is not set","messagePattern":"REMOTION_APP_SERVE_URL is not set","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"packages/lambda-python/testclient_render_still.py","lineNumber":21,"sourceCode":"from remotion_lambda import RenderStillParams, Privacy, ValidStillImageFormats\nfrom remotion_lambda import RemotionClient\nfrom dotenv import load_dotenv\n\n\nload_dotenv()\n\n# Load env variables\nREMOTION_APP_REGION = os.getenv('REMOTION_APP_REGION')\nif not REMOTION_APP_REGION:\n    raise Exception(\"REMOTION_APP_REGION is not set\")\n\nREMOTION_APP_FUNCTION_NAME = os.getenv('REMOTION_APP_FUNCTION_NAME')\nif not REMOTION_APP_FUNCTION_NAME:\n    raise Exception(\"REMOTION_APP_FUNCTION_NAME is not set\")\n\nREMOTION_APP_SERVE_URL = os.getenv('REMOTION_APP_SERVE_URL')\nif not REMOTION_APP_SERVE_URL:\n    raise Exception(\"REMOTION_APP_SERVE_URL is not set\")\n\n# Construct client\nclient = RemotionClient(region=REMOTION_APP_REGION,\n                        serve_url=REMOTION_APP_SERVE_URL,\n                        function_name=REMOTION_APP_FUNCTION_NAME)\n\n# Set render still request\nrender_params = RenderStillParams(\n    composition=\"still-helloworld\",\n    privacy=Privacy.PUBLIC,\n    image_format=ValidStillImageFormats.JPEG,\n    input_props={\n        'message': 'Hello from props!'\n    },\n)\n\nrender_response = client.render_still_on_lambda(render_params)\nif render_response:","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/lambda-python/testclient_render_still.py#L3-L39","documentation":"Raised by testclient_render_still.py when REMOTION_APP_SERVE_URL is unset. The still renderer needs the bundled site URL to know which composition to capture a still from.","triggerScenarios":"Running the still example without deploying a site, or with REMOTION_APP_SERVE_URL blank.","commonSituations":"`npx remotion lambda sites deploy` never run; URL set to localhost (unreachable from Lambda); var renamed.","solutions":["Deploy a site and capture its URL.","Add `REMOTION_APP_SERVE_URL=<public URL>` to .env.","Confirm the site is reachable from the Lambda's VPC.","Run from the package directory so .env loads."],"exampleFix":"// before\nREMOTION_APP_SERVE_URL=\n// after\nREMOTION_APP_SERVE_URL=https://remotionlambda-123.s3.us-east-1.amazonaws.com/sites/abc/index.html","handlingStrategy":"validation","validationCode":"import os\nurl = os.getenv('REMOTION_APP_SERVE_URL')\nif not url or not url.startswith('http'):\n    raise SystemExit('REMOTION_APP_SERVE_URL is not set')","typeGuard":"def is_http_url(v): return isinstance(v, str) and v.startswith(('http://', 'https://'))","tryCatchPattern":"try:\n    assert os.getenv('REMOTION_APP_SERVE_URL', '').startswith('http')\nexcept AssertionError:\n    sys.exit(3)","preventionTips":["Deploy the site once and reuse its URL for both media and still examples.","Use a public URL; Lambda cannot reach localhost.","Redeploy the site when compositions change.","Keep the URL in .env under the exact variable name."],"tags":["python","lambda","configuration","environment","example","still"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}