---
title: "transcribe_media: Transcribe audio or video"
description: "Get the spoken words out of any audio or video in the user's account, timed and attributed to speakers."
canonical_url: "https://meetkuro.com/agents/tools/transcribe_media/"
updated: 2026-11-03
locale: "en"
tool: "transcribe_media"
scopes: ["media.read"]
---

# transcribe_media

**Transcribe audio or video**

Get the spoken words out of any audio or video in the user's account, timed and attributed to speakers.

WHAT IT TAKES. One `media` reference — an upload or a generation, in the exact shape list_media returns. Anything with a sound track qualifies: an uploaded video or podcast, a voice-over or music track generated here, a clip this studio rendered. Images are refused.
Up to 60 minutes of media per file. Costs no credits.

HOW IT RUNS. The first call queues the transcription and returns ready:false — call get_transcription with the same media to poll, usually a few seconds for a short clip and longer for a long one. The result is stored against the file, so once it is ready every later call returns it instantly and for free.

WHAT COMES BACK. `segments` are timed lines in order, each with `start_seconds`, `end_seconds`, a diarization `speaker` label and its text; `speakers` lists the distinct labels; `language` is what the speech model detected; `text` is the whole thing as prose for reading.

USING IT TO ANALYSE A VIDEO. This is the words half. measure_video is the pictures half — measured shot boundaries and keyframe images for a video upload — and the two are meant to be read together: the bundle tells you when the cuts are and what is on screen, this tells you what is being said over them and by whom. Reach for this one alone whenever the file is audio, is a generation rather than an upload, is longer than the bundle accepts, or when you need to know who spoke.

The timings and speaker labels are measured, not guessed. Quote them; never round, shift or invent one. An empty transcript is a real answer — silent footage, an instrumental track — and not a reason to retry.

## Scope

- `media.read` — Reads the account: media, uploads, boards, runs, Subjects, models and the balance.

## Behaviour

- **Writes**: The first call queues a transcription of the caller's own media and stores it; later calls read the stored result.
- **Adds or updates**: Adds or updates; nothing the caller already has is deleted or overwritten.
- **Stays in the account**: Stays inside the caller's private Kuro account: any media provider it calls acts on Kuro's account, and the result is visible to no one else.
- **Idempotent**: Calling it again with the same arguments has no further effect.

## Credits

What the tool's description says about credits, verbatim:

- Costs no credits.

## Inputs

| Name | Type | Required | Details |
| --- | --- | --- | --- |
| `media` | object (type: "upload") or object (type: "generation") | yes | The audio or video to transcribe — an upload or a generation, in the shape list_media returns. |
| `retry` | boolean | no | Run a failed transcription again. A ready transcript is never replaced; a plain call polls. |
| `chunk_max_seconds` | integer | no | Also cut the recording at its pauses into lines of at most this many seconds (15 for an avatar clip): `chunks` gives each line's start_seconds and duration_seconds for trim_audio. — ≥ 1; ≤ 60 |

## Example call

A `tools/call` request with the required arguments only, each a placeholder read off the schema. Replace them before sending.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "transcribe_media",
    "arguments": {
      "media": {
        "type": "upload",
        "upload_id": "00000000-0000-4000-8000-000000000000"
      }
    }
  }
}
```

## Input schema

As the server sends it in `tools/list`:

```json
{
  "type": "object",
  "properties": {
    "media": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "upload"
            },
            "upload_id": {
              "type": "string",
              "format": "uuid"
            }
          },
          "required": [
            "type",
            "upload_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "generation"
            },
            "generation_id": {
              "type": "string",
              "format": "uuid"
            }
          },
          "required": [
            "type",
            "generation_id"
          ],
          "additionalProperties": false
        }
      ],
      "description": "The audio or video to transcribe — an upload or a generation, in the shape list_media returns."
    },
    "retry": {
      "type": "boolean",
      "description": "Run a failed transcription again. A ready transcript is never replaced; a plain call polls."
    },
    "chunk_max_seconds": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60,
      "description": "Also cut the recording at its pauses into lines of at most this many seconds (15 for an avatar clip): `chunks` gives each line's start_seconds and duration_seconds for trim_audio."
    }
  },
  "required": [
    "media"
  ],
  "additionalProperties": false
}
```

## Related tools

- [`list_media`](https://meetkuro.com/agents/tools/list_media.md): List ready generations and verified uploads already in the user's account, newest first.
- [`get_transcription`](https://meetkuro.com/agents/tools/get_transcription.md): Read the transcript and status of existing work.
- [`measure_video`](https://meetkuro.com/agents/tools/measure_video.md): Measure an uploaded video so you can reverse-engineer its format: shot boundaries with real timestamps, one or more keyframe images per shot, a timed transcript, and pacing stats.
- [`trim_audio`](https://meetkuro.com/agents/tools/trim_audio.md): Save one stretch of an owned voice-over, song or audio upload as a new WAV audio generation, cut to the sample.

---

## About Kuro

Kuro is an AI picture studio: prompt-driven images, clips, voice-overs and music, and storyboard-backed films with consistent characters across every scene.

Agents connect over MCP and can generate directly:

```
claude mcp add kuro https://api.meetkuro.com/mcp --transport http
```

The app is at https://app.meetkuro.com and requires an account.

Each guide, model page, comparison and free tool page on this site (not a tool's variants, and not the index pages) has a Markdown twin at its own URL plus `.md`, and so do /benchmarks/, the English /agents/ page (as /agents.md) and the MCP tool reference. Every tool: https://meetkuro.com/agents/tools/
