remotion-dev/remotion · error · RemotionInvalidArgumentException
Failed to serialize progress parameters to JSON: {e}
Error message
Failed to serialize progress parameters to JSON: {e} What it means
Thrown by construct_render_progress_request when json.dumps(progress_params.serialize_params()) raises TypeError or OverflowError. Notably this call uses plain json.dumps WITHOUT the _custom_serializer default, so any Enum/dataclass/object field on RenderProgressParams that is not natively JSON-serializable will fail here even though the render-request path tolerates them.
Source
Thrown at packages/lambda-python/remotion_lambda/remotionclient.py:600
log_level (str): Log level ("error", "warning", "info", "verbose").
s3_output_provider (Optional[CustomCredentials]): Custom S3 credentials.
Returns:
str: JSON representation of the render progress request.
"""
progress_params = RenderProgressParams(
render_id=render_id,
bucket_name=bucket_name,
function_name=self.function_name,
region=self.region,
log_level=log_level,
s3_output_provider=s3_output_provider,
)
try:
# Ensure serialize_params method in models.py is typed to return Dict[str, Any]
return json.dumps(progress_params.serialize_params())
except (TypeError, OverflowError) as e:
raise RemotionInvalidArgumentException(
f"Failed to serialize progress parameters to JSON: {e}"
) from e
def render_media_on_lambda(
self, render_params: RenderMediaParams
) -> Optional[RenderMediaResponse]:
"""
Render media using AWS Lambda.
Args:
render_params (RenderMediaParams): Render parameters.
Returns:
Optional[RenderMediaResponse]: Response from the render operation, or None if no body object.
"""
params_json_str = self.construct_render_request(
render_params, render_type='video-or-audio' # Using Enum member
)View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Pass plain strings for log_level (one of 'error','warning','info','verbose').
- Ensure CustomCredentials fields are all JSON primitives before passing as s3_output_provider.
- Confirm render_id and bucket_name are str, not bytes or Enum.
- If you must use enums, resolve them to .value before calling get_render_progress.
Example fix
// before get_render_progress(render_id=r.id, bucket_name=b, log_level=LogLevel.VERBOSE) // after get_render_progress(render_id=r.id, bucket_name=b, log_level='verbose')
Defensive patterns
Strategy: try-catch
Validate before calling
import json
# progress path uses plain json.dumps (no custom serializer) - so be strict.
def progress_is_serializable(render_id, bucket_name, log_level, s3_output_provider):
values = [render_id, bucket_name, log_level]
if s3_output_provider is not None:
values += list(vars(s3_output_provider).values())
return all(isinstance(v, str) for v in values) Type guard
from typing import Any
def is_plain_str(v: Any) -> bool:
return isinstance(v, str) Try / catch
from remotion_lambda.exceptions import RemotionInvalidArgumentException
try:
progress = client.get_render_progress(render_id=rid, bucket_name=bucket)
except RemotionInvalidArgumentException as e:
logger.exception('Progress serialization failed')
raise Prevention
- Always pass log_level as a plain string literal, not an Enum.
- Ensure CustomCredentials fields are all strings before assigning.
- Note that unlike render-request path, the progress path does NOT use _custom_serializer.
- Add a unit test that json.dumps(progress_params.serialize_params()) succeeds.
When it happens
Trigger: Passing a non-string log_level (e.g. a Python Enum) to get_render_progress; an s3_output_provider (CustomCredentials) whose fields are not JSON primitives; render_id or bucket_name containing non-string types that survived construction.
Common situations: Reusing an Enum for log_level='info' vs LogLevel.INFO; providing CustomCredentials with embedded datetime/Secret objects; passing integers or None where the serializer expects str.
Related errors
- Error serializing InputProps. Check for circular references
- Failed to serialize render parameters to JSON: {e}
- Failed to parse Lambda response stream: {e}
- Failed to decode final Lambda response: {e}. Raw response: {
- Object of type {obj.__class__.__name__} is not JSON serializ
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/85dfa40a6eb66a8a.
Report an issue: GitHub.