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

  1. Pass plain strings for log_level (one of 'error','warning','info','verbose').
  2. Ensure CustomCredentials fields are all JSON primitives before passing as s3_output_provider.
  3. Confirm render_id and bucket_name are str, not bytes or Enum.
  4. 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

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


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/85dfa40a6eb66a8a. Report an issue: GitHub.