{
  "data": {
    "id": "ty9uxyAcaJ79dqhWb",
    "userId": "bIpmafyh133CgRZZS",
    "name": "audio-video-to-text",
    "username": "donjuan_mime",
    "description": "Transcribes video and audio files into plain text and subtitle formats (TXT, SRT, VTT, TSV, JSON) using OpenAI's Whisper model. Supports preloaded tiny, base, and small models.",
    "isPublic": true,
    "createdAt": "2025-06-02T10:32:44.992Z",
    "modifiedAt": "2026-10-18T10:30:00.975Z",
    "taggedBuilds": {
      "latest": {
        "buildId": "YECau3w1LQ0yXbGvh",
        "finishedAt": "2025-07-13T07:02:29.691Z",
        "buildNumberInt": 2,
        "buildNumber": "0.0.2"
      }
    },
    "stats": {
      "totalBuilds": 4,
      "totalRuns": 1571,
      "totalUsers": 106,
      "totalUsers7Days": 1,
      "totalUsers30Days": 6,
      "totalUsers90Days": 7,
      "lastRunStartedAt": "2026-10-24T01:16:02.394Z",
      "publicActorRunStats30Days": {
        "ABORTED": 1,
        "FAILED": 1,
        "SUCCEEDED": 64,
        "TIMED-OUT": 1,
        "TOTAL": 67
      },
      "actorReviewCount": 0,
      "actorReviewRating": 0,
      "bookmarkCount": 5
    },
    "versions": [
      {
        "versionNumber": "0.0",
        "buildTag": "latest",
        "envVars": [],
        "sourceType": "SOURCE_FILES",
        "sourceFiles": [
          {
            "name": ".actor",
            "folder": true
          },
          {
            "name": ".actor/README.md",
            "format": "TEXT",
            "content": "---\n\n## 🎬 Video and Audio to Text Transcription\n\n### 🧠 Overview\n\nThis script is designed for the **Apify** platform and uses **OpenAI Whisper** to transcribe audio or video (e.g., from YouTube or MP4 files) into text and other formats (SRT, VTT, etc.).\n\n---\n\n## 📥 Input\n\n### Parameters\n\n- **model**: *(string)* — Whisper model to use. Available options:\n    - `tiny` ✅ *(pre-installed)*\n    - `base` ✅ *(pre-installed)*\n    - `small` ✅ *(pre-installed)*\n    - `medium` *(requires download)*\n    - `large` *(requires download)*\n    - `turbo` *(requires download)*\n\n> ✅ **Note**: Models `tiny`, `base`, and `small` are already downloaded in the Docker image for faster and offline-ready processing.\n- **source_url**: *(string)* — Direct URL to the video/audio file (e.g., an MP4 file hosted online).  \n  ⚠️ *YouTube links are not supported directly. You must download the video first.*\n\n### Example Input\n\n```json\n{\n  \"model\": \"tiny\",\n  \"source_url\": \"https://raw.githubusercontent.com/donjuanMime/audio_to_text/main/video.mp4\"\n}\n```\n\n---\n\n## 📤 Output\n\nThe output is a JSON array with one object, which includes multiple transcription formats:\n\n* `json`: Full Whisper output with segments, tokens, and metadata.\n* `srt`: SubRip subtitle format.\n* `tsv`: Tab-separated values (start, end, text).\n* `txt`: Plain text transcription.\n* `vtt`: WebVTT subtitle format.\n\n### Example Output (excerpt)\n\n```json\n[\n  {\n    \"json\": \"{ ... Whisper segment data ... }\",\n    \"srt\": \"1\\n00:00:00,000 --> 00:00:01,120\\nWhat's your favorite drink?\\n...\",\n    \"tsv\": \"start\\tend\\ttext\\n0\\t1120\\tWhat's your favorite drink?\\n...\",\n    \"txt\": \"What's your favorite drink?\\nMy favorite drink is apple juice...\\n\",\n    \"vtt\": \"WEBVTT\\n\\n00:00.000 --> 00:01.120\\nWhat's your favorite drink?\\n...\"\n  }\n]\n```\n\n---\n\n## 🛠️ How to Use\n\n1. Go to your **Apify** dashboard and create a new actor or task.\n2. Paste this script into the actor’s source.\n3. Provide the input in the required JSON format (see above).\n4. Run the actor. It will download the media file, process it using Whisper, and return transcription in multiple formats.\n\n---\n\n## ⚠️ Disclaimer\n\nThis script is provided **\"as is\"**, without warranties of any kind. Use it at your own risk.\nEnsure compliance with:\n\n* YouTube’s Terms of Service (if downloading/transcribing from YouTube).\n* Local and international copyright laws.\n\n---\n\nLet me know if you’d like the actual Apify actor code or instructions on downloading YouTube videos as `.mp4` files to use with this."
          },
          {
            "name": ".actor/actor.json",
            "format": "TEXT",
            "content": "{\n  \"actorSpecification\": 1,\n  \"name\": \"video-to-text\",\n  \"title\": \"Video to Text\",\n  \"description\": \"Transcribes video or audio files into text and subtitle formats using Whisper (tiny, base, small models pre-installed).\",\n  \"version\": \"0.1.0\",\n  \"meta\": {\n    \"templateId\": \"ts-start-bun\"\n  },\n  \"readme\": \"./README.md\",\n  \"input\": \"./input_schema.json\",\n  \"dockerfile\": \"./Dockerfile\",\n  \"storages\": {\n    \"dataset\": {\n      \"actorSpecification\": 1,\n      \"views\": {\n        \"overview\": {\n          \"title\": \"Overview\",\n          \"transformation\": {\n            \"fields\": [\n              \"json\",\n              \"srt\",\n              \"tsv\",\n              \"txt\",\n              \"vtt\"\n            ]\n          },\n          \"display\": {\n            \"component\": \"table\",\n            \"properties\": {\n              \"json\": {\n                \"label\": \"JSON\",\n                \"format\": \"text\"\n              },\n              \"srt\": {\n                \"label\": \"SRT\",\n                \"format\": \"text\"\n              },\n              \"tsv\": {\n                \"label\": \"TSV\",\n                \"format\": \"text\"\n              },\n              \"txt\": {\n                \"label\": \"Plain Text\",\n                \"format\": \"text\"\n              },\n              \"vtt\": {\n                \"label\": \"VTT\",\n                \"format\": \"text\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}"
          },
          {
            "name": ".actor/input_schema.json",
            "format": "TEXT",
            "content": "{\n  \"title\": \"Video Transcription\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"source_url\": {\n      \"title\": \"Source URL\",\n      \"type\": \"string\",\n      \"description\": \"Direct URL to the video or audio file (e.g., .mp4, .wav). YouTube links are not supported.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"https://raw.githubusercontent.com/donjuanMime/audio_to_text/main/video.mp4\"\n    },\n    \"model\": {\n      \"title\": \"Whisper Model\",\n      \"type\": \"string\",\n      \"description\": \"Whisper model to use: 'tiny', 'base', or 'small' (pre-installed). Other models require download.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"tiny\"\n    }\n  },\n  \"required\": [\"source_url\", \"model\"]\n}"
          },
          {
            "name": "store",
            "folder": true
          },
          {
            "name": "store/dataset.go",
            "format": "TEXT",
            "content": "package store\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"github.com/davesavic/clink\"\n\t\"io\"\n)\n\nfunc GetKVDatasetEndpoint(id string) string {\n\treturn fmt.Sprintf(KVDatasetURL, id)\n}\n\nfunc KVDatasetNew(id string) KVDataset {\n\tclient := clink.NewClient()\n\tclient.Headers[\"Content-Type\"] = \"application/json\"\n\treturn KVDataset{ID: id, Client: client}\n}\n\nfunc KVDatasetDefault() KVDataset {\n\treturn KVDatasetNew(KVDatabaseDefaultID)\n}\n\nfunc (kv KVDataset) Put(payload any) error {\n\turl := GetKVDatasetEndpoint(kv.ID)\n\tkv.Client.Headers[\"Authorization\"] = fmt.Sprintf(\"Bearer %s\", Token)\n\t_, err := kv.Client.Post(url, KVDatasetRequestFrom(payload))\n\tif err != nil {\n\t\txlog.Error(\"failed to set dataset\")\n\t}\n\treturn err\n}\n\nfunc KVDatasetRequestFrom(v any) io.Reader {\n\tb, _ := json.Marshal(v)\n\treturn bytes.NewReader(b)\n}"
          },
          {
            "name": "store/file.go",
            "format": "TEXT",
            "content": "package store\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/davesavic/clink\"\n)\n\nvar (\n\tKVStoreDefaultID    string\n\tKVDatabaseDefaultID string\n\tKVStoreURL          = \"https://api.apify.com/v2/key-value-stores/%s/records/%s?token=%s\"\n\tKVDatasetURL        = \"https://api.apify.com/v2/datasets/%s/items\"\n\tToken               string\n\txlog                = slog.New(slog.NewTextHandler(os.Stdout, nil))\n\n\tDataset KVDataset\n\tStore   KVStore\n)\n\ntype (\n\tKVStoreValue map[string]any\n\tKVStore      struct {\n\t\tID     string\n\t\tClient *clink.Client\n\t}\n\tKVDataset struct {\n\t\tID     string\n\t\tClient *clink.Client\n\t}\n)\n\nfunc init() {\n\tToken = os.Getenv(\"APIFY_TOKEN\")\n\tKVStoreDefaultID = os.Getenv(\"APIFY_DEFAULT_KEY_VALUE_STORE_ID\")\n\tKVDatabaseDefaultID = os.Getenv(\"APIFY_DEFAULT_DATASET_ID\")\n\tif strings.EqualFold(Token, \"\") || strings.EqualFold(KVStoreDefaultID, \"\") {\n\t\txlog.Error(\"token or default kv store missing\")\n\t}\n\n\tDataset = KVDatasetDefault()\n\tStore = KVStoreDefault()\n}\n\nfunc GetKVStoreEndpoint(id string, key string) string {\n\treturn fmt.Sprintf(KVStoreURL, id, key, Token)\n}\n\nfunc KVStoreNew(id string) KVStore {\n\tclient := clink.NewClient()\n\tclient.Headers[\"Content-Type\"] = \"application/json\"\n\treturn KVStore{ID: id, Client: client}\n}\n\nfunc KVStoreDefault() KVStore {\n\treturn KVStoreNew(KVStoreDefaultID)\n}\n\nfunc (kv KVStore) Get(key string) (KVStoreValue, error) {\n\turl := GetKVStoreEndpoint(kv.ID, key)\n\tresp, err := kv.Client.Get(url)\n\tif err != nil {\n\t\txlog.Error(\"failed to get value\", \"key\", key, \"error\", err)\n\t\treturn nil, err\n\t}\n\treturn KVStoreValueFromResponse(resp), nil\n}\n\nfunc (kv KVStore) Put(key string, payload any) error {\n\turl := GetKVStoreEndpoint(kv.ID, key)\n\t_, err := kv.Client.Put(url, KVStoreRequestFrom(payload))\n\tif err != nil {\n\t\txlog.Error(\"failed to set value\", \"key\", key, \"error\", err)\n\t}\n\treturn err\n}\n\nfunc (kv KVStore) Delete(key string) error {\n\turl := GetKVStoreEndpoint(kv.ID, key)\n\t_, err := kv.Client.Delete(url)\n\tif err != nil {\n\t\txlog.Error(\"failed to delete key\", \"key\", key, \"error\", err)\n\t}\n\treturn err\n}\n\nfunc KVStoreRequestFrom(v any) io.Reader {\n\tb, _ := json.Marshal(v)\n\treturn bytes.NewReader(b)\n}\n\nfunc KVStoreValueFromResponse(resp *http.Response) KVStoreValue {\n\tvar value KVStoreValue\n\tif err := clink.ResponseToJson(resp, &value); err != nil {\n\t\txlog.Error(\"failed to unmarshal response\", \"error\", err)\n\t}\n\treturn value\n}"
          },
          {
            "name": "Dockerfile",
            "format": "TEXT",
            "content": "FROM theartist497/whisper-go-app:latest\n\n# Upgrade pip and install whisper-ctranslate2\nRUN pip install --upgrade pip \\\n    && pip install -U whisper-ctranslate2\n\n# Set working directory inside container\nWORKDIR /app\n\n# Copy your app files\nCOPY . .\n\n# Build Go binary\nRUN go build -o main .\n\n# Run the app\nCMD [\"./main\"]"
          },
          {
            "name": "go.mod",
            "format": "TEXT",
            "content": "module audio_to_text\n\ngo 1.23.0\n\nrequire (\n\tgithub.com/davesavic/clink v1.0.2 // indirect\n\tgolang.org/x/time v0.5.0 // indirect\n)"
          },
          {
            "name": "go.sum",
            "format": "TEXT",
            "content": "github.com/davesavic/clink v1.0.2 h1:zpbyoWtx9ztI6nO4wHS72Du6aS3xvtFvdhwn8KOeyh8=\ngithub.com/davesavic/clink v1.0.2/go.mod h1:t/riPX5tWlWKYcP7lvUpfsxFqC6WNnOOO+xvgei+uhg=\ngolang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=\ngolang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM="
          },
          {
            "name": "main.go",
            "format": "TEXT",
            "content": "package main\n\nimport (\n\t\"audio_to_text/store\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\txlog = slog.New(slog.NewTextHandler(os.Stdout, nil))\n)\n\nfunc main() {\n\tinput, err := store.Store.Get(\"INPUT\")\n\tif err != nil {\n\t\txlog.Error(\"failed to get input from kv store\", \"error\", err)\n\t\treturn\n\t}\n\n\tsource := input[\"source_url\"].(string)\n\tif strings.EqualFold(source, \"\") {\n\t\txlog.Error(\"not found 'source_url'\", source)\n\t}\n\n\tmodel := input[\"model\"].(string)\n\tif strings.EqualFold(source, \"\") {\n\t\txlog.Error(\"not found 'source_url'\", source)\n\t}\n\n\ttranscription(source, model)\n}\n\nfunc Test() {\n\turl := \"https://raw.githubusercontent.com/donjuanMime/audio_to_text/main/video.mp4\"\n\tmodel := \"tiny\"\n\ttranscription(url, model)\n}\n\nfunc transcription(sourceUrl, model string) {\n\tdownloadFile(sourceUrl)\n\tfilename := \"video.mp4\"\n\n\tcommand := fmt.Sprintf(`whisper-ctranslate2 %s --batched true --batch_size 4 --max_words_per_line 8 --word_timestamps true --vad_filter true --model %s`, filename, model)\n\n\trunCmdWithProgress(command)\n}\n\nfunc runCmdWithProgress(command string) bool {\n\tcmd := exec.Command(\"bash\", \"-c\", command)\n\n\tvar stdoutBuf, stderrBuf bytes.Buffer\n\tstdoutIn, _ := cmd.StdoutPipe()\n\tstderrIn, _ := cmd.StderrPipe()\n\n\tvar errStdout, errStderr error\n\tstdout := io.MultiWriter(os.Stdout, &stdoutBuf)\n\tstderr := io.MultiWriter(os.Stderr, &stderrBuf)\n\tif err := cmd.Start(); err != nil {\n\t\txlog.Error(\"cmd.Start() failed with \", err)\n\t\treturn false\n\t}\n\n\tvar wg sync.WaitGroup\n\twg.Add(1)\n\n\tgo func() {\n\t\t_, errStdout = io.Copy(stdout, stdoutIn)\n\n\t\tlog.Println(stdoutIn)\n\t\twg.Done()\n\t}()\n\n\t_, errStderr = io.Copy(stderr, stderrIn)\n\twg.Wait()\n\n\tif err := cmd.Wait(); err != nil {\n\t\txlog.Error(\"cmd.Run() failed with \", err)\n\t}\n\tif errStdout != nil || errStderr != nil {\n\t\txlog.Error(\"failed to capture stdout or stderr\", errStderr, errStdout)\n\t\treturn false\n\t}\n\n\tsendResult()\n\n\treturn true\n}\n\nfunc sendResult() {\n\tif err := store.Dataset.Put(map[string]interface{}{\n\t\t\"json\": string(mustReadFile(\"video.json\")),\n\t\t\"srt\":  string(mustReadFile(\"video.srt\")),\n\t\t\"tsv\":  string(mustReadFile(\"video.tsv\")),\n\t\t\"txt\":  string(mustReadFile(\"video.txt\")),\n\t\t\"vtt\":  string(mustReadFile(\"video.vtt\")),\n\t}); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\nfunc mustReadFile(filename string) []byte {\n\tfile, err := os.ReadFile(filename)\n\tif err != nil {\n\t\treturn nil\n\t}\n\treturn file\n}\n\nfunc downloadFile(fileURL string) {\n\toutputPath := \"video.mp4\"\n\n\t// Create the file\n\tout, err := os.Create(outputPath)\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to create file: %v\", err)\n\t}\n\tdefer out.Close()\n\n\t// Get the data\n\tresp, err := http.Get(fileURL)\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to download file: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\t// Check server response\n\tif resp.StatusCode != http.StatusOK {\n\t\tlog.Fatalf(\"Bad status: %s\", resp.Status)\n\t}\n\n\t// Write the body to file\n\t_, err = io.Copy(out, resp.Body)\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to save file: %v\", err)\n\t}\n\n\tlog.Println(\"File downloaded successfully:\", outputPath)\n}"
          }
        ],
        "applyEnvVarsToBuild": false
      }
    ],
    "defaultRunOptions": {
      "build": "latest",
      "timeoutSecs": 0,
      "memoryMbytes": 8192,
      "maxItems": null,
      "maxTotalChargeUsd": null
    },
    "exampleRunInput": {
      "body": "{ \"helloWorld\": 123 }",
      "contentType": "application/json; charset=utf-8"
    },
    "categories": [
      "SOCIAL_MEDIA",
      "DEVELOPER_TOOLS",
      "OPEN_SOURCE"
    ],
    "isDeprecated": false,
    "title": "Audio & Video to Text",
    "pictureUrl": "https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/bIpmafyh133CgRZZS-actor-ty9uxyAcaJ79dqhWb-ekeiaZcfN1-ChatGPT_Image_Jun_2_2025_Video_to_Text_Transcription.png",
    "seoTitle": null,
    "seoDescription": null,
    "pricingInfos": [
      {
        "pricingModel": "PAY_PER_EVENT",
        "minimalMaxTotalChargeUsd": null,
        "pricingPerEvent": {
          "actorChargeEvents": {
            "result": {
              "eventTitle": "result",
              "eventDescription": "result",
              "eventPriceUsd": 0.1,
              "isPrimaryEvent": true
            }
          }
        },
        "createdAt": "2025-06-02T10:54:37.777Z",
        "startedAt": "2025-06-02T10:54:37.777Z",
        "apifyMarginPercentage": 0,
        "notifiedAboutChangeAt": "2025-06-02T11:35:18.170Z"
      },
      {
        "pricePerUnitUsd": 5,
        "trialMinutes": 1440,
        "pricingModel": "FLAT_PRICE_PER_MONTH",
        "isPriceChangeNotificationSuppressed": false,
        "reasonForChange": "I'm sorry, gentlemen, but I'm in the red because of this actor.",
        "startedAt": "2025-08-19T00:00:00.000Z",
        "createdAt": "2025-08-05T05:58:45.241Z",
        "apifyMarginPercentage": 0.2,
        "notifiedAboutFutureChangeAt": "2025-08-05T05:59:05.681Z",
        "notifiedAboutChangeAt": "2025-08-19T00:05:17.702Z"
      },
      {
        "minimalMaxTotalChargeUsd": null,
        "pricingModel": "PAY_PER_EVENT",
        "isPriceChangeNotificationSuppressed": false,
        "pricingPerEvent": {
          "actorChargeEvents": {
            "apify-default-dataset-item": {
              "eventTitle": "result",
              "eventDescription": "Single result in the default dataset.",
              "isOneTimeEvent": false,
              "eventPriceUsd": 0.05,
              "isPrimaryEvent": true
            }
          }
        },
        "startedAt": "2026-09-02T07:10:14.110Z",
        "createdAt": "2026-09-02T07:10:14.400Z",
        "apifyMarginPercentage": 0.2,
        "notifiedAboutChangeAt": "2026-09-02T07:35:36.645Z"
      },
      {
        "minimalMaxTotalChargeUsd": null,
        "pricingModel": "PAY_PER_EVENT",
        "isPriceChangeNotificationSuppressed": false,
        "pricingPerEvent": {
          "actorChargeEvents": {
            "apify-default-dataset-item": {
              "eventTitle": "result",
              "eventDescription": "Single result in the default dataset.",
              "isOneTimeEvent": false,
              "eventPriceUsd": 0.00001,
              "isPrimaryEvent": true
            }
          }
        },
        "startedAt": "2026-09-14T11:14:48.338Z",
        "createdAt": "2026-09-14T11:14:48.676Z",
        "apifyMarginPercentage": 0.2,
        "notifiedAboutChangeAt": "2026-09-14T11:35:58.357Z"
      },
      {
        "minimalMaxTotalChargeUsd": null,
        "pricingModel": "PAY_PER_EVENT",
        "isPriceChangeNotificationSuppressed": false,
        "pricingPerEvent": {
          "actorChargeEvents": {
            "apify-default-dataset-item": {
              "eventTitle": "result",
              "eventDescription": "Single result in the default dataset.",
              "isOneTimeEvent": false,
              "eventPriceUsd": 0.01,
              "isPrimaryEvent": true
            }
          }
        },
        "startedAt": "2026-11-01T11:30:00.719Z",
        "createdAt": "2026-10-18T10:30:00.996Z",
        "apifyMarginPercentage": 0.2,
        "notifiedAboutFutureChangeAt": "2026-10-18T10:30:21.571Z"
      }
    ],
    "notice": "NONE",
    "isCritical": false,
    "isGeneric": false,
    "hasNoDataset": false,
    "isSourceCodeHidden": false,
    "actorStandby": {
      "isEnabled": false,
      "maxRequestsPerActorRun": 4,
      "desiredRequestsPerActorRun": 3,
      "idleTimeoutSecs": 300,
      "build": "latest",
      "memoryMbytes": 8192,
      "shouldPassActorInput": false,
      "tenancy": "SINGLE_TENANT"
    },
    "standbyUrl": null,
    "actorPermissionLevel": "LIMITED_PERMISSIONS",
    "readmeSummary": "## Video and Audio to Text Transcription\n\nA speech-to-text Apify Actor that uses OpenAI Whisper to transcribe audio and video into multiple textual and subtitle formats. The Actor fetches media files (e.g., MP4 or other audio/video sources), runs Whisper models (including preinstalled tiny/base/small models for faster offline-ready processing) to produce structured speech recognition results (segments, tokens, timestamps, and metadata) and exports transcriptions as subtitle formats (SRT, WebVTT), tabular timestamped text (TSV), and plain text transcripts. Keywords: speech-to-text, OpenAI Whisper, audio transcription, video transcription, subtitles, captions, SRT, VTT, TSV, timestamps, transcript segments, tokens, offline models.\n\n## Use cases\n\n- Transcribe audio and video files (example sources: MP4, online audio/video) into searchable plain-text transcripts.  \n- Generate subtitle and caption files (SRT, WebVTT) for videos.  \n- Produce timestamped, segment-level transcripts for indexing, segment extraction, or chaptering.  \n- Export structured speech-recognition metadata (segments and tokens) for downstream NLP, summarization, or analytics.  \n- Convert spoken content into multiple formats for editing, translation, or content repurposing.",
    "deploymentKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9v1KU/q4MWsgl6Hi2oL3ohfSAiz1pFIVbYjbD6e80zOyNnl7P2ydxvOCCGKRRqfbOB/fNkMYNiOzL0OkiVV5gg1Bb+gpo0zOS8+CfyO2dWgqSl6HQeB1wMavp0uCFUchLT/QUyfHkmJprhpZG5k81vTumPl/9yjXDaS538sH9xi98D+3ORiyXGHRIAPLXZTevD2QqKqdJSydPrLQ0LsKF0uan7sKyC0t5lAurXK0c+kfVO62sRzFJr7rUP7WA4OXp926YNV263cTW1RbBWM226mtJqr6YeMr2VOfH9l7/gWBD3unAMO2Ct26+Sem0LDFr28nZM9umyKZC6zazhnW3 \n"
  }
}