remotion-dev/remotion · error · RuntimeError
Cannot cancel render #{render_id}: The render was not starte
Error message
Cannot cancel render #{render_id}: The render was not started with enableCancellation: true. What it means
The Ruby SDK's cancel_render_on_lambda reads renders/{render_id}/progress.json and raises a plain RuntimeError unless progress['cancellationEnabled'] == true. Remotion Lambda cancellation is opt-in: the render must have been started with enable_cancellation: true in the render media payload (packages/lambda-ruby/lib/remotion_lambda/render_media_on_lambda_payload.rb defaults enable_cancellation: false).
Source
Thrown at packages/lambda-ruby/lib/remotion_lambda/sdk.rb:48
raise "Failed to call renderMediaOnLambda: #{body['message']}" if body["type"] == "error"
body
end
def render_still_on_lambda(function_name, payload)
body = invoke(function_name, payload)
raise "Failed to call renderStillOnLambda: #{body['message']}" if body["type"] == "error"
body
end
def cancel_render_on_lambda(bucket_name, render_id)
progress_response = s3_client.get_object(
bucket: bucket_name,
key: "renders/#{render_id}/progress.json"
)
progress = JSON.parse(progress_response.body.read)
unless progress['cancellationEnabled'] == true
raise "Cannot cancel render #{render_id}: The render was not started with enableCancellation: true."
end
s3_client.put_object(
bucket: bucket_name,
key: "renders/#{render_id}/cancel.json",
body: JSON.generate(cancelledAt: (Time.now.to_f * 1000).floor),
content_type: 'application/json'
)
nil
end
private
# Lambda methods
def invoke(function_name, payload)
response = @lambda_client.invoke({
function_name: function_name,
payload: JSON.generate(payload)View on GitHub (pinned to 10db9de073)
Solutions
- Build the render payload with cancellation enabled: get_render_media_on_lambda_payload(codec: 'h264', enable_cancellation: true, ...) and start a new render.
- The already-running render cannot be canceled - let it finish or discard its output.
- Verify renders/{render_id}/progress.json contains cancellationEnabled: true before calling cancel.
- If progress.json lacks the field entirely, update the deployed Remotion functions to match the SDK.
Example fix
# before payload = get_render_media_on_lambda_payload( codec: "h264" # enable_cancellation defaults to false ) response = client.render_media_on_lambda(payload) client.cancel_render_on_lambda(response["renderId"], bucket) # raises # after payload = get_render_media_on_lambda_payload( codec: "h264", enable_cancellation: true ) response = client.render_media_on_lambda(payload) client.cancel_render_on_lambda(response["renderId"], bucket) # works
Defensive patterns
Strategy: validation
Validate before calling
# Render time - opt in once, in one helper payload = get_render_media_on_lambda_payload( codec: "h264", enable_cancellation: true # required for cancel_render_on_lambda ) response = client.render_media_on_lambda(payload)
Try / catch
begin
client.cancel_render_on_lambda(render_id, bucket_name)
rescue RuntimeError => e
if e.message.include?("enableCancellation")
# render was not started cancellable - report clearly, do not retry
else
raise
end
end Prevention
- Build all render payloads through one helper that sets enable_cancellation: true whenever cancellation may be needed.
- Decide cancellability before starting the render - the flag cannot be added mid-flight.
- Verify progress.json contains cancellationEnabled: true when adding cancellation to an existing integration.
When it happens
Trigger: Calling cancel_render_on_lambda for a render started with get_render_media_on_lambda_payload(...) that did not pass enable_cancellation: true, so progress.json records cancellationEnabled as false.
Common situations: Canceling ad hoc after a render started; payloads built by shared helper code that omits the keyword; deployed Remotion Lambda functions older than the Ruby SDK so the field never lands in progress.json.
Related errors
- Cannot cancel render {$renderId}: The render was not started
- Cannot cancel render {render_id}: The render was not started
- Could not read progress for render {render_id}: {error}
- Cannot cancel render ${input.renderId}: The render was not s
- could not read progress for render %q: %w
AI-assisted analysis of remotion-dev/remotion@10db9de073 (2026-08-22).
Data as JSON: /api/errors/36ab5074e25bfa75.
Report an issue: GitHub.