{
  "id": "video.captions",
  "object": "tool",
  "name": "Generate captions",
  "summary": "SRT and VTT from speech.",
  "description": "Transcribes the speech in a video or audio file with Whisper (large-v3-turbo on Workers AI) and returns timed SRT and WebVTT captions, plus the transcript. Long recordings are split into chunks and stitched back together. Optionally burns the captions into the video.",
  "category": "video",
  "hosted_by": "Opentools",
  "runtime": "container",
  "side_effects": false,
  "status": "live",
  "credits": 5,
  "price": "$0.0050",
  "providers": [
    {
      "id": "opentools",
      "name": "Opentools",
      "price": "$0.0050"
    }
  ],
  "mcp_name": "video_captions",
  "input_schema": {
    "type": "object",
    "properties": {
      "file": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Public http(s) URL of the file"
              }
            },
            "required": [
              "url"
            ]
          },
          {
            "type": "object",
            "properties": {
              "file_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "An id returned by POST /v1/files"
              }
            },
            "required": [
              "file_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "base64": {
                "type": "string",
                "description": "Base64-encoded file bytes (up to 10 MB)"
              },
              "name": {
                "type": "string",
                "description": "File name, e.g. invoice.pdf"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "base64",
              "name"
            ]
          },
          {
            "type": "object",
            "properties": {
              "connection": {
                "type": "string",
                "minLength": 1,
                "maxLength": 64,
                "description": "A storage connection id or name (see storage.connections)"
              },
              "path": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1024,
                "description": "Path of the file in that connection, e.g. reports/q3.pdf"
              }
            },
            "required": [
              "connection",
              "path"
            ]
          }
        ],
        "x-file": true,
        "description": "The video or audio"
      },
      "language": {
        "description": "Spoken language as an ISO code (en, de, ja…). Detected if omitted.",
        "type": "string",
        "pattern": "^[a-z]{2,3}$"
      },
      "translate": {
        "default": false,
        "description": "Translate the captions to English",
        "type": "boolean"
      },
      "burn": {
        "default": false,
        "description": "Also return the video with the captions burned in",
        "type": "boolean"
      },
      "max_line_chars": {
        "default": 42,
        "description": "Wrap caption lines at this many characters",
        "type": "integer",
        "minimum": 16,
        "maximum": 80
      },
      "font": {
        "default": "DejaVu Sans",
        "description": "Subtitle font",
        "type": "string",
        "enum": [
          "DejaVu Sans",
          "Liberation Sans",
          "Noto Sans"
        ]
      },
      "font_size": {
        "default": 24,
        "description": "Font size (relative to a 288-line script height)",
        "type": "integer",
        "minimum": 8,
        "maximum": 120
      },
      "color": {
        "default": "#FFFFFF",
        "description": "Text colour like #FFFFFF",
        "type": "string",
        "pattern": "^#[0-9a-fA-F]{6}$"
      },
      "outline_color": {
        "default": "#000000",
        "description": "Outline colour like #000000",
        "type": "string",
        "pattern": "^#[0-9a-fA-F]{6}$"
      },
      "outline": {
        "default": 2,
        "description": "Outline width",
        "type": "number",
        "minimum": 0,
        "maximum": 10
      },
      "position": {
        "default": "bottom",
        "description": "Where the subtitles sit",
        "type": "string",
        "enum": [
          "bottom",
          "middle",
          "top"
        ]
      },
      "margin": {
        "default": 30,
        "description": "Vertical margin from the edge",
        "type": "integer",
        "minimum": 0,
        "maximum": 500
      }
    },
    "required": [
      "file"
    ]
  },
  "kind": "tool"
}