# Path: pyuploadcare/transformations/base.py
# class BaseTransformation:
#     def __init__(
#         self, transformation: Optional[Union[str, "BaseTransformation"]] = None
#     ):
#         if isinstance(transformation, BaseTransformation):
#             transformation = transformation.effects
# 
#         self._effects = []
#         if transformation:
#             transformation = transformation.rstrip("/")  # type: ignore
#             self._effects.append(transformation)
# 
#     def set(
#         self, transformation_name: str, parameters: List[str]
#     ) -> "BaseTransformation":
#         effect = transformation_name
#         if parameters:
#             effect += "/" + "/".join(parameters)
#         self._effects.append(effect)
#         return self
# 
#     def _prefix(self, file_id: str) -> str:
#         return f"{file_id}/"
# 
#     def __str__(self):
#         return self.effects
# 
#     @property
#     def effects(self):
#         effects_ = "/-/".join(self._effects)
#         if effects_:
#             effects_ += "/"
#         return effects_
# 
#     def path(self, file_id: str) -> str:
#         path_ = self._prefix(file_id)
# 
#         effects = self.effects
#         if effects:
#             path_ += "-/" + effects
# 
#         return path_
# 
# class StrEnum(str, Enum):
#     def __str__(self):
#         return self.value


from typing import Optional, Union
from pyuploadcare.transformations.base import BaseTransformation, StrEnum
    normal = "normal"
    better = "better"
    best = "best"
    lighter = "lighter"
    lightest = "lightest"


class VideoTransformation(BaseTransformation):
    def format(
        self, file_format: Union[VideoFormat, str]
    ) -> "VideoTransformation":
        self.set("format", [file_format])
        return self

    def size(
        self,
        width: Optional[int] = None,
        height: Optional[int] = None,
        resize_mode: Optional[Union[str, ResizeMode]] = None,
    ) -> "VideoTransformation":
        parameters = [f'{width or ""}x{height or ""}']
        if resize_mode:
            parameters.append(resize_mode)
        self.set("size", parameters)
        return self

    def quality(self, file_quality: Quality) -> "VideoTransformation":
        self.set("quality", [file_quality])
        return self


# Path: pyuploadcare/transformations/base.py
# class BaseTransformation:
#     def __init__(
#         self, transformation: Optional[Union[str, "BaseTransformation"]] = None
#     ):
#         if isinstance(transformation, BaseTransformation):
#             transformation = transformation.effects
# 
#         self._effects = []
#         if transformation:
#             transformation = transformation.rstrip("/")  # type: ignore
#             self._effects.append(transformation)
# 
#     def set(
#         self, transformation_name: str, parameters: List[str]
#     ) -> "BaseTransformation":
#         effect = transformation_name
#         if parameters:
#             effect += "/" + "/".join(parameters)
#         self._effects.append(effect)
#         return self
# 
#     def _prefix(self, file_id: str) -> str:
#         return f"{file_id}/"
# 
#     def __str__(self):
#         return self.effects
# 
#     @property
#     def effects(self):
#         effects_ = "/-/".join(self._effects)
#         if effects_:
#             effects_ += "/"
#         return effects_
# 
#     def path(self, file_id: str) -> str:
#         path_ = self._prefix(file_id)
# 
#         effects = self.effects
#         if effects:
#             path_ += "-/" + effects
# 
#         return path_
# 
# class StrEnum(str, Enum):
#     def __str__(self):
#         return self.value


# Path: pyuploadcare/transformations/video.py
from typing import Optional, Union
from pyuploadcare.transformations.base import BaseTransformation, StrEnum

    normal = "normal"
    better = "better"
    best = "best"
    lighter = "lighter"
    lightest = "lightest"


class VideoTransformation(BaseTransformation):
    def format(
        self, file_format: Union[VideoFormat, str]
    ) -> "VideoTransformation":
        self.set("format", [file_format])
        return self

    def size(
        self,
        width: Optional[int] = None,
        height: Optional[int] = None,
        resize_mode: Optional[Union[str, ResizeMode]] = None,
    ) -> "VideoTransformation":
        parameters = [f'{width or ""}x{height or ""}']
        if resize_mode:
            parameters.append(resize_mode)
        self.set("size", parameters)
        return self

    def quality(self, file_quality: Quality) -> "VideoTransformation":
        self.set("quality", [file_quality])
        return self


    def cut(self, start_time: str, length: str) -> "VideoTransformation":