SnipHunter API

GPU Infer

视频超分、抠像与推理任务。

Base URL https://sniphunter.com/ai

OpenAPI JSON · 完整 Markdown

请求与响应中的 $ref 在 OpenAPI 的 components 中定义。

20 个接口

Video

POST/api/v1/video/bg-removeBg Remove

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoBgRemoveRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/VideoEnhanceResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
POST/api/v1/video/enhanceEnhance

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoEnhanceRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/VideoEnhanceResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
GET/api/v1/video/enhance/statusEnhance Status

探测当前设备与可用引擎。

{
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {}
        }
      }
    }
  }
}
POST/api/v1/video/subtitle/detectDetect Subtitle

自动检测字幕条带区域(引擎 PP-OCRv5 采样检测,聚合文本框)。

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SubtitleDetectRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/SubtitleDetectResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
POST/api/v1/video/subtitle/removeRemove Subtitle

视频去字幕(同步兼容端点)。 内部与 POST /tasks 走同一任务管线(时长门限/串行调度/真实进度一致), 等待任务完成后一次性返回。新接入方请使用异步任务端点。

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SubtitleRemoveRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/SubtitleRemoveResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
GET/api/v1/video/subtitle/statusGet Service Status

去字幕服务状态:VSR 引擎(in-process) 权重就绪情况。

{
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {}
        }
      }
    }
  }
}
POST/api/v1/video/subtitle/tasksSubmit Subtitle Task

提交去字幕异步任务:立即返回 task_id,GET /tasks/{task_id} 轮询真实进度。

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SubtitleRemoveRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/SubtitleTaskSubmitResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
GET/api/v1/video/subtitle/tasks/{task_id}Get Subtitle Task

查询去字幕任务:真实进度 / 排队位置 / 时长 / 预估耗时 / 结果。

{
  "parameters": [
    {
      "name": "task_id",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string",
        "title": "Task Id"
      }
    }
  ],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/SubtitleTaskStatusResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
POST/api/v1/video/tasksSubmit Unified Video Task

提交视频异步任务(超分 / 增强 / 抠图)。

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoTaskSubmitRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/VideoAsyncTaskSubmitResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
GET/api/v1/video/tasks/{task_id}Get Unified Video Task

查询统一视频任务状态(任意 kind)。

{
  "parameters": [
    {
      "name": "task_id",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string",
        "title": "Task Id"
      }
    }
  ],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/VideoAsyncTaskStatusResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
POST/api/v1/video/upscaleUpscale

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/VideoUpscaleRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/VideoEnhanceResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
POST/api/v1/video/watermark/detectDetect Watermark

水印自动检测(同步)。

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/WatermarkDetectRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/WatermarkDetectResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
POST/api/v1/video/watermark/removeRemove Watermark

视频去水印(同步兼容端点)。 内部与 POST /tasks 同一管线,等待完成后一次性返回。

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/WatermarkRemoveRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/WatermarkRemoveResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
GET/api/v1/video/watermark/statusGet Service Status

获取水印去除服务状态。

{
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {}
        }
      }
    }
  }
}
POST/api/v1/video/watermark/tasksSubmit Watermark Task

提交视频去水印异步任务。

{
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/WatermarkRemoveRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/VideoAsyncTaskSubmitResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}
GET/api/v1/video/watermark/tasks/{task_id}Get Watermark Task

查询去水印任务状态。

{
  "parameters": [
    {
      "name": "task_id",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string",
        "title": "Task Id"
      }
    }
  ],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/VideoAsyncTaskStatusResponse"
          }
        }
      }
    },
    "422": {
      "description": "Validation Error",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HTTPValidationError"
          }
        }
      }
    }
  }
}

Health

GET/Root

{
  "security": [],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {}
        }
      }
    }
  }
}
GET/api/v1/healthHealth Check

存活 / 浅层健康探针。 - 默认:进程可响应即 healthy(liveness) - INFER_REQUIRE_CUDA=1:额外做 CUDA 张量探针;失败返回 status=unhealthy (Docker healthcheck 可据此标记 unhealthy;真正自愈靠进程 exit + restart) 深度就绪请用 /ready。

{
  "security": [],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/HealthResponse"
          }
        }
      }
    }
  }
}

ready

GET/api/v1/readyReadiness Check

就绪检查:对象存储 + 内存 + CUDA 信息 + 关键权重(权重缺失为 degraded 但仍 ready, 仅 storage/memory 失败时 ready=false,避免无存储时仍接写任务)。

{
  "security": [],
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/ReadyResponse"
          }
        }
      }
    }
  }
}

status

GET/api/v1/status/modelsModel Status

模型 / GPU 槽位状态(含懒加载注册表)

{
  "responses": {
    "200": {
      "description": "Successful Response",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/ModelStatusResponse"
          }
        }
      }
    }
  }
}

数据模型

展开 components
{
  "schemas": {
    "HTTPValidationError": {
      "properties": {
        "detail": {
          "items": {
            "$ref": "#/components/schemas/ValidationError"
          },
          "type": "array",
          "title": "Detail"
        }
      },
      "type": "object",
      "title": "HTTPValidationError"
    },
    "HealthResponse": {
      "properties": {
        "status": {
          "type": "string",
          "title": "Status",
          "description": "服务状态"
        },
        "service": {
          "type": "string",
          "title": "Service",
          "description": "服务名称"
        },
        "version": {
          "type": "string",
          "title": "Version",
          "description": "服务版本"
        }
      },
      "type": "object",
      "required": [
        "status",
        "service",
        "version"
      ],
      "title": "HealthResponse",
      "description": "健康检查响应"
    },
    "ModelStatusResponse": {
      "properties": {
        "loaded_models": {
          "items": {},
          "type": "array",
          "title": "Loaded Models",
          "description": "已加载的模型列表"
        },
        "estimated_usage_mb": {
          "type": "integer",
          "title": "Estimated Usage Mb",
          "description": "估算内存使用 (MB)",
          "default": 0
        },
        "memory_budget_mb": {
          "type": "integer",
          "title": "Memory Budget Mb",
          "description": "内存预算 (MB)",
          "default": 0
        },
        "system_memory": {
          "additionalProperties": true,
          "type": "object",
          "title": "System Memory",
          "description": "系统内存状态"
        }
      },
      "type": "object",
      "title": "ModelStatusResponse",
      "description": "模型状态响应"
    },
    "ReadyResponse": {
      "properties": {
        "ready": {
          "type": "boolean",
          "title": "Ready",
          "description": "是否就绪"
        },
        "checks": {
          "additionalProperties": true,
          "type": "object",
          "title": "Checks",
          "description": "各项检查结果"
        }
      },
      "type": "object",
      "required": [
        "ready"
      ],
      "title": "ReadyResponse",
      "description": "就绪检查响应"
    },
    "SubtitleDetectRequest": {
      "properties": {
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        }
      },
      "type": "object",
      "required": [
        "video_url"
      ],
      "title": "SubtitleDetectRequest",
      "description": "字幕区域自动检测请求"
    },
    "SubtitleDetectResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态"
        },
        "detected_region": {
          "anyOf": [
            {
              "$ref": "#/components/schemas/SubtitleRegion"
            },
            {
              "type": "null"
            }
          ],
          "description": "推荐的字幕条带区域"
        },
        "preview_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Preview Url",
          "description": "预览图 URL"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "错误信息"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "SubtitleDetectResponse",
      "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",
          "minimum": 1.0,
          "title": "Width",
          "description": "宽度"
        },
        "height": {
          "type": "integer",
          "minimum": 1.0,
          "title": "Height",
          "description": "高度"
        }
      },
      "type": "object",
      "required": [
        "x",
        "y",
        "width",
        "height"
      ],
      "title": "SubtitleRegion",
      "description": "字幕区域(像素坐标)"
    },
    "SubtitleRemoveRequest": {
      "properties": {
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        },
        "task_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Id",
          "description": "可选任务关联 ID;缺省服务端生成"
        },
        "region": {
          "anyOf": [
            {
              "$ref": "#/components/schemas/SubtitleRegion"
            },
            {
              "type": "null"
            }
          ],
          "description": "显式字幕区域(像素)。传入后整框全片擦除,不跑 OCR;省略则 auto 检测"
        },
        "mode": {
          "type": "string",
          "enum": [
            "standard",
            "high",
            "fast"
          ],
          "title": "Mode",
          "description": "产品档位(均走 VSR):fast=OpenCV | standard=LaMa | high=ProPainter。引擎调参与算法由服务内置推导。",
          "default": "standard"
        },
        "output_format": {
          "type": "string",
          "title": "Output Format",
          "description": "输出格式",
          "default": "mp4"
        }
      },
      "type": "object",
      "required": [
        "video_url"
      ],
      "title": "SubtitleRemoveRequest",
      "description": "去字幕请求\n\n区域来源二选一:\n  - 传 region(像素坐标)→ 整框矩形 mask 全片擦除该区域(不依赖 OCR)\n  - 不传 region → auto 自动检测字幕主带 + OCR 定位有字幕帧"
    },
    "SubtitleRemoveResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态: processing/completed/failed"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Result",
          "description": "处理结果"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "错误信息"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "SubtitleRemoveResponse",
      "description": "去字幕响应"
    },
    "SubtitleTaskStatusResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态: queued/processing/completed/failed"
        },
        "progress": {
          "type": "number",
          "title": "Progress",
          "description": "真实进度 0~100(下载/引擎/上传全链路)",
          "default": 0
        },
        "current_step": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Current Step",
          "description": "当前步骤"
        },
        "queue_position": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Queue Position",
          "description": "排队位置(仅 queued)"
        },
        "video_duration": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Video Duration",
          "description": "输入视频时长(秒)"
        },
        "estimated_time_seconds": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Estimated Time Seconds",
          "description": "预估处理耗时(秒)"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Result",
          "description": "处理结果(completed 时)"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "错误信息(failed 时)"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "SubtitleTaskStatusResponse",
      "description": "去字幕异步任务状态"
    },
    "SubtitleTaskSubmitResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态: queued/processing"
        },
        "queue_position": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Queue Position",
          "description": "排队位置(1=下一个执行)"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "SubtitleTaskSubmitResponse",
      "description": "去字幕异步任务提交响应"
    },
    "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"
    },
    "VideoAsyncTaskStatusResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "kind": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Kind",
          "description": "任务类型"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态: queued/processing/completed/failed"
        },
        "progress": {
          "type": "number",
          "title": "Progress",
          "description": "进度 0~100",
          "default": 0
        },
        "current_step": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Current Step",
          "description": "当前步骤"
        },
        "queue_position": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Queue Position",
          "description": "排队位置(仅 queued)"
        },
        "video_duration": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Video Duration",
          "description": "输入视频时长(秒)"
        },
        "estimated_time_seconds": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Estimated Time Seconds",
          "description": "预估耗时(秒)"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Result",
          "description": "处理结果(completed 时)"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "错误信息(failed 时)"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "VideoAsyncTaskStatusResponse",
      "description": "通用视频异步任务状态"
    },
    "VideoAsyncTaskSubmitResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态: queued/processing"
        },
        "kind": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Kind",
          "description": "任务类型"
        },
        "queue_position": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Queue Position",
          "description": "排队位置(1=下一个执行)"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "VideoAsyncTaskSubmitResponse",
      "description": "通用视频异步任务提交响应"
    },
    "VideoBgRemoveRequest": {
      "properties": {
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        },
        "task_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Id",
          "description": "可选任务关联 ID;缺省服务端生成"
        },
        "bg_color": {
          "type": "string",
          "title": "Bg Color",
          "description": "背景填充色(hex),默认绿幕",
          "default": "#00FF00"
        },
        "output_format": {
          "type": "string",
          "title": "Output Format",
          "description": "输出格式",
          "default": "mp4"
        }
      },
      "type": "object",
      "required": [
        "video_url"
      ],
      "title": "VideoBgRemoveRequest",
      "description": "视频抠图(背景移除)请求"
    },
    "VideoEnhanceRequest": {
      "properties": {
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        },
        "task_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Id",
          "description": "可选任务关联 ID;缺省服务端生成"
        },
        "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
        },
        "output_format": {
          "type": "string",
          "title": "Output Format",
          "description": "输出格式",
          "default": "mp4"
        }
      },
      "type": "object",
      "required": [
        "video_url"
      ],
      "title": "VideoEnhanceRequest",
      "description": "视频 AI 增强请求"
    },
    "VideoEnhanceResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态: completed/failed"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Result",
          "description": "处理结果"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "错误信息"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "VideoEnhanceResponse",
      "description": "统一响应"
    },
    "VideoTaskSubmitRequest": {
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "subtitle",
            "watermark",
            "upscale",
            "bg-remove",
            "bg_remove"
          ],
          "title": "Kind",
          "description": "任务类型"
        },
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        },
        "task_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Id",
          "description": "可选任务关联 ID;缺省服务端生成"
        },
        "output_format": {
          "type": "string",
          "title": "Output Format",
          "description": "输出格式",
          "default": "mp4"
        },
        "region": {
          "anyOf": [
            {
              "$ref": "#/components/schemas/SubtitleRegion"
            },
            {
              "type": "null"
            }
          ],
          "description": "去字幕显式区域(像素)"
        },
        "mode": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "standard",
                "high",
                "fast"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Mode",
          "description": "去字幕档位",
          "default": "standard"
        },
        "regions": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/components/schemas/WatermarkRegion"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Regions",
          "description": "去水印手动区域"
        },
        "auto_detect": {
          "type": "boolean",
          "title": "Auto Detect",
          "description": "去水印自动检测",
          "default": true
        },
        "detection_sensitivity": {
          "type": "string",
          "title": "Detection Sensitivity",
          "description": "去水印检测敏感度",
          "default": "medium"
        },
        "quality": {
          "type": "string",
          "title": "Quality",
          "description": "去水印质量 fast/medium/high",
          "default": "medium"
        },
        "processing_height": {
          "type": "integer",
          "maximum": 1080.0,
          "minimum": 240.0,
          "title": "Processing Height",
          "description": "去水印处理高度",
          "default": 720
        },
        "scale": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 4.0,
              "minimum": 1.0
            },
            {
              "type": "null"
            }
          ],
          "title": "Scale",
          "description": "超分/增强放大倍数"
        },
        "face_enhance": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Face Enhance",
          "description": "超分/增强人脸修复"
        },
        "denoise": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Denoise",
          "description": "增强降噪"
        },
        "bg_color": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Bg Color",
          "description": "抠图背景色 hex"
        }
      },
      "type": "object",
      "required": [
        "kind",
        "video_url"
      ],
      "title": "VideoTaskSubmitRequest",
      "description": "统一视频异步任务提交。\n\nkind: subtitle | watermark | upscale | bg-remove\n公共字段 video_url / task_id / output_format;其余按 kind 选用。\n生产去字幕/去水印走 media;本进程代码保留。"
    },
    "VideoUpscaleRequest": {
      "properties": {
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        },
        "task_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Id",
          "description": "可选任务关联 ID;缺省服务端生成"
        },
        "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)",
          "default": false
        },
        "output_format": {
          "type": "string",
          "title": "Output Format",
          "description": "输出格式",
          "default": "mp4"
        }
      },
      "type": "object",
      "required": [
        "video_url"
      ],
      "title": "VideoUpscaleRequest",
      "description": "视频超分请求"
    },
    "WatermarkDetectRequest": {
      "properties": {
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        },
        "sensitivity": {
          "type": "string",
          "title": "Sensitivity",
          "description": "检测敏感度: low/medium/high",
          "default": "medium"
        }
      },
      "type": "object",
      "required": [
        "video_url"
      ],
      "title": "WatermarkDetectRequest",
      "description": "水印检测请求"
    },
    "WatermarkDetectResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态"
        },
        "detected_regions": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/components/schemas/WatermarkRegion"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Detected Regions",
          "description": "检测到的水印区域"
        },
        "preview_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Preview Url",
          "description": "检测结果预览图 URL"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "错误信息"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "WatermarkDetectResponse",
      "description": "水印检测响应"
    },
    "WatermarkRegion": {
      "properties": {
        "x": {
          "type": "integer",
          "title": "X",
          "description": "左上角 X 坐标"
        },
        "y": {
          "type": "integer",
          "title": "Y",
          "description": "左上角 Y 坐标"
        },
        "width": {
          "type": "integer",
          "minimum": 1.0,
          "title": "Width",
          "description": "宽度"
        },
        "height": {
          "type": "integer",
          "minimum": 1.0,
          "title": "Height",
          "description": "高度"
        }
      },
      "type": "object",
      "required": [
        "x",
        "y",
        "width",
        "height"
      ],
      "title": "WatermarkRegion",
      "description": "水印区域"
    },
    "WatermarkRemoveRequest": {
      "properties": {
        "video_url": {
          "type": "string",
          "title": "Video Url",
          "description": "视频文件 URL"
        },
        "task_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Id",
          "description": "可选任务关联 ID;缺省服务端生成"
        },
        "regions": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/components/schemas/WatermarkRegion"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Regions",
          "description": "手动指定的水印区域列表。如果为空,将自动检测"
        },
        "auto_detect": {
          "type": "boolean",
          "title": "Auto Detect",
          "description": "是否自动检测水印(当 regions 为空时生效)",
          "default": true
        },
        "detection_sensitivity": {
          "type": "string",
          "title": "Detection Sensitivity",
          "description": "自动检测敏感度: low/medium/high",
          "default": "medium"
        },
        "quality": {
          "type": "string",
          "title": "Quality",
          "description": "处理质量/算法:fast=OpenCV | medium=LaMa | high=ProPainter",
          "default": "medium"
        },
        "processing_height": {
          "type": "integer",
          "maximum": 1080.0,
          "minimum": 240.0,
          "title": "Processing Height",
          "description": "处理高度(像素)。默认 720;越高画质越好、越吃显存",
          "default": 720
        },
        "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",
          "default": 80
        }
      },
      "type": "object",
      "required": [
        "video_url"
      ],
      "title": "WatermarkRemoveRequest",
      "description": "水印去除请求"
    },
    "WatermarkRemoveResponse": {
      "properties": {
        "task_id": {
          "type": "string",
          "title": "Task Id",
          "description": "任务 ID"
        },
        "status": {
          "type": "string",
          "title": "Status",
          "description": "状态: processing/completed/failed"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Result",
          "description": "处理结果"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Error",
          "description": "错误信息"
        }
      },
      "type": "object",
      "required": [
        "task_id",
        "status"
      ],
      "title": "WatermarkRemoveResponse",
      "description": "水印去除响应"
    }
  },
  "securitySchemes": {
    "ServiceApiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-Key",
      "description": "服务间密钥,鉴权是否启用由部署配置决定。"
    }
  }
}