{
    "effectName": "Video",
    "properties": [
        {
            "id": "SynchroniseWithAudio",
            "label": "Sync to audio file",
            "description": "When enabled, uses the sequence audio file as the video source and synchronises video playback to the audio timeline position. The picked video file, Start Time, Duration Treatment, and Speed are all overridden by the audio file's properties when this is on.",
            "tooltip": "Use sequence audio file as the video source and synchronise to the audio timeline.",
            "type": "bool",
            "controlType": "checkbox",
            "default": false
        },
        {
            "id": "Video_FilenameBlock",
            "label": "",
            "description": "Video file selection: Select / Clear buttons, animated preview thumbnail, filename label, computed video duration, and a 'Match Effect To Video Duration' button.",
            "type": "string",
            "controlType": "custom",
            "default": ""
        },
        {
            "id": "Video_Starttime",
            "label": "Start Time",
            "description": "The timestamp in seconds within the video file to begin playback from. Allows skipping an intro or starting mid-video. Maximum updates dynamically once the picked video has been probed.",
            "type": "float",
            "controlType": "slider",
            "default": 0.0,
            "divisor": 100,
            "min": 0,
            "max": 20
        },
        {
            "id": "Video_DurationRow",
            "label": "",
            "description": "Read-only display of the picked video's total duration plus a 'Match Effect To Video Duration' button that resizes the effect on the timeline to match.",
            "type": "string",
            "controlType": "custom",
            "default": ""
        },
        {
            "id": "Video_DurationTreatment",
            "label": "Duration Treatment",
            "description": "How the video duration maps to the effect duration. Normal plays at native speed, Loop repeats the video, Slow/Accelerate stretches or compresses playback to fit, and Manual allows explicit speed control.",
            "type": "enum",
            "controlType": "choice",
            "options": [
                "Normal",
                "Normal No Blue",
                "Loop",
                "Slow/Accelerate",
                "Manual",
                "Manual and Loop"
            ],
            "default": "Normal"
        },
        {
            "id": "Video_Speed",
            "label": "Speed",
            "description": "Playback speed multiplier used in Manual duration treatment mode. Negative values play the video in reverse. Use a value curve for acceleration effects.",
            "type": "float",
            "controlType": "slider",
            "default": 1.0,
            "divisor": 100,
            "valueCurve": true,
            "min": -1000,
            "max": 1000
        },
        {
            "id": "Video_AspectRatio",
            "label": "Maintain Aspect Ratio",
            "description": "When enabled, the video is scaled to fit within the buffer while preserving its original aspect ratio, adding black bars if needed.",
            "type": "bool",
            "controlType": "checkbox",
            "default": false
        },
        {
            "id": "Video_CropLeft",
            "label": "Crop Left",
            "description": "Percentage of the video frame to crop from the left edge. Use to remove unwanted portions of the video.",
            "type": "int",
            "controlType": "slider",
            "settingPrefix": "TEXTCTRL",
            "default": 0,
            "valueCurve": true,
            "min": 0,
            "max": 100
        },
        {
            "id": "Video_CropRight",
            "label": "Crop Right",
            "description": "Percentage of the video frame visible from the left edge. Values less than 100 crop the right side of the video.",
            "type": "int",
            "controlType": "slider",
            "settingPrefix": "TEXTCTRL",
            "default": 100,
            "valueCurve": true,
            "min": 0,
            "max": 100
        },
        {
            "id": "Video_CropTop",
            "label": "Crop Top",
            "description": "Percentage of the video frame visible from the bottom edge. Values less than 100 crop the top of the video.",
            "type": "int",
            "controlType": "slider",
            "settingPrefix": "TEXTCTRL",
            "default": 100,
            "valueCurve": true,
            "min": 0,
            "max": 100
        },
        {
            "id": "Video_CropBottom",
            "label": "Crop Bottom",
            "description": "Percentage of the video frame to crop from the bottom edge. Use to remove unwanted lower portions of the video.",
            "type": "int",
            "controlType": "slider",
            "settingPrefix": "TEXTCTRL",
            "default": 0,
            "valueCurve": true,
            "min": 0,
            "max": 100
        },
        {
            "id": "Video_TransparentBlackRow",
            "label": "",
            "description": "Transparent Black checkbox with an inline brightness threshold slider (0-300). When enabled, video pixels below the threshold are keyed out as transparent.",
            "type": "string",
            "controlType": "custom",
            "default": ""
        },
        {
            "id": "SampleSpacing",
            "label": "Sample spacing",
            "description": "Pixel spacing used when sampling the video frame onto the model. A value of 0 uses default sampling; higher values skip pixels for a coarser look.",
            "tooltip": "Use 0 to scale image. >0 to sample image.",
            "type": "int",
            "controlType": "slider",
            "settingPrefix": "TEXTCTRL",
            "default": 0,
            "min": 0,
            "max": 200
        }
    ],
    "groups": [
        {
            "type": "section",
            "columns": 1,
            "properties": ["Video_FilenameBlock"]
        },
        {
            "type": "section",
            "columns": 1,
            "properties": ["Video_DurationRow"]
        },
        {
            "type": "section",
            "columns": 1,
            "properties": ["Video_TransparentBlackRow"]
        }
    ],
    "visibilityRules": [
        {
            "when": {
                "property": "SynchroniseWithAudio",
                "equals": true
            },
            "disable": [
                "Video_Starttime",
                "Video_DurationTreatment"
            ]
        }
    ]
}
