{
  "openapi": "3.1.0",
  "info": {
    "title": "Video",
    "description": "API service for App Factory reusable modules",
    "version": "1.0.0",
    "x-source-commit": "f33cc2b935f31b36240d724948dc8b9c765430cc"
  },
  "paths": {
    "/api/v1/video/extract-shots": {
      "post": {
        "tags": [
          "video",
          "Video - Shots"
        ],
        "summary": "Extract Shots",
        "description": "视频镜头提取（独立原子能力）\n\n检测视频中的场景切换，提取各个镜头。不属于素材提取流程。",
        "operationId": "extract_shots_api_v1_video_extract_shots_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShotExtractionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/compress": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Compress Video",
        "description": "视频压缩。预设: wechat, douyin, kuaishou, bilibili, weibo",
        "operationId": "compress_video_api_v1_video_basic_compress_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoCompressRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/crop": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Crop Video",
        "description": "视频裁剪：mode=pixel|ratio|platform",
        "operationId": "crop_video_api_v1_video_basic_crop_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoCropRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/trim": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Trim Video",
        "description": "视频时长裁剪",
        "operationId": "trim_video_api_v1_video_basic_trim_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoTrimRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/convert": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Convert Format",
        "description": "视频格式转换",
        "operationId": "convert_format_api_v1_video_basic_convert_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FormatConvertRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/extract-frames": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Extract Frames",
        "description": "视频抽帧",
        "operationId": "extract_frames_api_v1_video_basic_extract_frames_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractFramesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/export-keyframe": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Export Keyframe",
        "description": "导出关键帧",
        "operationId": "export_keyframe_api_v1_video_basic_export_keyframe_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportKeyframeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/stitch": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Stitch Videos",
        "description": "视频拼接",
        "operationId": "stitch_videos_api_v1_video_basic_stitch_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoStitchingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/modify-md5": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Modify Md5",
        "description": "修改视频MD5",
        "operationId": "modify_md5_api_v1_video_basic_modify_md5_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__basic__ModifyMd5Request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/add-cover": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Add Cover",
        "description": "添加封面",
        "operationId": "add_cover_api_v1_video_basic_add_cover_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCoverRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/to-audio": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Video To Audio",
        "description": "视频转音频 —— 委托 audio_extract，与 /audio/basic/extract 行为一致",
        "operationId": "video_to_audio_api_v1_video_basic_to_audio_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoToAudioRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/remove-audio": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Remove Original Sound",
        "description": "消除原声 - 移除视频音轨（ffmpeg -an）",
        "operationId": "remove_original_sound_api_v1_video_basic_remove_audio_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__BaseVideoRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/extract-shots": {
      "post": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Extract Shots Compat",
        "description": "镜头切分（兼容路径）\n\n推荐使用独立原子接口 POST /api/v1/video/extract-shots。",
        "operationId": "extract_shots_compat_api_v1_video_basic_extract_shots_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShotExtractionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/basic/formats": {
      "get": {
        "tags": [
          "video",
          "Video - Basic"
        ],
        "summary": "Get Supported Formats",
        "description": "获取支持的视频格式（元数据，无需鉴权）",
        "operationId": "get_supported_formats_api_v1_video_basic_formats_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/api/v1/video/effects/mirror": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Mirror Video",
        "description": "对称镜像",
        "operationId": "mirror_video_api_v1_video_effects_mirror_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__MirrorRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/reverse": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Reverse Video",
        "description": "视频倒放",
        "operationId": "reverse_video_api_v1_video_effects_reverse_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__BaseVideoRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/to-gif": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Video To Gif",
        "description": "视频转GIF（高质量 palette）",
        "operationId": "video_to_gif_api_v1_video_effects_to_gif_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoToGifRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/text-watermark": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Add Text Watermark",
        "description": "添加文字水印",
        "operationId": "add_text_watermark_api_v1_video_effects_text_watermark_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__TextWatermarkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/sticker-watermark": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Add Sticker Watermark",
        "description": "添加贴纸水印",
        "operationId": "add_sticker_watermark_api_v1_video_effects_sticker_watermark_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__StickerWatermarkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/doodle-watermark": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Add Doodle Watermark",
        "description": "添加涂鸦水印",
        "operationId": "add_doodle_watermark_api_v1_video_effects_doodle_watermark_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__DoodleWatermarkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/smudge": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Smudge",
        "description": "区域打码/模糊（CPU）",
        "operationId": "smudge_api_v1_video_effects_smudge_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmudgeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/filter": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Video Filter",
        "description": "视频滤镜（FFmpeg）",
        "operationId": "video_filter_api_v1_video_effects_filter_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoFilterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/effect": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Video Effect",
        "description": "视频特效（FFmpeg）",
        "operationId": "video_effect_api_v1_video_effects_effect_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoEffectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/burn-subtitle": {
      "post": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "Burn Subtitle",
        "description": "烧录硬字幕（FFmpeg）",
        "operationId": "burn_subtitle_api_v1_video_effects_burn_subtitle_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BurnSubtitleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/effects/filters": {
      "get": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "List Filters",
        "operationId": "list_filters_api_v1_video_effects_filters_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/api/v1/video/effects/effects": {
      "get": {
        "tags": [
          "video",
          "Video - Effects"
        ],
        "summary": "List Effects",
        "operationId": "list_effects_api_v1_video_effects_effects_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/api/v1/video/ai/watermark-remove": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Watermark Remove",
        "description": "AI 去水印（Infer / ProPainter 链路）",
        "operationId": "watermark_remove_api_v1_video_ai_watermark_remove_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AIWatermarkRemovalRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/subtitle-remove": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Subtitle Remove",
        "description": "视频去字幕（同步，兼容移动端；Web/Extension 请用异步任务接口）\n\n推荐：POST /api/v1/video/tasks/subtitle-removal + GET .../{task_id}\n\n- 区域二选一：传 region（像素）→ 去该区域；不传 → auto（底部字幕带）\n- mode=fast|standard|high（全部 OpenCV TELEA/NS，由 Media 按档调参）",
        "operationId": "subtitle_remove_api_v1_video_ai_subtitle_remove_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubtitleRemoveRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/subtitle-detect": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Subtitle Detect",
        "description": "自动检测字幕条带区域，返回推荐区域供前端回填。",
        "operationId": "subtitle_detect_api_v1_video_ai_subtitle_detect_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubtitleDetectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/upscale": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Video Upscale",
        "description": "视频超分（同步兼容）。推荐：POST /video/tasks/upscale + GET /api/v1/tasks/{id}",
        "operationId": "video_upscale_api_v1_video_ai_upscale_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUpscaleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/enhance": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Video Enhance",
        "description": "视频 AI 增强（同步兼容）。推荐：POST /video/tasks/enhance + GET /api/v1/tasks/{id}",
        "operationId": "video_enhance_api_v1_video_ai_enhance_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoEnhanceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/bg-remove": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Video Bg Removal",
        "description": "视频抠图（同步兼容）。推荐：POST /video/tasks/bg-remove + GET /api/v1/tasks/{id}",
        "operationId": "video_bg_removal_api_v1_video_ai_bg_remove_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoBgRemoveRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/capabilities": {
      "get": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Video Generate Capabilities",
        "description": "文生视频能力：已配置供应商 + xbai/H3 capabilities（失败不 5xx）。",
        "operationId": "video_generate_capabilities_api_v1_video_ai_capabilities_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/generate": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Video Generate",
        "description": "文生视频。geekai=Seedance；xbai=MiniMax H3 自建卡。\n需登录；按 tool_type=video_ai_generate 扣积分。\nxbai 立即返回本系统 task_id，用 GET /video/ai/generate/{task_id} 轮询。",
        "operationId": "video_generate_api_v1_video_ai_generate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoGenerateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/ai/generate/{task_id}": {
      "get": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Video Generate Status",
        "description": "查询文生视频异步任务。xbai 为本系统 task_id；GeekAI 为上游 task_id。",
        "operationId": "video_generate_status_api_v1_video_ai_generate__task_id__get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/ai/generate/{task_id}/cancel": {
      "post": {
        "tags": [
          "video",
          "Video - AI"
        ],
        "summary": "Video Generate Cancel",
        "description": "取消 xbai 生视频任务。",
        "operationId": "video_generate_cancel_api_v1_video_ai_generate__task_id__cancel_post",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/tasks/watermark-removal": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Create Watermark Removal Task",
        "description": "提交去水印任务（统一写入 async_media_tasks，Celery 投递）。\n\n指定水印区域，或 auto_detect=true 自动检测，后台异步处理。",
        "operationId": "create_watermark_removal_task_api_v1_video_tasks_watermark_removal_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WatermarkRemovalRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WatermarkRemovalTaskResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/tasks/watermark-removal-from-file": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Create Watermark Removal Task From File",
        "description": "上传文件并创建去水印任务\n\n直接上传视频文件，后台异步处理。",
        "operationId": "create_watermark_removal_task_from_file_api_v1_video_tasks_watermark_removal_from_file_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_create_watermark_removal_task_from_file_api_v1_video_tasks_watermark_removal_from_file_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WatermarkRemovalTaskResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/tasks/watermark-preview": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Watermark Preview",
        "description": "预览去水印效果（单帧）",
        "operationId": "watermark_preview_api_v1_video_tasks_watermark_preview_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WatermarkPreviewRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WatermarkPreviewResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/tasks/watermark-removal/history": {
      "get": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Get Watermark Removal History",
        "description": "获取当前用户的去水印任务历史（async_media_tasks）",
        "operationId": "get_watermark_removal_history_api_v1_video_tasks_watermark_removal_history_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1,
              "title": "Page"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1,
              "default": 10,
              "title": "Page Size"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WatermarkRemovalHistoryResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/tasks/watermark-removal/{task_id}/progress": {
      "get": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Get Watermark Removal Progress",
        "description": "获取去水印任务进度 (SSE) — 支持 async_media_tasks",
        "operationId": "get_watermark_removal_progress_api_v1_video_tasks_watermark_removal__task_id__progress_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Task Id"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "JWT token for EventSource authentication",
              "title": "Token"
            },
            "description": "JWT token for EventSource authentication"
          },
          {
            "name": "progress_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "匿名任务进度访问令牌",
              "title": "Progress Token"
            },
            "description": "匿名任务进度访问令牌"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/tasks/watermark-removal/{task_id}": {
      "get": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Get Watermark Removal Task",
        "description": "获取去水印任务详情（优先 async_media_tasks，兼容旧表）",
        "operationId": "get_watermark_removal_task_api_v1_video_tasks_watermark_removal__task_id__get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Task Id"
            }
          },
          {
            "name": "progress_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "匿名任务进度访问令牌",
              "title": "Progress Token"
            },
            "description": "匿名任务进度访问令牌"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WatermarkRemovalTaskDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/tasks/subtitle-removal": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Create Subtitle Removal Task",
        "description": "提交去字幕任务（统一 async_media_tasks + Celery）。\n\n立即返回 task_id，客户端轮询 GET /subtitle-removal/{task_id}。",
        "operationId": "create_subtitle_removal_task_api_v1_video_tasks_subtitle_removal_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubtitleRemovalRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubtitleRemovalTaskResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/tasks/subtitle-removal-from-file": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Create Subtitle Removal Task From File",
        "description": "上传文件并创建去字幕任务（公共仅 mode）",
        "operationId": "create_subtitle_removal_task_from_file_api_v1_video_tasks_subtitle_removal_from_file_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_create_subtitle_removal_task_from_file_api_v1_video_tasks_subtitle_removal_from_file_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubtitleRemovalTaskResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/tasks/subtitle-removal/history": {
      "get": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Get Subtitle Removal History",
        "description": "获取当前用户的去字幕任务历史（async_media_tasks）",
        "operationId": "get_subtitle_removal_history_api_v1_video_tasks_subtitle_removal_history_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1,
              "title": "Page"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1,
              "default": 10,
              "title": "Page Size"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubtitleRemovalHistoryResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/tasks/subtitle-removal/{task_id}/progress": {
      "get": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Get Subtitle Removal Progress",
        "description": "获取去字幕任务进度 (SSE) — 支持 async_media_tasks",
        "operationId": "get_subtitle_removal_progress_api_v1_video_tasks_subtitle_removal__task_id__progress_get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Task Id"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "JWT token for EventSource",
              "title": "Token"
            },
            "description": "JWT token for EventSource"
          },
          {
            "name": "progress_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "匿名任务进度访问令牌",
              "title": "Progress Token"
            },
            "description": "匿名任务进度访问令牌"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/tasks/subtitle-removal/{task_id}": {
      "get": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Get Subtitle Removal Task",
        "description": "获取去字幕任务详情（优先 async_media_tasks，兼容旧表）",
        "operationId": "get_subtitle_removal_task_api_v1_video_tasks_subtitle_removal__task_id__get",
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Task Id"
            }
          },
          {
            "name": "progress_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "匿名任务进度访问令牌",
              "title": "Progress Token"
            },
            "description": "匿名任务进度访问令牌"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubtitleRemovalTaskDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/video/tasks/upscale": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Create Upscale Task",
        "description": "提交视频超分任务",
        "operationId": "create_upscale_task_api_v1_video_tasks_upscale_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUpscaleTaskRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncTaskCreateResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/tasks/enhance": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Create Enhance Task",
        "description": "提交视频 AI 增强任务",
        "operationId": "create_enhance_task_api_v1_video_tasks_enhance_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoEnhanceTaskRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncTaskCreateResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    },
    "/api/v1/video/tasks/bg-remove": {
      "post": {
        "tags": [
          "video",
          "Video - Tasks"
        ],
        "summary": "Create Bg Remove Task",
        "description": "提交视频抠图任务",
        "operationId": "create_bg_remove_task_api_v1_video_tasks_bg_remove_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoBgRemoveTaskRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncTaskCreateResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AIWatermarkRemovalRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "mode": {
            "type": "string",
            "title": "Mode",
            "default": "auto"
          },
          "platform_hint": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Platform Hint"
          },
          "blur_intensity": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Blur Intensity",
            "default": 50
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "AIWatermarkRemovalRequest",
        "description": "AI智能去水印请求"
      },
      "AddCoverRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "cover_url": {
            "type": "string",
            "title": "Cover Url"
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "cover_url"
        ],
        "title": "AddCoverRequest",
        "description": "添加封面请求"
      },
      "AsyncTaskCreateResponse": {
        "properties": {
          "success": {
            "type": "boolean",
            "title": "Success",
            "default": true
          },
          "task_id": {
            "type": "integer",
            "title": "Task Id"
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "pending"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "default": "任务已提交，正在处理中"
          },
          "progress_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Progress Token"
          },
          "estimated_time_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Time Seconds"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "task_id"
        ],
        "title": "AsyncTaskCreateResponse"
      },
      "Body_create_subtitle_removal_task_from_file_api_v1_video_tasks_subtitle_removal_from_file_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "视频文件"
          },
          "region": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Region",
            "description": "字幕区域 JSON 字符串（像素）"
          },
          "mode": {
            "type": "string",
            "title": "Mode",
            "description": "产品档位 fast/standard/high",
            "default": "standard"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_create_subtitle_removal_task_from_file_api_v1_video_tasks_subtitle_removal_from_file_post"
      },
      "Body_create_watermark_removal_task_from_file_api_v1_video_tasks_watermark_removal_from_file_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "视频文件"
          },
          "watermark_regions": {
            "type": "string",
            "title": "Watermark Regions",
            "description": "水印区域 JSON 字符串",
            "default": "[]"
          },
          "processing_mode": {
            "type": "string",
            "title": "Processing Mode",
            "description": "处理模式",
            "default": "standard"
          },
          "auto_detect": {
            "type": "boolean",
            "title": "Auto Detect",
            "description": "自动检测水印区域",
            "default": false
          },
          "output_quality": {
            "type": "integer",
            "title": "Output Quality",
            "description": "输出质量",
            "default": 80
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_create_watermark_removal_task_from_file_api_v1_video_tasks_watermark_removal_from_file_post"
      },
      "BurnSubtitleRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "srt_content": {
            "type": "string",
            "minLength": 1,
            "title": "Srt Content"
          },
          "font_size": {
            "type": "integer",
            "maximum": 72.0,
            "minimum": 8.0,
            "title": "Font Size",
            "default": 24
          },
          "font_color": {
            "type": "string",
            "title": "Font Color",
            "default": "white"
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "srt_content"
        ],
        "title": "BurnSubtitleRequest",
        "description": "烧录硬字幕"
      },
      "DoodlePath": {
        "properties": {
          "points": {
            "items": {
              "items": {
                "type": "integer"
              },
              "type": "array"
            },
            "type": "array",
            "title": "Points"
          },
          "color": {
            "type": "string",
            "title": "Color",
            "default": "#FF0000"
          },
          "width": {
            "type": "integer",
            "maximum": 50.0,
            "minimum": 1.0,
            "title": "Width",
            "default": 3
          }
        },
        "type": "object",
        "required": [
          "points"
        ],
        "title": "DoodlePath",
        "description": "涂鸦路径"
      },
      "ExportKeyframeRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "timestamp": {
            "type": "number",
            "minimum": 0.0,
            "title": "Timestamp",
            "default": 0.0
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "ExportKeyframeRequest",
        "description": "导出关键帧请求"
      },
      "ExtractFramesRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "frame_count": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Frame Count",
            "default": 10
          },
          "start_time": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Time"
          },
          "end_time": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "End Time"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "ExtractFramesRequest",
        "description": "视频抽帧请求"
      },
      "FormatConvertRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "output_format": {
            "type": "string",
            "title": "Output Format",
            "default": "mp4"
          },
          "preserve_quality": {
            "type": "boolean",
            "title": "Preserve Quality",
            "default": true
          },
          "compatibility_mode": {
            "type": "boolean",
            "title": "Compatibility Mode",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "FormatConvertRequest",
        "description": "视频格式转换请求"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "MediaResponse": {
        "properties": {
          "success": {
            "type": "boolean",
            "title": "Success",
            "description": "操作是否成功",
            "default": true
          },
          "data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data",
            "description": "响应数据"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message",
            "description": "响应消息"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "错误信息"
          }
        },
        "type": "object",
        "title": "MediaResponse",
        "description": "媒体处理统一响应模型\n\n用于视频压缩、裁剪、转换等操作的响应",
        "example": {
          "data": {
            "duration": 60.5,
            "file_size": 1024000,
            "output_url": "https://example.com/output.mp4"
          },
          "message": "处理成功",
          "success": true
        }
      },
      "ProcessingMode": {
        "type": "string",
        "enum": [
          "fast",
          "standard",
          "enhanced"
        ],
        "title": "ProcessingMode",
        "description": "处理模式枚举（与推理 quality / 算法对齐）"
      },
      "ShotExtractionRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "threshold": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Threshold",
            "default": 12.8
          },
          "min_shot_length": {
            "type": "number",
            "minimum": 0.1,
            "title": "Min Shot Length",
            "default": 0.35
          },
          "max_shot_length": {
            "type": "number",
            "minimum": 1.0,
            "title": "Max Shot Length",
            "default": 12.5
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "ShotExtractionRequest",
        "description": "镜头提取请求"
      },
      "SmudgeRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "regions": {
            "items": {
              "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__RegionModel"
            },
            "type": "array",
            "title": "Regions"
          },
          "blur_intensity": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Blur Intensity",
            "default": 30
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "regions"
        ],
        "title": "SmudgeRequest",
        "description": "区域打码/模糊"
      },
      "SubtitleDetectRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "SubtitleDetectRequest",
        "description": "字幕区域自动检测请求"
      },
      "SubtitleMode": {
        "type": "string",
        "enum": [
          "fast",
          "standard",
          "high"
        ],
        "title": "SubtitleMode",
        "description": "产品处理档位（前端主入口）"
      },
      "SubtitleRegion": {
        "properties": {
          "x": {
            "type": "integer",
            "minimum": 0.0,
            "title": "X",
            "description": "X 像素"
          },
          "y": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Y",
            "description": "Y 像素"
          },
          "width": {
            "type": "integer",
            "exclusiveMinimum": 0.0,
            "title": "Width",
            "description": "宽度像素"
          },
          "height": {
            "type": "integer",
            "exclusiveMinimum": 0.0,
            "title": "Height",
            "description": "高度像素"
          }
        },
        "type": "object",
        "required": [
          "x",
          "y",
          "width",
          "height"
        ],
        "title": "SubtitleRegion",
        "description": "字幕区域（视频原始分辨率像素坐标）"
      },
      "SubtitleRemovalHistoryItem": {
        "properties": {
          "task_id": {
            "type": "integer",
            "title": "Task Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "source_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Video Url"
          },
          "result_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result Video Url"
          },
          "processing_mode": {
            "type": "string",
            "title": "Processing Mode"
          },
          "video_duration": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Duration"
          },
          "processing_time_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Processing Time Seconds"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "status",
          "processing_mode"
        ],
        "title": "SubtitleRemovalHistoryItem"
      },
      "SubtitleRemovalHistoryResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/SubtitleRemovalHistoryItem"
            },
            "type": "array",
            "title": "Items"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "page": {
            "type": "integer",
            "title": "Page"
          },
          "page_size": {
            "type": "integer",
            "title": "Page Size"
          }
        },
        "type": "object",
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "SubtitleRemovalHistoryResponse"
      },
      "SubtitleRemovalRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url",
            "description": "视频 URL"
          },
          "region": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SubtitleRegion"
              },
              {
                "type": "null"
              }
            ],
            "description": "显式字幕区域（像素）；省略则 auto 自动检测"
          },
          "mode": {
            "$ref": "#/components/schemas/SubtitleMode",
            "description": "产品档位：fast(OpenCV) | standard(LaMa) | high(ProPainter)",
            "default": "standard"
          },
          "output_format": {
            "type": "string",
            "title": "Output Format",
            "description": "输出格式",
            "default": "mp4"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "SubtitleRemovalRequest",
        "description": "提交去字幕任务（公共仅 mode）"
      },
      "SubtitleRemovalTaskDetail": {
        "properties": {
          "task_id": {
            "type": "integer",
            "title": "Task Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "progress": {
            "type": "number",
            "title": "Progress",
            "default": 0
          },
          "current_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Step"
          },
          "source_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Video Url"
          },
          "video_duration": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Duration"
          },
          "video_width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Width"
          },
          "video_height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Height"
          },
          "subtitle_region": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtitle Region"
          },
          "processing_mode": {
            "type": "string",
            "title": "Processing Mode",
            "default": "standard"
          },
          "inpaint_mode": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Inpaint Mode"
          },
          "output_format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Format"
          },
          "result_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result Video Url"
          },
          "result_file_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result File Size"
          },
          "processing_time_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Processing Time Seconds"
          },
          "frames_processed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frames Processed"
          },
          "detector": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detector"
          },
          "estimated_time_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Time Seconds"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "status"
        ],
        "title": "SubtitleRemovalTaskDetail",
        "description": "任务详情"
      },
      "SubtitleRemovalTaskResponse": {
        "properties": {
          "success": {
            "type": "boolean",
            "title": "Success",
            "default": true
          },
          "task_id": {
            "type": "integer",
            "title": "Task Id",
            "description": "任务 ID"
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "任务状态"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "消息",
            "default": "任务已创建"
          },
          "progress_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Progress Token",
            "description": "匿名任务进度访问令牌（仅匿名任务返回）"
          },
          "estimated_time_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Time Seconds",
            "description": "预计处理时间(秒)"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "创建时间"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "status"
        ],
        "title": "SubtitleRemovalTaskResponse",
        "description": "创建任务响应"
      },
      "SubtitleRemoveRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "region": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/src__api__v1__endpoints__video__effects__RegionModel"
              },
              {
                "type": "null"
              }
            ],
            "description": "显式字幕区域（像素）；省略则 auto 自动检测"
          },
          "mode": {
            "type": "string",
            "title": "Mode",
            "description": "产品档位：standard(标准) | high(高质量) | fast(快速)",
            "default": "standard"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "SubtitleRemoveRequest",
        "description": "去字幕请求（公共仅 mode）\n\n区域二选一：传 region（像素）去该区域；不传 region 则 auto 自动检测。\n所有 mode 均走 Media OpenCV inpaint（TELEA/NS）。"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "VideoBgRemoveRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "bg_color": {
            "type": "string",
            "title": "Bg Color",
            "description": "背景填充色 hex，默认绿幕",
            "default": "#00FF00"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoBgRemoveRequest",
        "description": "视频抠图请求"
      },
      "VideoBgRemoveTaskRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "bg_color": {
            "type": "string",
            "title": "Bg Color",
            "default": "#00FF00"
          },
          "output_format": {
            "type": "string",
            "title": "Output Format",
            "default": "mp4"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoBgRemoveTaskRequest"
      },
      "VideoCompressRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "preset": {
            "type": "string",
            "title": "Preset",
            "default": "wechat"
          },
          "target_size_mb": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Size Mb"
          },
          "resolution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolution"
          },
          "quality": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 100.0,
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Quality"
          },
          "fps": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 60.0,
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoCompressRequest",
        "description": "视频压缩请求"
      },
      "VideoCropRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "mode": {
            "type": "string",
            "title": "Mode",
            "default": "pixel"
          },
          "aspect_ratio": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Aspect Ratio"
          },
          "platform": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Platform"
          },
          "x": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "X"
          },
          "y": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Y"
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "smart_tracking": {
            "type": "boolean",
            "title": "Smart Tracking",
            "default": false
          },
          "output_resolution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Resolution"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoCropRequest",
        "description": "视频裁剪（支持像素 / 比例 / 平台预设）"
      },
      "VideoEffectRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "effect": {
            "type": "string",
            "title": "Effect",
            "default": "fade_in"
          },
          "intensity": {
            "type": "number",
            "maximum": 3.0,
            "minimum": 0.0,
            "title": "Intensity",
            "default": 1.0
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoEffectRequest",
        "description": "视频特效"
      },
      "VideoEnhanceRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "scale": {
            "type": "integer",
            "maximum": 4.0,
            "minimum": 1.0,
            "title": "Scale",
            "description": "放大倍数（1=不放大）",
            "default": 1
          },
          "face_enhance": {
            "type": "boolean",
            "title": "Face Enhance",
            "description": "人脸修复",
            "default": true
          },
          "denoise": {
            "type": "boolean",
            "title": "Denoise",
            "description": "降噪锐化",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoEnhanceRequest",
        "description": "视频 AI 增强请求"
      },
      "VideoEnhanceTaskRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "scale": {
            "type": "integer",
            "maximum": 4.0,
            "minimum": 1.0,
            "title": "Scale",
            "default": 1
          },
          "face_enhance": {
            "type": "boolean",
            "title": "Face Enhance",
            "default": true
          },
          "denoise": {
            "type": "boolean",
            "title": "Denoise",
            "default": true
          },
          "output_format": {
            "type": "string",
            "title": "Output Format",
            "default": "mp4"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoEnhanceTaskRequest"
      },
      "VideoFilterRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "filter": {
            "type": "string",
            "title": "Filter",
            "default": "grayscale"
          },
          "intensity": {
            "type": "number",
            "maximum": 2.0,
            "minimum": 0.0,
            "title": "Intensity",
            "default": 1.0
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoFilterRequest",
        "description": "视频滤镜"
      },
      "VideoGenerateRequest": {
        "properties": {
          "prompt": {
            "type": "string",
            "maxLength": 20000,
            "minLength": 1,
            "title": "Prompt"
          },
          "provider": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "xbai",
                  "geekai"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider",
            "description": "显式供应商；省略则按配置 auto|xbai|geekai"
          },
          "mode": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "t2v",
                  "i2v",
                  "fl2v",
                  "ref2v"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Mode"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "h3_fl2va",
                  "h3_ref2va"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "loras": {
            "items": {
              "$ref": "#/components/schemas/XbaiLoraIn"
            },
            "type": "array",
            "maxItems": 16,
            "title": "Loras"
          },
          "seed": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 4294967295.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 1344.0,
                "minimum": 32.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 1344.0,
                "minimum": 32.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "image": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image",
            "description": "首帧图片 URL，或图片 URL 列表"
          },
          "image_tail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image Tail",
            "description": "尾帧图片 URL"
          },
          "images": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Images",
            "description": "多张参考图 URL"
          },
          "video": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video",
            "description": "参考/待编辑视频 URL"
          },
          "audio": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Audio",
            "description": "参考音频"
          },
          "references": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/XbaiReferenceIn"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "References",
            "description": "xbai 原生参考（name/url/type）"
          },
          "aspect_ratio": {
            "type": "string",
            "title": "Aspect Ratio",
            "description": "16:9/9:16/1:1/4:3/3:4/21:9/adaptive",
            "default": "16:9"
          },
          "resolution": {
            "type": "string",
            "title": "Resolution",
            "description": "geekai mini 仅 480p/720p",
            "default": "720p"
          },
          "duration": {
            "type": "integer",
            "maximum": 15.0,
            "minimum": 4.0,
            "title": "Duration",
            "description": "时长秒 4-15",
            "default": 5
          },
          "watermark": {
            "type": "boolean",
            "title": "Watermark",
            "default": false
          },
          "real_person_mode": {
            "type": "boolean",
            "title": "Real Person Mode",
            "description": "GeekAI：参考素材含真人人脸时开启",
            "default": false
          },
          "wait": {
            "type": "boolean",
            "title": "Wait",
            "description": "GeekAI 可服务端轮询；xbai 禁止 wait=true",
            "default": false
          },
          "idempotency_key": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 128,
                "minLength": 8
              },
              {
                "type": "null"
              }
            ],
            "title": "Idempotency Key",
            "description": "幂等键（xbai 必用于 H3；省略则创建新任务；重试同次提交时复用同一键）"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "prompt"
        ],
        "title": "VideoGenerateRequest",
        "description": "文生视频 / 图生视频。\n\n供应商：\n- geekai: doubao-seedance-2.0-mini\n- xbai: MiniMax H3 自建卡（t2v/i2v/fl2v/ref2v）\n- 省略则跟 SH_VIDEO_GENERATE_PROVIDER（auto=有 xbai 用 xbai）"
      },
      "VideoStitchingRequest": {
        "properties": {
          "video_urls": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 2,
            "title": "Video Urls"
          }
        },
        "type": "object",
        "required": [
          "video_urls"
        ],
        "title": "VideoStitchingRequest",
        "description": "视频拼接请求"
      },
      "VideoToAudioRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "output_format": {
            "type": "string",
            "title": "Output Format",
            "default": "mp3"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoToAudioRequest",
        "description": "视频转音频（兼容旧路径；推荐 /audio/basic/extract）"
      },
      "VideoToGifRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "start_time": {
            "type": "number",
            "minimum": 0.0,
            "title": "Start Time",
            "default": 0.0
          },
          "end_time": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Time"
          },
          "fps": {
            "type": "integer",
            "maximum": 30.0,
            "minimum": 1.0,
            "title": "Fps",
            "default": 10
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 1920.0,
                "minimum": 100.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width",
            "default": 480
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 80
          },
          "loop_count": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Loop Count",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoToGifRequest",
        "description": "视频转GIF（含时间段/质量参数）"
      },
      "VideoTrimRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "start_time": {
            "type": "number",
            "minimum": 0.0,
            "title": "Start Time"
          },
          "end_time": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "End Time"
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "start_time",
          "end_time"
        ],
        "title": "VideoTrimRequest",
        "description": "视频裁剪时长请求"
      },
      "VideoUpscaleRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "scale": {
            "type": "integer",
            "maximum": 4.0,
            "minimum": 2.0,
            "title": "Scale",
            "description": "放大倍数 2/3/4",
            "default": 2
          },
          "face_enhance": {
            "type": "boolean",
            "title": "Face Enhance",
            "description": "人脸修复（GFPGAN，需 GPU）",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoUpscaleRequest",
        "description": "视频超分请求"
      },
      "VideoUpscaleTaskRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "scale": {
            "type": "integer",
            "maximum": 4.0,
            "minimum": 2.0,
            "title": "Scale",
            "default": 2
          },
          "face_enhance": {
            "type": "boolean",
            "title": "Face Enhance",
            "default": false
          },
          "output_format": {
            "type": "string",
            "title": "Output Format",
            "default": "mp4"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "VideoUpscaleTaskRequest"
      },
      "WatermarkPreviewRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url",
            "description": "视频URL"
          },
          "watermark_regions": {
            "items": {
              "$ref": "#/components/schemas/WatermarkRegion"
            },
            "type": "array",
            "minItems": 1,
            "title": "Watermark Regions",
            "description": "水印区域列表（百分比坐标）"
          },
          "timestamp": {
            "type": "number",
            "minimum": 0.0,
            "title": "Timestamp",
            "description": "预览时间点（秒）",
            "default": 0.0
          },
          "processing_mode": {
            "$ref": "#/components/schemas/ProcessingMode",
            "description": "处理模式: fast/standard/enhanced",
            "default": "standard"
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "watermark_regions"
        ],
        "title": "WatermarkPreviewRequest",
        "description": "去水印单帧预览请求"
      },
      "WatermarkPreviewResponse": {
        "properties": {
          "original_frame_url": {
            "type": "string",
            "title": "Original Frame Url"
          },
          "processed_frame_url": {
            "type": "string",
            "title": "Processed Frame Url"
          },
          "timestamp": {
            "type": "number",
            "title": "Timestamp"
          },
          "processing_time_ms": {
            "type": "integer",
            "title": "Processing Time Ms"
          }
        },
        "type": "object",
        "required": [
          "original_frame_url",
          "processed_frame_url",
          "timestamp",
          "processing_time_ms"
        ],
        "title": "WatermarkPreviewResponse",
        "description": "去水印单帧预览响应"
      },
      "WatermarkRegion": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "区域类型: rect",
            "default": "rect"
          },
          "x": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "X",
            "description": "X坐标百分比 (0-100)"
          },
          "y": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Y",
            "description": "Y坐标百分比 (0-100)"
          },
          "width": {
            "type": "number",
            "maximum": 100.0,
            "exclusiveMinimum": 0.0,
            "title": "Width",
            "description": "宽度百分比 (0-100)"
          },
          "height": {
            "type": "number",
            "maximum": 100.0,
            "exclusiveMinimum": 0.0,
            "title": "Height",
            "description": "高度百分比 (0-100)"
          }
        },
        "type": "object",
        "required": [
          "x",
          "y",
          "width",
          "height"
        ],
        "title": "WatermarkRegion",
        "description": "水印区域"
      },
      "WatermarkRemovalHistoryItem": {
        "properties": {
          "task_id": {
            "type": "integer",
            "title": "Task Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "source_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Video Url"
          },
          "result_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result Video Url"
          },
          "processing_mode": {
            "type": "string",
            "title": "Processing Mode"
          },
          "video_duration": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Duration"
          },
          "processing_time_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Processing Time Seconds"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "status",
          "processing_mode"
        ],
        "title": "WatermarkRemovalHistoryItem",
        "description": "去水印历史记录项"
      },
      "WatermarkRemovalHistoryResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WatermarkRemovalHistoryItem"
            },
            "type": "array",
            "title": "Items"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "page": {
            "type": "integer",
            "title": "Page"
          },
          "page_size": {
            "type": "integer",
            "title": "Page Size"
          }
        },
        "type": "object",
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "WatermarkRemovalHistoryResponse",
        "description": "去水印历史记录响应"
      },
      "WatermarkRemovalRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url",
            "description": "视频URL"
          },
          "watermark_regions": {
            "items": {
              "$ref": "#/components/schemas/WatermarkRegion"
            },
            "type": "array",
            "title": "Watermark Regions",
            "description": "水印区域列表（百分比坐标）；auto_detect=true 时可为空"
          },
          "auto_detect": {
            "type": "boolean",
            "title": "Auto Detect",
            "description": "自动检测水印区域；为 true 时 regions 可为空",
            "default": false
          },
          "processing_mode": {
            "$ref": "#/components/schemas/ProcessingMode",
            "description": "处理模式: fast(TELEA)/standard(TELEA+residual)/enhanced(NS)",
            "default": "standard"
          },
          "output_format": {
            "type": "string",
            "title": "Output Format",
            "description": "输出格式",
            "default": "mp4"
          },
          "output_quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Output Quality",
            "description": "输出质量 1-100（编码 CRF 映射，前端可不传）",
            "default": 80
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "WatermarkRemovalRequest",
        "description": "去水印请求"
      },
      "WatermarkRemovalTaskDetail": {
        "properties": {
          "task_id": {
            "type": "integer",
            "title": "Task Id",
            "description": "任务ID"
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "任务状态"
          },
          "progress": {
            "type": "number",
            "title": "Progress",
            "description": "进度百分比",
            "default": 0
          },
          "current_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Step",
            "description": "当前步骤"
          },
          "source_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Video Url",
            "description": "原视频URL"
          },
          "video_duration": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Duration",
            "description": "视频时长"
          },
          "video_width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Width",
            "description": "视频宽度"
          },
          "video_height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Video Height",
            "description": "视频高度"
          },
          "watermark_regions": {
            "items": {
              "$ref": "#/components/schemas/WatermarkRegion"
            },
            "type": "array",
            "title": "Watermark Regions",
            "description": "水印区域列表"
          },
          "processing_mode": {
            "type": "string",
            "title": "Processing Mode",
            "description": "处理模式",
            "default": "standard"
          },
          "output_format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Format",
            "description": "输出格式"
          },
          "output_quality": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Quality",
            "description": "输出质量"
          },
          "result_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result Video Url",
            "description": "结果视频URL"
          },
          "result_file_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result File Size",
            "description": "结果文件大小"
          },
          "processing_time_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Processing Time Seconds",
            "description": "处理耗时(秒)"
          },
          "frames_processed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frames Processed",
            "description": "处理帧数"
          },
          "estimated_time_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Time Seconds",
            "description": "预计处理时间(秒)"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message",
            "description": "错误信息"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "创建时间"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At",
            "description": "开始时间"
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At",
            "description": "完成时间"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "status"
        ],
        "title": "WatermarkRemovalTaskDetail",
        "description": "去水印任务详情"
      },
      "WatermarkRemovalTaskResponse": {
        "properties": {
          "success": {
            "type": "boolean",
            "title": "Success",
            "default": true
          },
          "task_id": {
            "type": "integer",
            "title": "Task Id",
            "description": "任务ID"
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "任务状态"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "消息",
            "default": "任务已创建"
          },
          "progress_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Progress Token",
            "description": "匿名任务进度访问令牌（仅匿名任务返回）"
          },
          "estimated_time_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Estimated Time Seconds",
            "description": "预计处理时间(秒)"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "创建时间"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "status"
        ],
        "title": "WatermarkRemovalTaskResponse",
        "description": "去水印任务响应"
      },
      "XbaiLoraIn": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Name"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "name"
        ],
        "title": "XbaiLoraIn"
      },
      "XbaiReferenceIn": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 32,
            "minLength": 1,
            "title": "Name"
          },
          "url": {
            "type": "string",
            "minLength": 8,
            "title": "Url"
          },
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video",
              "audio"
            ],
            "title": "Type"
          },
          "purpose": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Purpose"
          },
          "clip_start": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Clip Start"
          },
          "clip_duration": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 15.0,
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Clip Duration"
          },
          "use_audio": {
            "type": "boolean",
            "title": "Use Audio",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "name",
          "url",
          "type"
        ],
        "title": "XbaiReferenceIn"
      },
      "src__api__v1__endpoints__video__basic__ModifyMd5Request": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "target_md5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Md5"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "ModifyMd5Request",
        "description": "修改MD5请求"
      },
      "src__api__v1__endpoints__video__effects__BaseVideoRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "BaseVideoRequest",
        "description": "视频请求基类"
      },
      "src__api__v1__endpoints__video__effects__DoodleWatermarkRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "paths": {
            "items": {
              "$ref": "#/components/schemas/DoodlePath"
            },
            "type": "array",
            "title": "Paths"
          },
          "stroke_color": {
            "type": "string",
            "title": "Stroke Color",
            "default": "#FF0000"
          },
          "stroke_width": {
            "type": "integer",
            "maximum": 50.0,
            "minimum": 1.0,
            "title": "Stroke Width",
            "default": 3
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "paths"
        ],
        "title": "DoodleWatermarkRequest",
        "description": "涂鸦水印请求"
      },
      "src__api__v1__endpoints__video__effects__MirrorRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "direction": {
            "type": "string",
            "title": "Direction",
            "default": "horizontal"
          }
        },
        "type": "object",
        "required": [
          "video_url"
        ],
        "title": "MirrorRequest",
        "description": "镜像请求"
      },
      "src__api__v1__endpoints__video__effects__RegionModel": {
        "properties": {
          "x": {
            "type": "integer",
            "minimum": 0.0,
            "title": "X"
          },
          "y": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Y"
          },
          "width": {
            "type": "integer",
            "exclusiveMinimum": 0.0,
            "title": "Width"
          },
          "height": {
            "type": "integer",
            "exclusiveMinimum": 0.0,
            "title": "Height"
          }
        },
        "type": "object",
        "required": [
          "x",
          "y",
          "width",
          "height"
        ],
        "title": "RegionModel",
        "description": "区域模型"
      },
      "src__api__v1__endpoints__video__effects__StickerWatermarkRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "sticker_url": {
            "type": "string",
            "title": "Sticker Url"
          },
          "position_x": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Position X",
            "default": 10
          },
          "position_y": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Position Y",
            "default": 10
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "sticker_url"
        ],
        "title": "StickerWatermarkRequest",
        "description": "贴纸水印请求"
      },
      "src__api__v1__endpoints__video__effects__TextWatermarkRequest": {
        "properties": {
          "video_url": {
            "type": "string",
            "minLength": 1,
            "title": "Video Url"
          },
          "text": {
            "type": "string",
            "minLength": 1,
            "title": "Text"
          },
          "position_x": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Position X",
            "default": 10
          },
          "position_y": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Position Y",
            "default": 10
          },
          "font_size": {
            "type": "integer",
            "maximum": 200.0,
            "minimum": 8.0,
            "title": "Font Size",
            "default": 20
          },
          "color": {
            "type": "string",
            "title": "Color",
            "default": "white"
          }
        },
        "type": "object",
        "required": [
          "video_url",
          "text"
        ],
        "title": "TextWatermarkRequest",
        "description": "文字水印请求"
      }
    },
    "securitySchemes": {
      "HTTPBearer": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "servers": [
    {
      "url": "https://api.sniphunter.com"
    }
  ]
}