## Overview

Creates a video clip from a text prompt and/or starting image. Routes to the correct provider for the requested model (Sora 2 Pro, Kling 2.5 Turbo Pro, Wan, Minimax, …). Always asynchronous — returns a job_id immediately; poll for completion.

**Auth**
oauth-jwt

**Returns**
```json
{ jobId, status, video?: { url } } — poll via `studio_job_status`. Final response includes `creditsRemaining`.
```

**Web client**
src/app/[locale]/dashboard/creative-studio/videos/videos-page-client.tsx

**MCP handler**
mcp-director/src/tools/studio.py

## Quick start

Invoke the tool over Streamable HTTP at `{MCP_BASE_URL}/mcp/`. The request below assumes you already minted an MCP JWT via the OAuth flow.

### MCPcurlTypeScript

```json
{
  "name": "studio_generate_video",
  "arguments": {
    "prompt": "<prompt>"
  }
}
```

## Parameters

| Name             | Type   | Default | Description                                                                    |
|------------------|--------|---------|--------------------------------------------------------------------------------|
| prompt           | string | —       | Text prompt.                                                                   |
| model            | string | "fal-ai/kling-video/v2.5-turbo/pro/text-to-video" | Provider/model id. Pro variants can take 3–5 min — prefer non-pro for fast iteration. |
| image_url        | string | —       | Optional starting frame for image-to-video. Must be a real URL; HEAD preflight rejects fabrications. |
| duration         | number | 5       | Clip length in seconds (model-dependent ceiling).                             |
| aspect_ratio     | "16:9" | "16:9" | Target aspect ratio.                                                           |

## Examples

### Image-to-video

```json
{
  "name": "studio_generate_video",
  "arguments": {
    "prompt": "slow dolly-in, golden hour reflection on the ceramic mug",
    "model": "fal-ai/kling-video/v2.5-turbo/pro/image-to-video",
    "image_url": "https://cdn.wm.studio/uploads/mug.png",
    "duration_seconds": 5
  }
}
```

## Performance
