{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://vidieditor.com/schemas/v2.0/sequence-schema_v2.0.json",
    "$defs": {
        "AnimationCssParameterSettingType": {
            "oneOf": [
                {
                    "const": 0,
                    "title": "Opacity"
                },
                {
                    "const": 1,
                    "title": "PositionScaling"
                }
            ],
            "type": "number"
        },
        "AnimationParameterSettingType": {
            "oneOf": [
                {
                    "const": 0,
                    "title": "LengthAdjustment"
                },
                {
                    "const": 1,
                    "title": "Hide"
                },
                {
                    "const": 2,
                    "title": "Text"
                },
                {
                    "const": 3,
                    "title": "Color"
                },
                {
                    "const": 4,
                    "title": "Css"
                }
            ],
            "type": "number"
        },
        "ClipMediaType": {
            "enum": [
                "Video",
                "Audio",
                "Voice",
                "Pseudo",
                "Image",
                "Animation"
            ],
            "type": "string"
        },
        "ClipState": {
            "enum": [
                "IDLE",
                "MOVING",
                "RESIZING",
                "RECORDING",
                "HIGHLIGHT"
            ],
            "type": "string"
        },
        "CollectionType": {
            "oneOf": [
                {
                    "const": 0,
                    "title": "Video"
                },
                {
                    "const": 1,
                    "title": "Audio"
                },
                {
                    "const": 2,
                    "title": "Voice"
                },
                {
                    "const": 3,
                    "title": "Animation"
                },
                {
                    "const": 4,
                    "title": "Channel"
                },
                {
                    "const": 5,
                    "title": "Pseudo"
                }
            ],
            "type": "number"
        },
        "Effect": {
            "anyOf": [
                {
                    "$ref": "#/$defs/IPositionEffect"
                },
                {
                    "$ref": "#/$defs/IScaleEffect"
                },
                {
                    "$ref": "#/$defs/IRotationEffect"
                },
                {
                    "$ref": "#/$defs/IOpacityEffect"
                },
                {
                    "$ref": "#/$defs/IGainEffect"
                },
                {
                    "$ref": "#/$defs/IMaskEffectBase"
                },
                {
                    "$ref": "#/$defs/IBlurEffect"
                },
                {
                    "$ref": "#/$defs/IMosaicEffect"
                }
            ]
        },
        "EffectKeyFrameType": {
            "enum": [
                "constant",
                "linear",
                "exponential",
                "logarithmic",
                "cubic",
                "bspline"
            ],
            "type": "string"
        },
        "EffectType": {
            "enum": [
                "opacity",
                "scale",
                "rotation",
                "position",
                "blur",
                "mosaic",
                "gain"
            ],
            "type": "string"
        },
        "IAudioMix": {
            "properties": {
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "outputChannels": {
                    "description": "The output channel information.",
                    "items": {
                        "$ref": "#/$defs/IAudioMixChannel"
                    },
                    "type": "array"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "outputChannels"
            ],
            "type": "object"
        },
        "IAudioMixChannel": {
            "properties": {
                "sourceChannels": {
                    "description": "The source channel information.",
                    "items": {
                        "$ref": "#/$defs/IAudioMixSourceChannel"
                    },
                    "type": "array"
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "sourceChannels"
            ],
            "type": "object"
        },
        "IAudioMixSourceChannel": {
            "properties": {
                "gain": {
                    "description": "The value of the gain.",
                    "type": "number"
                },
                "trackIndex": {
                    "description": "The track index.",
                    "type": "number"
                },
                "trackChannel": {
                    "description": "The number of the track channels.",
                    "type": "number"
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "gain",
                "trackIndex",
                "trackChannel"
            ],
            "type": "object"
        },
        "IAudioOutputSettings": {
            "properties": {
                "mixes": {
                    "description": "The transcode preset channel mix type information.",
                    "items": {
                        "$ref": "#/$defs/IAudioMix"
                    },
                    "type": "array"
                },
                "sampleRate": {
                    "description": "The sample rate of the audio output.",
                    "type": "number"
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "type": "object"
        },
        "IBlurEffect": {
            "properties": {
                "id": {
                    "description": "The unique identifier of the effect as it can be multiple.",
                    "type": "string"
                },
                "name": {
                    "description": "The name of the effect.",
                    "type": "string"
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "maskType": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The mask type of the effect. None = 0, Ellipse = 1 and Polygon = 2."
                },
                "border": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The border type of the effect. None = 0, BorderOnly = 1 and MaskWithBorder = 2."
                },
                "blurriness": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The blurriness of the effect."
                },
                "h": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The height of the effect."
                },
                "w": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The width of the effect."
                },
                "x": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The horizontal position of the effect."
                },
                "y": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The vertical position of the effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "id",
                "type",
                "maskType",
                "border",
                "blurriness",
                "h",
                "w",
                "x",
                "y"
            ],
            "type": "object"
        },
        "IClip": {
            "properties": {
                "id": {
                    "description": "The unique identifier for the clip in Vidicore.",
                    "type": "string"
                },
                "itemUniqueId": {
                    "description": "The unique identifier for the camera card item. Only show when the clip is camera card item type.",
                    "type": "string"
                },
                "path": {
                    "description": "The proxy path url of the item where the clip comes from.",
                    "type": "string"
                },
                "in": {
                    "description": "The start position of the clip in the track.",
                    "type": "number"
                },
                "out": {
                    "description": "The end position of the clip in the track.",
                    "type": "number"
                },
                "sourceIn": {
                    "description": "The start position of the clip in the item.",
                    "type": "number"
                },
                "sourceOut": {
                    "description": "The end position of the clip in the item.",
                    "type": "number"
                },
                "clipSourceIn": {
                    "description": "The start position of the clip in the item.",
                    "type": "number"
                },
                "clipDuration": {
                    "description": "The duration of the clip in the track.",
                    "type": "number"
                },
                "itemDuration": {
                    "description": "The duration of the item where the clip comes from.",
                    "type": "number"
                },
                "name": {
                    "description": "The name of the clip.",
                    "type": "string"
                },
                "mediaType": {
                    "$ref": "#/$defs/ClipMediaType",
                    "description": "The type of the clip."
                },
                "groupId": {
                    "description": "The unique identifier of the grouping clips.",
                    "type": "string"
                },
                "linkId": {
                    "description": "The unique identifier of the linked video and audio clips, or animation clip.",
                    "type": "string"
                },
                "local": {
                    "description": "The indicator of whether the clip is a local media (Voice over buffer).",
                    "type": "boolean"
                },
                "localId": {
                    "description": "The unique identifier of the local media id (Voice over buffer id).",
                    "type": "string"
                },
                "properties": {
                    "description": "To do for other information, plan for future development.",
                    "items": {
                        "$ref": "#/$defs/IProperties"
                    },
                    "type": "array"
                },
                "effects": {
                    "description": "The transformations applied to the clip in order to alter its appearance.",
                    "items": {
                        "$ref": "#/$defs/Effect"
                    },
                    "type": "array"
                },
                "audioMapping": {
                    "description": "The information of the audio mapped of the clip. [0] means mono, [0,1] means stereo. Example: [5, 6] => map channels 5 and 6 of the source.",
                    "items": {
                        "type": "number"
                    },
                    "uniqueItems": true,
                    "type": "array"
                },
                "animationParaChanges": {
                    "$ref": "#/$defs/ILottieAnimationParameterChanges",
                    "description": "The information of lottie animation of the clip."
                },
                "isSelected": {
                    "description": "The indicator of whether the clip is currently selected.",
                    "type": "boolean"
                },
                "state": {
                    "$ref": "#/$defs/ClipState",
                    "description": "The status of the clip in the timeline."
                },
                "trackLevel": {
                    "description": "The indicator of the clip is in which level of the track.",
                    "type": "number"
                },
                "trackType": {
                    "$ref": "#/$defs/CollectionType",
                    "description": "The indicator of the clip is in what type of the track."
                },
                "isAudio": {
                    "description": "The indicator of whether the clip is audio type.",
                    "type": "boolean"
                },
                "isAnimationLoadInLocal": {
                    "description": "The indicator of whether the animation of the clip is loading locally.",
                    "type": "boolean"
                },
                "voiceoverStatus": {
                    "$ref": "#/$defs/VoiceoverAudioStatus",
                    "description": "The status of voice over."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "id",
                "itemUniqueId",
                "path",
                "in",
                "out",
                "sourceIn",
                "sourceOut",
                "clipSourceIn",
                "clipDuration",
                "itemDuration",
                "name",
                "mediaType",
                "local",
                "effects",
                "audioMapping",
                "isSelected",
                "state",
                "trackLevel",
                "trackType",
                "isAudio"
            ],
            "type": "object"
        },
        "IEffectKeyFrame<number>": {
            "properties": {
                "position": {
                    "description": "The number in frames. It is based on the parent's item. If the parent item is a clip, it is relative to clip in (0 is start of the clip)\nwhile if the parent item is a track then it is based on track time (0 is start of the track)",
                    "type": "number"
                },
                "type": {
                    "$ref": "#/$defs/EffectKeyFrameType",
                    "description": "The type of the effect. Currently Only support linear type."
                },
                "value": {
                    "description": "The effect keyframe value.",
                    "type": "number"
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "position",
                "type",
                "value"
            ],
            "type": "object"
        },
        "IEffectParam<number>": {
            "properties": {
                "default": {
                    "description": "The effect value of the whole clip.",
                    "type": "number"
                },
                "keyFrames": {
                    "description": "The effect value of the keyframe of the clip.",
                    "items": {
                        "$ref": "#/$defs/IEffectKeyFrame<number>"
                    },
                    "type": "array"
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "type": "object"
        },
        "IGainEffect": {
            "properties": {
                "gain": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The gain of the effect."
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "gain",
                "type"
            ],
            "type": "object"
        },
        "ILottieAnimationParameterChanges": {
            "properties": {
                "global": {
                    "description": "The global parameter setting information.",
                    "items": {
                        "$ref": "#/$defs/LottieAnimationParameterSettingChanges"
                    },
                    "type": "array"
                },
                "layers": {
                    "description": "The layer parameter setting information.",
                    "items": {
                        "$ref": "#/$defs/LottieAnimationLayerParameterChanges"
                    },
                    "type": "array"
                },
                "fonts": {
                    "description": "The fonts parameter setting information.",
                    "items": {
                        "$ref": "#/$defs/LottieAnimationFontSelector"
                    },
                    "type": "array"
                },
                "mode": {
                    "description": "The mode of animation",
                    "type": "string"
                }
            },
            "required": [
                "global",
                "layers",
                "fonts"
            ],
            "type": "object"
        },
        "IMaskEffectBase": {
            "properties": {
                "name": {
                    "description": "The name of the effect.",
                    "type": "string"
                },
                "id": {
                    "description": "The unique identifier of the effect as it can be multiple.",
                    "type": "string"
                },
                "x": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The horizontal position of the effect."
                },
                "y": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The vertical position of the effect."
                },
                "w": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The width of the effect."
                },
                "h": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The height of the effect."
                },
                "border": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The border type of the effect. None = 0, BorderOnly = 1 and MaskWithBorder = 2."
                },
                "maskType": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The mask type of the effect. None = 0, Ellipse = 1 and Polygon = 2."
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "id",
                "x",
                "y",
                "w",
                "h",
                "border",
                "maskType",
                "type"
            ],
            "type": "object"
        },
        "IMosaicEffect": {
            "properties": {
                "horizBlocks": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The number of the horizontal block."
                },
                "vertBlocks": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The number of the vertical block."
                },
                "name": {
                    "description": "The name of the effect.",
                    "type": "string"
                },
                "id": {
                    "description": "The unique identifier of the effect as it can be multiple.",
                    "type": "string"
                },
                "x": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The horizontal position of the effect."
                },
                "y": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The vertical position of the effect."
                },
                "w": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The width of the effect."
                },
                "h": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The height of the effect."
                },
                "border": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The border type of the effect. None = 0, BorderOnly = 1 and MaskWithBorder = 2."
                },
                "maskType": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The mask type of the effect. None = 0, Ellipse = 1 and Polygon = 2."
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "horizBlocks",
                "vertBlocks",
                "id",
                "x",
                "y",
                "w",
                "h",
                "border",
                "maskType",
                "type"
            ],
            "type": "object"
        },
        "IOpacityEffect": {
            "properties": {
                "opacity": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The opacity of the effect."
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "opacity",
                "type"
            ],
            "type": "object"
        },
        "IOutputSettings": {
            "properties": {
                "video": {
                    "$ref": "#/$defs/IVideoOutputSettings",
                    "description": "The video output settings."
                },
                "audio": {
                    "$ref": "#/$defs/IAudioOutputSettings",
                    "description": "The audio output settings."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "type": "object"
        },
        "IPositionEffect": {
            "properties": {
                "x": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The horizontal offset in output."
                },
                "y": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The vertical offset in output."
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "x",
                "y",
                "type"
            ],
            "type": "object"
        },
        "IProperties": {
            "properties": {
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "type": "object"
        },
        "IRational": {
            "properties": {
                "numerator": {
                    "description": "The numerator of the ratio.",
                    "type": "number"
                },
                "denominator": {
                    "description": "The denominator of the ratio.",
                    "type": "number"
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "numerator",
                "denominator"
            ],
            "type": "object"
        },
        "IRotationEffect": {
            "properties": {
                "angle": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The angle of the effect."
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "angle",
                "type"
            ],
            "type": "object"
        },
        "IScaleEffect": {
            "properties": {
                "horiz": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The horizontal scale."
                },
                "vert": {
                    "$ref": "#/$defs/IEffectParam<number>",
                    "description": "The vertical scale."
                },
                "link": {
                    "description": "The indicator of whether the horiz and vert is linked. If true, the changes applied to both side else just apply on one side.",
                    "type": "boolean"
                },
                "type": {
                    "$ref": "#/$defs/EffectType",
                    "description": "The type of effect."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "horiz",
                "vert",
                "link",
                "type"
            ],
            "type": "object"
        },
        "ITrack": {
            "properties": {
                "mute": {
                    "description": "The indicator of hide or show for the whole track.",
                    "type": "boolean"
                },
                "channelMute": {
                    "description": "The information of the mute status of audio channels and it is stereo type. It is mainly for the audio but optional for video, voice and animation.",
                    "items": {
                        "type": "boolean"
                    },
                    "type": "array"
                },
                "channelCount": {
                    "description": "The total number of the audio channels, only for audio track.",
                    "type": "number"
                },
                "level": {
                    "description": "The indicator of the track position in the sequence.",
                    "type": "number"
                },
                "clips": {
                    "description": "The segments or blocks in the track.",
                    "items": {
                        "$ref": "#/$defs/IClip"
                    },
                    "type": "array"
                },
                "transitions": {
                    "description": "The techniques used to move smoothly from one clip to the next.",
                    "items": {
                        "$ref": "#/$defs/ITransition"
                    },
                    "type": "array"
                },
                "effects": {
                    "description": "The transformations applied to clip to alter its appearance. Audio and voice leveling are for track level.",
                    "items": {
                        "$ref": "#/$defs/Effect"
                    },
                    "type": "array"
                },
                "type": {
                    "$ref": "#/$defs/CollectionType",
                    "description": "The type of the sequence."
                },
                "pseudoClips": {
                    "description": "The blank in the sequence between the clips.",
                    "items": {
                        "$ref": "#/$defs/IClip"
                    },
                    "type": "array"
                },
                "isActive": {
                    "description": "The indicator of whether the sequence is using.",
                    "type": "boolean"
                },
                "isSelected": {
                    "description": "The indicator of whether the sequence is currently selected.",
                    "type": "boolean"
                },
                "isLoading": {
                    "description": "The indicator of whether the sequence is currently loading in the player.",
                    "type": "boolean"
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "mute",
                "channelMute",
                "level",
                "clips",
                "transitions",
                "effects",
                "type",
                "pseudoClips",
                "isActive",
                "isSelected",
                "isLoading"
            ],
            "type": "object"
        },
        "ITransition": {
            "properties": {
                "clipId": {
                    "description": "The unique identifier of the clip.",
                    "type": "string"
                },
                "clipLinkId": {
                    "description": "The unique identifier of the linked video and audio clips.",
                    "type": "string"
                },
                "clipMediaType": {
                    "$ref": "#/$defs/ClipMediaType",
                    "description": "The type of the clip."
                },
                "type": {
                    "$ref": "#/$defs/TransitionType",
                    "description": "The type of the transition."
                },
                "position": {
                    "$ref": "#/$defs/TransitionPosition",
                    "description": "The position of the transition."
                },
                "in": {
                    "description": "The start position of the transition.",
                    "type": "number"
                },
                "out": {
                    "description": "The end position of the transition.",
                    "type": "number"
                },
                "color": {
                    "description": "The color of the transition. Example: \"white\" or \"#FFFFFF\"",
                    "type": "string"
                },
                "displayName": {
                    "description": "The name of the transition.",
                    "type": "string"
                },
                "trackLevel": {
                    "description": "The indicator of the transition is in which level of the track.",
                    "type": "number"
                },
                "trackType": {
                    "$ref": "#/$defs/CollectionType",
                    "description": "The indicator of the transition is in what type of the track."
                },
                "isAudio": {
                    "description": "The indicator of whether the transition is audio type.",
                    "type": "boolean"
                },
                "isSelected": {
                    "description": "The indicator of whether the transition is currently selected.",
                    "type": "boolean"
                },
                "state": {
                    "$ref": "#/$defs/ClipState",
                    "description": "The status of the clip in the timeline."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "required": [
                "clipId",
                "clipLinkId",
                "clipMediaType",
                "type",
                "position",
                "in",
                "out",
                "displayName",
                "trackLevel",
                "trackType",
                "isAudio",
                "isSelected",
                "state"
            ],
            "type": "object"
        },
        "IVideoOutputSettings": {
            "properties": {
                "width": {
                    "description": "The width of the video output.",
                    "type": "number"
                },
                "height": {
                    "description": "The height of the video output.",
                    "type": "number"
                },
                "aspectRatio": {
                    "$ref": "#/$defs/IRational",
                    "description": "The aspect ratio of the video output."
                },
                "frameRate": {
                    "$ref": "#/$defs/IRational",
                    "description": "The framerate of the video output."
                },
                "objectId": {
                    "description": "The unique identifier of the object.",
                    "type": "string"
                },
                "onPropertyChanged": {
                    "$ref": "#/$defs/PropertyChangedEvent",
                    "description": "The property change event."
                }
            },
            "type": "object"
        },
        "LayerType": {
            "description": "https://mattbas.gitlab.io/python-lottie/group__Lottie.html#lottie_Layer",
            "oneOf": [
                {
                    "const": 0,
                    "title": "PRECOMP"
                },
                {
                    "const": 1,
                    "title": "SOLID"
                },
                {
                    "const": 2,
                    "title": "IMAGE"
                },
                {
                    "const": 3,
                    "title": "NULL"
                },
                {
                    "const": 4,
                    "title": "SHAPE"
                },
                {
                    "const": 5,
                    "title": "TEXT"
                },
                {
                    "const": 6,
                    "title": "AUDIO"
                },
                {
                    "const": 7,
                    "title": "VIDEOPLACEHOLDER"
                },
                {
                    "const": 8,
                    "title": "IMAGESEQUENCE"
                },
                {
                    "const": 9,
                    "title": "VIDEO"
                },
                {
                    "const": 10,
                    "title": "IMAGEPLACEHOLDER"
                },
                {
                    "const": 11,
                    "title": "GUIDE"
                },
                {
                    "const": 12,
                    "title": "ADJUSTMENT"
                },
                {
                    "const": 13,
                    "title": "CAMERA"
                },
                {
                    "const": 14,
                    "title": "LIGHT"
                },
                {
                    "const": 15,
                    "title": "DATA"
                }
            ],
            "type": "number"
        },
        "LengthAdjustmentType": {
            "enum": [
                "OFF",
                "AUTO",
                "MARKER"
            ],
            "type": "string"
        },
        "LottieAnimationCssParameterSettingChanges": {
            "properties": {
                "type": {
                    "$ref": "#/$defs/AnimationCssParameterSettingType",
                    "description": "The css type."
                },
                "value": {
                    "description": "The value of the parameter.",
                    "type": "number"
                }
            },
            "required": [
                "type",
                "value"
            ],
            "type": "object"
        },
        "LottieAnimationFontSelector": {
            "properties": {
                "fontName": {
                    "description": "The font name.",
                    "type": "string"
                },
                "guid": {
                    "description": "The unique identifier of the selector.",
                    "type": "string"
                }
            },
            "required": [
                "fontName",
                "guid"
            ],
            "type": "object"
        },
        "LottieAnimationLayerParameterChanges": {
            "properties": {
                "layerIndex": {
                    "description": "The index of the layer.",
                    "type": "number"
                },
                "layerName": {
                    "description": "The name of the layer.",
                    "type": "string"
                },
                "layerType": {
                    "$ref": "#/$defs/LayerType",
                    "description": "The type of the layer."
                },
                "changes": {
                    "description": "The changes of the animation layer.",
                    "items": {
                        "$ref": "#/$defs/LottieAnimationParameterSettingChanges"
                    },
                    "type": "array"
                }
            },
            "required": [
                "layerIndex",
                "layerName",
                "layerType",
                "changes"
            ],
            "type": "object"
        },
        "LottieAnimationLengthAdjustmentOption": {
            "properties": {
                "startFrameReserved": {
                    "description": "The reserved start frame of the adjustment.",
                    "type": "number"
                },
                "minDuration": {
                    "description": "The minimum duration of the adjustment.",
                    "type": "number"
                },
                "type": {
                    "$ref": "#/$defs/LengthAdjustmentType",
                    "description": "The type of the adjustment."
                }
            },
            "required": [
                "startFrameReserved",
                "minDuration",
                "type"
            ],
            "type": "object"
        },
        "LottieAnimationMultiValue": {
            "properties": {
                "elementName": {
                    "description": "The name of element.",
                    "type": "string"
                },
                "pathToValue": {
                    "description": "The path to the place where the value stored.",
                    "type": "string"
                },
                "value": {
                    "anyOf": [
                        {
                            "items": {
                                "$ref": "#/$defs/LottieAnimationMultiValue"
                            },
                            "type": "array"
                        },
                        {
                            "type": [
                                "string",
                                "number",
                                "boolean"
                            ]
                        }
                    ],
                    "description": "The value of the animation."
                }
            },
            "required": [
                "pathToValue",
                "value"
            ],
            "type": "object"
        },
        "LottieAnimationParameterSettingChanges": {
            "properties": {
                "type": {
                    "$ref": "#/$defs/AnimationParameterSettingType",
                    "description": "The type of the parameter setting."
                },
                "value": {
                    "anyOf": [
                        {
                            "items": {
                                "$ref": "#/$defs/LottieAnimationMultiValue"
                            },
                            "type": "array"
                        },
                        {
                            "items": {
                                "$ref": "#/$defs/LottieAnimationCssParameterSettingChanges"
                            },
                            "type": "array"
                        },
                        {
                            "type": [
                                "string",
                                "number",
                                "boolean"
                            ]
                        }
                    ],
                    "description": "The value of the parameter."
                },
                "selectionValues": {
                    "description": "The selection options.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "lengthAdjustment": {
                    "$ref": "#/$defs/LottieAnimationLengthAdjustmentOption",
                    "description": "The adjustment for length."
                }
            },
            "required": [
                "type",
                "value"
            ],
            "type": "object"
        },
        "PropertyChangedEvent": {
            "properties": {
                "_handlers": {
                    "default": [],
                    "items": {
                        "type": "object"
                    },
                    "type": "array"
                }
            },
            "required": [
                "_handlers"
            ],
            "type": "object"
        },
        "TransitionPosition": {
            "enum": [
                "in",
                "out",
                "cut",
                "invalid"
            ],
            "type": "string"
        },
        "TransitionType": {
            "enum": [
                "crossfade",
                "dip"
            ],
            "type": "string"
        },
        "VoiceoverAudioStatus": {
            "oneOf": [
                {
                    "const": 0,
                    "title": "Pending"
                },
                {
                    "const": 1,
                    "title": "Available"
                },
                {
                    "const": 2,
                    "title": "Unavailable"
                }
            ],
            "type": "number"
        }
    },
    "properties": {
        "version": {
            "description": "The version of the sequence model.",
            "type": "string"
        },
        "duration": {
            "description": "The duration of the sequence in frame.",
            "type": "number"
        },
        "id": {
            "description": "The unique identifier for the sequence.",
            "type": "string"
        },
        "lastOutTime": {
            "description": "The last segment's out of the sequence in frame.",
            "type": "number"
        },
        "startTimeCode": {
            "description": "The start time code of the sequence in frame. Example: 00:00:00:00@PAL",
            "type": "string"
        },
        "title": {
            "description": "The name of the sequence.",
            "type": "string"
        },
        "videoTracks": {
            "description": "The video tracks of the sequence.",
            "items": {
                "$ref": "#/$defs/ITrack"
            },
            "type": "array"
        },
        "audioTracks": {
            "description": "The audio tracks of the sequence.",
            "items": {
                "$ref": "#/$defs/ITrack"
            },
            "type": "array"
        },
        "animationTracks": {
            "description": "The animation tracks of the sequence.",
            "items": {
                "$ref": "#/$defs/ITrack"
            },
            "type": "array"
        },
        "frameRate": {
            "$ref": "#/$defs/IRational",
            "description": "The framerate of the sequence. Rational representation instead. Example: 30000/1001"
        },
        "output": {
            "$ref": "#/$defs/IOutputSettings",
            "description": "For future usage. Currently it is seldom to be used."
        },
        "objectId": {
            "description": "The unique identifier of the object.",
            "type": "string"
        },
        "onPropertyChanged": {
            "$ref": "#/$defs/PropertyChangedEvent",
            "description": "The property change event."
        }
    },
    "title": "Sequence",
    "type": "object",
    "required": [
        "version",
        "duration",
        "id",
        "lastOutTime",
        "startTimeCode",
        "title",
        "videoTracks",
        "audioTracks",
        "animationTracks",
        "frameRate"
    ]
}