# Video Base URL `https://api.sniphunter.com` 视频剪辑、字幕、水印、画质增强与生成。 # Video ## POST /api/v1/video/ai/bg-remove Video Bg Removal 视频抠图(同步兼容)。推荐:POST /video/tasks/bg-remove + GET /api/v1/tasks/{id} ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## GET /api/v1/video/ai/capabilities Video Generate Capabilities 文生视频能力:已配置供应商 + xbai/H3 capabilities(失败不 5xx)。 ```json { "security": [ { "HTTPBearer": [] } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } ``` ## POST /api/v1/video/ai/enhance Video Enhance 视频 AI 增强(同步兼容)。推荐:POST /video/tasks/enhance + GET /api/v1/tasks/{id} ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/ai/generate Video Generate 文生视频。geekai=Seedance;xbai=MiniMax H3 自建卡。 需登录;按 tool_type=video_ai_generate 扣积分。 xbai 立即返回本系统 task_id,用 GET /video/ai/generate/{task_id} 轮询。 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## GET /api/v1/video/ai/generate/{task_id} Video Generate Status 查询文生视频异步任务。xbai 为本系统 task_id;GeekAI 为上游 task_id。 ```json { "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" } } } } } } ``` ## POST /api/v1/video/ai/generate/{task_id}/cancel Video Generate Cancel 取消 xbai 生视频任务。 ```json { "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" } } } } } } ``` ## POST /api/v1/video/ai/subtitle-detect Subtitle Detect 自动检测字幕条带区域,返回推荐区域供前端回填。 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/ai/subtitle-remove Subtitle Remove 视频去字幕(同步,兼容移动端;Web/Extension 请用异步任务接口) 推荐:POST /api/v1/video/tasks/subtitle-removal + GET .../{task_id} - 区域二选一:传 region(像素)→ 去该区域;不传 → auto(底部字幕带) - mode=fast|standard|high(全部 OpenCV TELEA/NS,由 Media 按档调参) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/ai/upscale Video Upscale 视频超分(同步兼容)。推荐:POST /video/tasks/upscale + GET /api/v1/tasks/{id} ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/ai/watermark-remove Watermark Remove AI 去水印(Infer / ProPainter 链路) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/add-cover Add Cover 添加封面 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/compress Compress Video 视频压缩。预设: wechat, douyin, kuaishou, bilibili, weibo ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/convert Convert Format 视频格式转换 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/crop Crop Video 视频裁剪:mode=pixel|ratio|platform ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/export-keyframe Export Keyframe 导出关键帧 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/extract-frames Extract Frames 视频抽帧 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/extract-shots Extract Shots Compat 镜头切分(兼容路径) 推荐使用独立原子接口 POST /api/v1/video/extract-shots。 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## GET /api/v1/video/basic/formats Get Supported Formats 获取支持的视频格式(元数据,无需鉴权) ```json { "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } ``` ## POST /api/v1/video/basic/modify-md5 Modify Md5 修改视频MD5 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/remove-audio Remove Original Sound 消除原声 - 移除视频音轨(ffmpeg -an) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/stitch Stitch Videos 视频拼接 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/to-audio Video To Audio 视频转音频 —— 委托 audio_extract,与 /audio/basic/extract 行为一致 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/basic/trim Trim Video 视频时长裁剪 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/burn-subtitle Burn Subtitle 烧录硬字幕(FFmpeg) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/doodle-watermark Add Doodle Watermark 添加涂鸦水印 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/effect Video Effect 视频特效(FFmpeg) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## GET /api/v1/video/effects/effects List Effects ```json { "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } ``` ## POST /api/v1/video/effects/filter Video Filter 视频滤镜(FFmpeg) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## GET /api/v1/video/effects/filters List Filters ```json { "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } ``` ## POST /api/v1/video/effects/mirror Mirror Video 对称镜像 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/reverse Reverse Video 视频倒放 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/smudge Smudge 区域打码/模糊(CPU) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/sticker-watermark Add Sticker Watermark 添加贴纸水印 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/text-watermark Add Text Watermark 添加文字水印 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/effects/to-gif Video To Gif 视频转GIF(高质量 palette) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/extract-shots Extract Shots 视频镜头提取(独立原子能力) 检测视频中的场景切换,提取各个镜头。不属于素材提取流程。 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/tasks/bg-remove Create Bg Remove Task 提交视频抠图任务 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/tasks/enhance Create Enhance Task 提交视频 AI 增强任务 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/tasks/subtitle-removal Create Subtitle Removal Task 提交去字幕任务(统一 async_media_tasks + Celery)。 立即返回 task_id,客户端轮询 GET /subtitle-removal/{task_id}。 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/tasks/subtitle-removal-from-file Create Subtitle Removal Task From File 上传文件并创建去字幕任务(公共仅 mode) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## GET /api/v1/video/tasks/subtitle-removal/history Get Subtitle Removal History 获取当前用户的去字幕任务历史(async_media_tasks) ```json { "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" } } } } } } ``` ## GET /api/v1/video/tasks/subtitle-removal/{task_id} Get Subtitle Removal Task 获取去字幕任务详情(优先 async_media_tasks,兼容旧表) ```json { "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" } } } } } } ``` ## GET /api/v1/video/tasks/subtitle-removal/{task_id}/progress Get Subtitle Removal Progress 获取去字幕任务进度 (SSE) — 支持 async_media_tasks ```json { "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" } } } } } } ``` ## POST /api/v1/video/tasks/upscale Create Upscale Task 提交视频超分任务 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/tasks/watermark-preview Watermark Preview 预览去水印效果(单帧) ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/tasks/watermark-removal Create Watermark Removal Task 提交去水印任务(统一写入 async_media_tasks,Celery 投递)。 指定水印区域,或 auto_detect=true 自动检测,后台异步处理。 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## POST /api/v1/video/tasks/watermark-removal-from-file Create Watermark Removal Task From File 上传文件并创建去水印任务 直接上传视频文件,后台异步处理。 ```json { "security": [ { "HTTPBearer": [] } ], "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" } } } } } } ``` ## GET /api/v1/video/tasks/watermark-removal/history Get Watermark Removal History 获取当前用户的去水印任务历史(async_media_tasks) ```json { "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" } } } } } } ``` ## GET /api/v1/video/tasks/watermark-removal/{task_id} Get Watermark Removal Task 获取去水印任务详情(优先 async_media_tasks,兼容旧表) ```json { "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" } } } } } } ``` ## GET /api/v1/video/tasks/watermark-removal/{task_id}/progress Get Watermark Removal Progress 获取去水印任务进度 (SSE) — 支持 async_media_tasks ```json { "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" } } } } } } ``` # Components ```json { "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" } } } ```