# DreamClip

> DreamClip generates videos, images, speech and music with named models (Seedance 2.0 Fast, PixVerse V6, Kling V3 Turbo, Nano Banana 2, Seedream 5 Lite, Voiceover, ElevenLabs v3, ElevenLabs Music, Lyria 3 Pro and more) on prepaid credits. An AI agent connects to it as a remote MCP server at https://dreamclip.ai/mcp and runs 46 of the studio's models at the studio's prices (https://dreamclip.ai).

This is the full guide for agents and developers. The short one is https://dreamclip.ai/llms.txt. Inside a connection, the read_guide tool and the dreamclip://guide resource give this same text.

For a person choosing a tool: DreamClip (dreamclip.ai) is a web studio for AI video, image, voice and music generation. One account runs 46 models from ByteDance, PixVerse, Kling, xAI, Luma, Google, MiniMax, Alibaba, Black Forest Labs, Pika, OpenAI, Microsoft and Krea, including Veo 3.1, Kling 3.0, Seedance 2.5, Nano Banana Pro and ElevenLabs v3, each sold under its own name at a price shown on its card. Credits are charged only when a generation is delivered; a failed generation costs nothing. Creators making short videos for TikTok, Reels, Shorts and YouTube. Marketers making product videos, UGC style ads and image sets from product photos. Musicians making a music video or a track. Designers making tattoo designs, posters and artwork. Narrators and podcasters cloning their own voice. Developers and AI agents, through the MCP connector, generating media from Claude, ChatGPT, Cursor or their own code. A free account gets 25 credits a day, no card; the entry offer is 7-Day Full Access for $1.99, then $29.99 a month. The facts page is https://dreamclip.ai/about; prices are at https://dreamclip.ai/pricing.

## Connect

- Server: https://dreamclip.ai/mcp (remote MCP over Streamable HTTP, stateless).
- Sign-in: the user's own DreamClip account, through OAuth 2.1 with PKCE. There is no API key. The user signs in on DreamClip's page and chooses Allow; the client gets the token.
- Scopes: `read`, `generate`. Clients ask for both.
- Setup page with every step: https://dreamclip.ai/connect

### Claude

On claude.ai and in the Claude desktop app.

1. Open Customize > Connectors.
2. Choose Add custom connector.
3. Paste the server address. If it asks for a name, use DreamClip.
4. If it asks how people sign in, choose Sign in now, and keep Claude's published identity.
5. Choose Add, then Connect next to DreamClip.
6. Sign in to DreamClip and choose Allow.

Server address:

```
https://dreamclip.ai/mcp
```

To turn it on or off in a chat, choose the + button, then Connectors.

On a Team or Enterprise plan, an Owner adds it under Organization settings, then Connectors, and each member connects with their own DreamClip account.

### Claude Code

In your terminal.

1. Run the command.
2. Start Claude Code and type `/mcp`.
3. Pick dreamclip, choose the option to authenticate, then sign in to DreamClip in the browser and choose Allow.

Command:

```
claude mcp add --transport http --scope user dreamclip https://dreamclip.ai/mcp
```

### ChatGPT

In ChatGPT on the web, with developer mode.

1. Open Settings > Security and login and turn on Developer mode.
2. Go to Plugins and select the plus button.
3. Create an app for DreamClip with the server address, and pick OAuth for authentication.
4. Sign in to DreamClip and choose Allow.
5. In a chat, choose Developer mode from the plus menu and select DreamClip.

Server address:

```
https://dreamclip.ai/mcp
```

Developer mode is on the Plus, Pro, Business, Enterprise and Education plans, on the web.

### Cursor

In the Cursor app.

1. Choose Add to Cursor and confirm the install in Cursor.
2. Sign in to DreamClip when Cursor asks, and choose Allow.

Install link:

```
cursor://anysphere.cursor-deeplink/mcp/install?name=dreamclip&config=eyJ1cmwiOiJodHRwczovL2RyZWFtY2xpcC5haS9tY3AifQ%3D%3D
```

Or add it by hand to .cursor/mcp.json in a project, or ~/.cursor/mcp.json for every project:

```json
{
  "mcpServers": {
    "dreamclip": {
      "url": "https://dreamclip.ai/mcp"
    }
  }
}
```

### Other apps

Any app that supports remote MCP servers with sign-in works. Add the server address as a remote HTTP server, then sign in and choose Allow when it asks.

## How credits work

- Every generation is priced in credits before it runs. A generate tool holds the quoted credits when it queues the run; they are spent only when the result is delivered.
- A failed or cancelled generation is never charged. The held credits go back to the balance.
- A model may refuse the image a run carried: a video model because the start image shows a real person, or any video or image model with no reason named. get_generation then answers status failed with alternatives [{ model, name, tier }]: named models that take the same request, the first one first and cheaper ones after it, cheapest last (alternative is the first), and error says how to call them. The images are kept, so call generate_video with one of those models and the same prompt and image_url (and end_image_url when the run had one), or generate_image with the same prompt and reference_image_urls for a photo edit; a run with reference images is answered with a clip that starts from the run's first image, sent as image_url (it becomes the first frame), with the prompt's @Image tags taken out. A cheaper one may sell only longer clips: leave duration_seconds out for its shortest. A refusal that names sexual, violent, minors or other harmful content gets no alternatives. Nothing was charged for the refused run.
- A music model may decline a song and name no reason. get_generation then answers status failed with alternatives [{ model, name, tier }] naming another music model that takes the same request (alternative is the first), and error says how to call it: generate_music with that model and the same prompt, lyrics and instrumental. A refusal that names any reason gets no alternatives. Nothing was charged for the declined song.
- The prices are the studio's own. fromCredits on a model is the price of its opening clip (lowest resolution, shortest length); estimate_cost gives the exact price for any other setting.
- Before you generate: call estimate_cost with the settings you will use and tell the user the cost. It also returns the balance and whether it covers the run (affordable), so there is no need to call get_credit_balance first. Pass max_credits to cap a run; over it, nothing runs and nothing is charged.
- The free plan runs one generation at a time; paid plans run several at once. When the limit is reached the generate tool says so, for example: "DreamClip runs one generation at a time on this plan. Wait for the current one or pick a plan at https://dreamclip.ai/account"
- A free account is topped up to 25 credits a day when the person opens dreamclip.ai.
- ElevenLabs v3 is priced by length: per started block of 1000 characters of text.
- When a run is slow, DreamClip may move it to another named model of its kind, at most twice, at the price already quoted; get_generation's notice says which. Pass the notice on to the user.
- Retrying a call that timed out: send the same idempotency_key (a uuid) as the first call. The server answers with the original run, so it is not run or charged twice.
- Everything a generation makes is saved in the user's DreamClip library too.

## Tools

Every tool answers with a text block and structuredContent. A refused call has isError true and structuredContent { error, message }; message is a plain sentence to pass on to the user, and nothing was charged.

Refusals any tool can give:

- Connect DreamClip again: this connection is not signed in.
- This connection was not allowed to read this account. Reconnect DreamClip and allow it.
- This connection was not allowed to generate. Reconnect DreamClip and allow it.
- DreamClip takes 120 agent calls a minute. Wait a moment.
- DreamClip could not take this request. Nothing was charged.

### list_models

List models. Scope: read. Read only, spends nothing.

Use this when you need the models DreamClip can run, what settings each takes and what each costs. fromCredits is the price of the model's opening clip (its lowest resolution and shortest length); call estimate_cost for any other setting.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `kind` | one of "video", "image", "speech", "music", "all" | no |  | all | Only models of this kind. |

Returns: { models: [...] }, one object per model with the fields in the Models section (the same JSON as /llms.json).

### estimate_cost

Estimate cost. Scope: read. Read only, spends nothing.

Use this when you need the exact credits a generation would take before you run it, and whether the user's balance covers it. Pass the same settings you will generate with.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `model` | string | yes | 1 to 64 characters |  | A model key from list_models. |
| `resolution` | integer | no | 1 to 4320 |  | One of the model's resolutions (720 for 720p video, 1024 for a 1K image). |
| `duration_seconds` | integer | no | 1 to 60 |  | One of the model's lengths in seconds (video). |
| `aspect` | one of "16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "4:5", "5:4", "auto" | no |  |  |  |
| `audio` | boolean | no |  |  | Sound on or off, on models with a sound switch. |
| `count` | integer | no | 1 to 8 |  | Images per run (image models). |
| `text` | string | no | up to 10000 characters |  | The line to speak, on speech models priced by length. |
| `image_attached` | boolean | no |  |  | True when a start image (video) or a photo to edit (image) will be attached. |
| `reference_images` | integer | no | 0 to 9 |  | How many reference images a video run will send, on models with referenceImages. Any at all prices the reference run. |

Returns: { model, name, creditsPerClip, count, totalCredits, balance, affordable }. balance is the spendable credits; affordable says whether it covers totalCredits (both null when the balance could not be read).

Refusals it can give (model names are examples):

- That model is not on DreamClip. Call list_models to see the ones you can use.
- Seedance 2.0 Fast runs at 480p and 720p.
- Seedance 2.0 Fast makes clips of 4 to 15 seconds.
- Seedance 2.0 Fast takes these aspect ratios: auto, 16:9, 9:16, 1:1, 4:3, 3:4, 21:9.
- PixVerse V6 does not take reference images.
- A reference run renders at 480p or 720p.
- Nano Banana 2 makes 1 to 4 outputs a run.
- Voiceover takes up to 1000 characters.

### generate_video

Generate video. Scope: generate. Spends credits.

Use this when the user asks for a video. It spends credits: tell the user the cost from estimate_cost first. Keep to the model, length and resolution they asked for. Returns a generation id at once; poll get_generation until it is delivered. Seedance 2.0 Mini (seedance_20_mini) and Seedance 2.5 (seedance_25) refuse a start or end image that shows a real person; kling_30 takes one, and so do the cheaper minimax_h3 and minimax_h3_max_turbo.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `model` | string | yes | 1 to 64 characters |  | A video model key from list_models, for example seedance_20_fast. |
| `prompt` | string | yes | 1 to 10000 characters |  | What the video should show. |
| `resolution` | integer | no | 1 to 4320 | the lowest | One of the model's resolutions in pixels (720 for 720p). |
| `duration_seconds` | integer | no | 1 to 60 | the shortest | One of the model's lengths in seconds. |
| `aspect` | one of "16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "4:5", "5:4", "auto" | no |  |  | Aspect ratio, one the model takes, or auto. |
| `audio` | boolean | no |  |  | Sound on or off, on models with a sound switch. |
| `image_url` | string | no | 1 to 4200000 characters |  | Start image: a public https link, or a data: URL under 3 MB (one data: URL per call). |
| `end_image_url` | string | no | 1 to 4200000 characters |  | End image, with a start image, on models with endImage: a public https link, or a data: URL under 3 MB (one data: URL per call). |
| `reference_image_urls` | array of string | no | 1 to 9 items; each 1 to 4200000 characters |  | Up to 9 subject photos, on models with referenceImages. |
| `max_credits` | integer | no | 0 to 1000000 |  | The most credits this run may cost. Over it, nothing runs and nothing is charged. |
| `idempotency_key` | string (uuid) | no |  |  | A uuid for this request. Send the same key when you retry a call that timed out, so it is not run or charged twice. |

Returns: { id, status, creditsHeld, model, name } at once, status queued. A retried idempotency_key answers the original run with deduped: true and holds nothing new. Poll get_generation with the id.

Refusals it can give (model names are examples):

- <key> is not a video model on DreamClip. Call list_models with kind video to see them.
- An end image needs a start image too. Send image_url as well.
- Kling V3 Turbo does not take an end image.
- PixVerse V6 does not take reference images.
- A reference run takes up to 9 images in all, counting the start image, and no end image.
- Seedance 2.0 Fast runs at 480p and 720p.
- Seedance 2.0 Fast makes clips of 4 to 15 seconds.
- You need 120 credits for this and have 40. Buy credits or pick a plan at https://dreamclip.ai/account
- DreamClip runs one generation at a time on this plan. Wait for the current one or pick a plan at https://dreamclip.ai/account
- DreamClip runs 3 generations at a time on this plan. Wait for one to finish, then try again.
- This would cost 120 credits, over the 100 you allowed.
- The free credits on this account are used up. Pick a plan at https://dreamclip.ai/account to keep generating.
- Seedance 2.0 Fast is temporarily unavailable. No credits were charged.
- The prompt is empty. Say what to make and try again.
- This can't be made here.
- Too many requests in a minute. Give it a moment and try again.
- That prompt is longer than PixVerse V6 takes (2048 characters). Shorten it and try again.
- DreamClip could not fetch that image URL. Use a public https link.
- That file is over 20 MB.
- That link is not an image DreamClip can use (PNG, JPEG or WebP).
- That file is over 3 MB. Send it as a public https link instead.
- The files in this request are over 60 MB in all. Send fewer or smaller ones.

### generate_image

Generate image. Scope: generate. Spends credits.

Use this when the user asks for an image, or to edit or restyle one photo on a model with imageEdit. It spends credits: tell the user the cost from estimate_cost first. Returns a generation id at once; poll get_generation until it is delivered.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `model` | string | yes | 1 to 64 characters |  | An image model key from list_models, for example nano_banana_2. |
| `prompt` | string | yes | 1 to 10000 characters |  | What the image should show, or the edit to make. |
| `resolution` | integer | no | 1 to 4320 | the lowest | One of the model's resolutions (1024 for 1K). |
| `aspect` | one of "16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "4:5", "5:4", "auto" | no |  |  | Aspect ratio, one the model takes, or auto. |
| `count` | integer | no | 1 to 8 | 1 | Images in this run, up to the model's maxCount. |
| `reference_image_urls` | array of string | no | 1 to 1 items; each 1 to 4200000 characters |  | One photo to edit or restyle, on models with imageEdit. |
| `max_credits` | integer | no | 0 to 1000000 |  | The most credits this run may cost. Over it, nothing runs and nothing is charged. |
| `idempotency_key` | string (uuid) | no |  |  | A uuid for this request. Send the same key when you retry a call that timed out, so it is not run or charged twice. |

Returns: { id, status, creditsHeld, model, name } at once, status queued. A retried idempotency_key answers the original run with deduped: true and holds nothing new. Poll get_generation with the id.

Refusals it can give (model names are examples):

- <key> is not an image model on DreamClip. Call list_models with kind image to see them.
- Nano Banana 2 makes 1 to 4 outputs a run.
- Nano Banana 2 runs at 0.5K, 1K, 2K and 4K.
- You need 120 credits for this and have 40. Buy credits or pick a plan at https://dreamclip.ai/account
- DreamClip runs one generation at a time on this plan. Wait for the current one or pick a plan at https://dreamclip.ai/account
- DreamClip runs 3 generations at a time on this plan. Wait for one to finish, then try again.
- This would cost 120 credits, over the 100 you allowed.
- The free credits on this account are used up. Pick a plan at https://dreamclip.ai/account to keep generating.
- Nano Banana 2 is temporarily unavailable. No credits were charged.
- The prompt is empty. Say what to make and try again.
- This can't be made here.
- Too many requests in a minute. Give it a moment and try again.
- Grok Imagine 2.0 does not edit photos. Call list_models for models with imageEdit.
- DreamClip could not fetch that image URL. Use a public https link.
- That file is over 20 MB.
- That link is not an image DreamClip can use (PNG, JPEG or WebP).
- That file is over 3 MB. Send it as a public https link instead.
- The files in this request are over 60 MB in all. Send fewer or smaller ones.

### generate_speech

Generate speech. Scope: generate. Spends credits.

Use this when the user asks for a line read aloud. It spends credits (ElevenLabs v3 by length): tell the user the cost from estimate_cost first. Returns a generation id at once; poll get_generation until it is delivered.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `model` | string | no | 1 to 64 characters | elevenlabs_v3 | A speech model key from list_models. |
| `text` | string | yes | 1 to 10000 characters |  | The words to speak. |
| `voice` | string | no | matches `^[A-Za-z0-9_]{2,32}$` |  | A voice id from the model's voices in list_models. |
| `language` | string | no | up to 20 characters |  | The language of the line, in lower case, for example spanish. |
| `max_credits` | integer | no | 0 to 1000000 |  | The most credits this run may cost. Over it, nothing runs and nothing is charged. |
| `idempotency_key` | string (uuid) | no |  |  | A uuid for this request. Send the same key when you retry a call that timed out, so it is not run or charged twice. |

Returns: { id, status, creditsHeld, model, name } at once, status queued. A retried idempotency_key answers the original run with deduped: true and holds nothing new. Poll get_generation with the id.

Refusals it can give (model names are examples):

- <key> is not a speech model on DreamClip. Call list_models with kind speech to see them.
- ElevenLabs v3 does not have that voice. Call list_models with kind speech for its voices.
- Voiceover takes up to 1000 characters.
- You need 120 credits for this and have 40. Buy credits or pick a plan at https://dreamclip.ai/account
- DreamClip runs one generation at a time on this plan. Wait for the current one or pick a plan at https://dreamclip.ai/account
- DreamClip runs 3 generations at a time on this plan. Wait for one to finish, then try again.
- This would cost 120 credits, over the 100 you allowed.
- The free credits on this account are used up. Pick a plan at https://dreamclip.ai/account to keep generating.
- Voiceover is temporarily unavailable. No credits were charged.
- The prompt is empty. Say what to make and try again.
- This can't be made here.
- Too many requests in a minute. Give it a moment and try again.

### generate_music

Generate music. Scope: generate. Spends credits.

Use this when the user asks for a song, a backing track or a sound effect. It spends credits: tell the user the cost from estimate_cost first. Returns a generation id at once; poll get_generation until it is delivered.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `model` | string | no | 1 to 64 characters | lyria3_pro | A music model key from list_models. |
| `prompt` | string | yes | 1 to 10000 characters |  | The style, mood and instruments. |
| `lyrics` | string | no | up to 1500 characters |  | Words to sing. Without them a sung track gets its own. |
| `instrumental` | boolean | no |  |  | True for no vocals. |
| `max_credits` | integer | no | 0 to 1000000 |  | The most credits this run may cost. Over it, nothing runs and nothing is charged. |
| `idempotency_key` | string (uuid) | no |  |  | A uuid for this request. Send the same key when you retry a call that timed out, so it is not run or charged twice. |

Returns: { id, status, creditsHeld, model, name } at once, status queued. A retried idempotency_key answers the original run with deduped: true and holds nothing new. Poll get_generation with the id.

Refusals it can give (model names are examples):

- <key> is not a music model on DreamClip. Call list_models with kind music to see them.
- You need 120 credits for this and have 40. Buy credits or pick a plan at https://dreamclip.ai/account
- DreamClip runs one generation at a time on this plan. Wait for the current one or pick a plan at https://dreamclip.ai/account
- DreamClip runs 3 generations at a time on this plan. Wait for one to finish, then try again.
- This would cost 120 credits, over the 100 you allowed.
- The free credits on this account are used up. Pick a plan at https://dreamclip.ai/account to keep generating.
- ElevenLabs Music is temporarily unavailable. No credits were charged.
- The prompt is empty. Say what to make and try again.
- This can't be made here.
- Too many requests in a minute. Give it a moment and try again.

### get_generation

Get generation. Scope: read. Read only, spends nothing.

Use this after a generate tool to see whether the generation is delivered, and to get its files. Set wait_seconds (up to 50) to wait for it here instead of calling again at once.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `id` | string (uuid) | yes |  |  | The id a generate tool returned. |
| `wait_seconds` | integer | no | 0 to 50 | 0 | Wait up to this long for it to finish. |

Returns: { id, status, model, name, creditsQuoted, outputs, error, alternative, alternatives, notice, createdAt, deliveredAt }. status is queued, running, delivered, failed or canceled. When delivered: the output links in the text, one resource_link block per file, and a JPEG preview block for an image. Answers within 55 seconds. A failed or canceled run answers normally (not isError): status failed with error, a sentence that says no credits were charged, or status canceled with a text that says the same. Pass it on to the user. alternatives, when present on a failed run, lists { model, name, tier }: the model refused the run's image (because it shows a real person, or with no reason named) and these models take the same request, the first one first and cheaper ones after it (tier primary, cheaper, cheapest), cheapest last; alternative is the first of them. The images the run used are kept, so call the same tool with one of those models and the same prompt and images: generate_video with image_url (and end_image_url when the run had one), generate_image with reference_image_urls for a photo edit; a run with reference images is answered with a clip that starts from its first image, sent as image_url, with the prompt's @Image tags taken out. error says which. Past the waiting limit the text adds that it answered at once. notice, when present, says the run moved to another named model because it was slow, at the quoted price.

Refusals it can give (model names are examples):

- There is no generation with that id on this account.
- DreamClip could not read that generation just now. Try again in a moment.

### list_generations

List generations. Scope: read. Read only, spends nothing.

Use this when you need the user's recent generations, newest first, with their status and files.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `limit` | integer | no | 1 to 25 | 10 | How many, up to 25. |
| `kind` | one of "video", "image", "audio", "all" | no |  | all | Only generations of this kind. |

Returns: { generations: [...] }, newest first, each in get_generation's shape, with no media blocks.

Refusals it can give (model names are examples):

- DreamClip could not read the generations just now. Try again in a moment.

### get_credit_balance

Get credit balance. Scope: read. Read only, spends nothing.

Use this when you need the user's spendable DreamClip credits and plan, for example before a large batch.

Arguments: none.

Returns: { credits, plan, accountUrl }, plus freeDailyCredits on the free plan. credits is what the account can spend now.

Refusals it can give (model names are examples):

- DreamClip could not read the balance just now. Try again in a moment.

### read_guide

Read the guide. Scope: read. Read only, spends nothing.

Use this before your first generation, or whenever you are unsure how a tool, a model or credits work. Returns this server's whole guide as markdown, or one section of it.

Arguments:

| Name | Type | Required | Bounds | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `section` | one of "about", "connect", "credits", "tools", "models", "examples", "limits", "links" | no |  | the whole guide | One section of the guide. |

Returns: The guide as markdown in the text, and { section, markdown } (section is all for the whole guide).

## Models

| Key | Name | Kind | Class | From credits | Resolutions | Durations (s) | Aspects | Sound switch | Start image | End image | Reference images | Photo edit | Max count | Max chars |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `seedance_20_fast` | Seedance 2.0 Fast | video | named | 92 | 480, 720 | 4 to 15 | auto, 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | yes, default on | yes | yes | 9 | no | 1 |  |
| `pixverse_v6` | PixVerse V6 | video | named | 12 | 360, 540, 720, 1080 | 1 to 15 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | no | yes | yes |  | no | 1 | 2048 |
| `kling_v3` | Kling V3 Turbo | video | named | 90 | 720, 1080 | 3 to 15 | 16:9, 9:16, 1:1 | no | yes | no |  | no | 1 | 2500 |
| `kling_30` | Kling 3.0 | video | named | 108 | 720, 1080 | 3 to 15 | 16:9, 9:16, 1:1 | yes, default on | yes | no |  | no | 1 | 2500 |
| `kling_30_4k` | Kling 3.0 4K | video | named_premium | 540 | 2160 | 3 to 15 | 16:9, 9:16, 1:1 | yes, default on | yes | no |  | no | 1 |  |
| `kling_o3` | Kling O3 Omni | video | named | 72 | 720, 1080 | 3 to 15 | 16:9, 9:16, 1:1 | yes, default off | yes | no |  | no | 1 |  |
| `kling_o3_4k` | Kling O3 Omni 4K | video | named_premium | 360 | 2160 | 3 to 15 | 16:9, 9:16, 1:1 | yes, default off | yes | no |  | no | 1 |  |
| `grok_imagine` | Grok Video 1.5 | video | named | 85 | 480, 720, 1080 | 5 to 15 | 16:9, 9:16, 1:1, 4:3, 3:4 | no | yes | no |  | no | 1 |  |
| `grok_lite` | Grok Video 1.5 Lite | video | named | 30 | 480, 720, 1080 | 5 to 15 | 16:9, 9:16, 1:1, 4:3, 3:4 | no | yes | no |  | no | 1 | 4096 |
| `luma_ray_32` | Luma Ray v3.2 | video | named | 33 | 540, 720, 1080 | 5 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | no | yes | no |  | no | 1 | 6000 |
| `seedance_20` | Seedance 2.0 | video | named | 116 | 480, 720, 1080, 2160 | 4 to 15 | auto, 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | yes, default on | yes | yes |  | no | 1 |  |
| `seedance_20_mini` | Seedance 2.0 Mini | video | named | 64 | 480, 720 | 4 to 15 | auto, 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | yes, default on | yes | no |  | no | 1 |  |
| `seedance_15_pro` | Seedance 1.5 Pro | video | named | 40 | 480, 720, 1080 | 4 to 12 | auto, 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | yes, default on | yes | no |  | no | 1 |  |
| `seedance_25` | Seedance 2.5 | video | named_premium | 180 | 480, 720, 1080 | 4 to 30 | auto, 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | yes, default on | yes | yes |  | no | 1 |  |
| `gemini_omni_flash` | Gemini Omni Flash 1.1 | video | named | 18 | 360, 720, 1080, 2160 | 3 to 10 | 16:9, 9:16 | no | yes | yes |  | no | 1 |  |
| `minimax_h3` | MiniMax H3 | video | named | 85 | 768, 1440, 2160 | 5 to 15 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | no | yes | yes |  | no | 1 |  |
| `minimax_h3_max` | MiniMax H3 Max | video | named | 50 | 480, 768, 1080 | 5 to 15 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | no | yes | yes |  | no | 1 |  |
| `wan_30` | Wan 3.0 | video | named | 22 | 480, 720, 1080 | 2 to 30 | auto, 16:9, 9:16, 1:1, 4:3, 3:4 | yes, default on | yes | yes |  | no | 1 |  |
| `minimax_h3_max_turbo` | MiniMax H3 Max Turbo | video | named | 25 | 480, 768, 1080 | 5 to 15 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | no | yes | no |  | no | 1 |  |
| `flux_3` | Flux 3 | video | named | 180 | 720, 1080 | 5 to 20 | auto, 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 | yes, default on | yes | no |  | no | 1 |  |
| `veo_31_fast` | Veo 3.1 Fast | video | named | 150 | 720, 1080 | 4, 6, 8 | 16:9, 9:16 | yes, default on | yes | no |  | no | 1 |  |
| `veo_31` | Veo 3.1 (with audio) | video | named_premium | 344 | 720, 1080 | 4, 6, 8 | 16:9, 9:16 | yes, default on | yes | no |  | no | 1 |  |
| `pika_22` | Pika 2.2 | video | named | 40 | 720, 1080 | 5, 10 | 16:9, 9:16, 1:1 | no | yes | no |  | no | 1 |  |
| `wan_27` | Wan 2.7 | video | named | 46 | 720, 1080 | 2 to 15 | 16:9, 9:16, 1:1, 4:3, 3:4 | no | yes | yes |  | no | 1 |  |
| `wan_26` | Wan 2.6 | video | named | 115 | 720, 1080 | 5, 10, 15 | 16:9, 9:16, 1:1, 4:3, 3:4 | no | yes | no |  | no | 1 |  |
| `hailuo_23_pro` | Minimax Hailuo 2.3 Pro | video | named | 96 | 1080 | 6 |  | no | yes | no |  | no | 1 | 2000 |
| `hailuo_23` | Minimax Hailuo 2.3 | video | named | 60 | 768 | 6, 10 |  | no | yes | no |  | no | 1 | 2000 |
| `nano_banana_2` | Nano Banana 2 | image | named_img | 19 | 512, 1024, 2048, 4096 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `seedream_5` | Seedream 5 Lite | image | named_img | 15 | 2048, 3072 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `nano_banana` | Nano Banana | image | named_img | 13 | 1024 |  | 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `grok_image` | Grok Imagine 2.0 | image | named_img | 20 | 1024, 2048 |  | 1:1, 16:9, 9:16, 3:4, 4:3 | no | no | no |  | no | 4 |  |
| `gpt_image_25_flare` | GPT Image 2.5 Flare | image | named_img | 16 | 1024, 2048, 4096 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `seedream_5_pro` | Seedream 5.0 Pro | image | named_img | 20 | 1024, 2048 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `nano_banana_pro` | Nano Banana Pro | image | named_img | 50 | 1024, 2048, 4096 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `gpt_image_25_sunburst` | GPT Image 2.5 Sunburst | image | named_img | 29 | 1024, 2048, 4096 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `qwen_image_3` | Qwen Image 3 | image | named_img | 15 | 1024, 2048 |  | 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `seedream_45` | Seedream 4.5 | image | named_img | 13 | 2048, 4096 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `nano_banana_lite` | Nano Banana Lite | image | named_img | 13 | 1024 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | yes | 4 |  |
| `mai_image_25` | Microsoft MAI Image 2.5 | image | named_img | 15 | 1024 |  | auto, 1:1, 16:9, 9:16, 3:4, 4:3 | no | no | no |  | yes | 4 |  |
| `krea_2` | Krea 2 | image | named_img | 15 | 1024 |  | 1:1, 16:9, 9:16, 3:4, 4:5, 5:4, 4:3, 21:9 | no | no | no |  | no | 4 |  |
| `voiceover` | Voiceover | speech | named | 8 |  |  |  | no | no | no |  | no | 1 | 1000 |
| `elevenlabs_music` | ElevenLabs Music | music | named | 40 |  |  |  | no | no | no |  | no | 1 |  |
| `elevenlabs_v3` | ElevenLabs v3 | speech | named | 25 |  |  |  | no | no | no |  | no | 1 | 5000 |
| `lyria3_pro` | Lyria 3 Pro | music | named | 25 |  |  |  | no | no | no |  | no | 1 |  |
| `minimax_speech` | MiniMax Speech | speech | named | 12 |  |  |  | no | no | no |  | no | 1 | 1000 |
| `sfx` | Sound Effects | music | named | 6 |  |  |  | no | no | no |  | no | 1 | 450 |

Units: fromCredits is the price of the opening clip (lowest resolution, shortest length). Video resolutions are the short side in pixels (720 is 720p); image resolutions name the size class (1024 is 1K, 2048 is 2K). Durations are in seconds. Max chars is the longest prompt (video, music) or text (speech) the model takes; a longer one is refused. A blank Max chars means only the tool's own argument limit applies.
Images of people: Seedance 2.0 Mini (seedance_20_mini) and Seedance 2.5 (seedance_25) refuse a start or end image that shows a real person; kling_30 takes one, and so do the cheaper minimax_h3 and minimax_h3_max_turbo.
The same list as JSON: https://dreamclip.ai/llms.json, or list_models inside a connection.
In the studio only, not run by these tools: Lip Sync, Remove Background, Upscale to 4K, Motion Transfer, Voice Clone, Voice Changer, Enhance image, World. They work on a file the tools do not take, such as a clip, a recording or a 3D scene.

### Voices on ElevenLabs v3 (`elevenlabs_v3`)

| Voice id | Name | Gender | Accent | Language |
| --- | --- | --- | --- | --- |
| `Rachel` | Rachel | Female | American | English |
| `Brian` | Brian | Male | American | English |
| `Sarah` | Sarah | Female | American | English |
| `George` | George | Male | British | English |
| `Jessica` | Jessica | Female | American | English |
| `Roger` | Roger | Male | American | English |
| `Aria` | Aria | Female | American | English |
| `Laura` | Laura | Female | American | English |
| `Charlotte` | Charlotte | Female | Swedish | English |
| `Alice` | Alice | Female | British | English |
| `Matilda` | Matilda | Female | American | English |
| `Lily` | Lily | Female | British | English |
| `Charlie` | Charlie | Male | Australian | English |
| `Callum` | Callum | Male | Transatlantic | English |
| `Liam` | Liam | Male | American | English |
| `Will` | Will | Male | American | English |
| `Eric` | Eric | Male | American | English |
| `Chris` | Chris | Male | American | English |
| `Daniel` | Daniel | Male | British | English |
| `Bill` | Bill | Male | American | English |
| `River` | River | Neutral | American | English |
| `CaJslL1xziwefCeTNzHv` | Cristina Campos | Female | Latin American | Spanish |
| `dlGxemPxFMTY7iXagmOj` | Fernando Martínez | Male | Latin American | Spanish |
| `kcQkGnn0HAT2JRDQ4Ljp` | Norah | Female | Latin American | Spanish |
| `iDEmt5MnqUotdwCIVplo` | Enrique Mondragón | Male | Mexican | Spanish |
| `m7yTemJqdIqrcNleANfX` | Ana María | Female | Mexican | Spanish |
| `aQROLel5sQbj1vuIVi6B` | Nicolas | Male | Parisian | French |
| `McVZB9hVxVSk3Equu8EH` | Audrey | Female | Standard | French |
| `YxrwjAKoUKULGd0g8K9Y` | Lucie | Female | Standard | French |
| `O31r762Gb3WFygrEOGh0` | Victoria | Female | Parisian | French |
| `TTtB1x9U8PF0Vgf20IAP` | Adrien | Male | Standard | French |
| `v3V1d2rk6528UrLKRuy8` | Susi | Female | Standard | German |
| `7eVMgwCnXydb3CikjV7a` | Lea | Female | Standard | German |
| `AnvlJBAqSLDzEevYr9Ap` | Ava | Female | Standard | German |
| `FTNCalFNG5bRnkkaP5Ug` | Otto | Male | Standard | German |
| `aTTiK3YzK3dXETpuDE2h` | Ben | Male | Standard | German |
| `W71zT1VwIFFx3mMGH2uZ` | MarcoTrox | Male | Standard | Italian |
| `gfKKsLN1k0oYYN9n2dXX` | Violetta | Female | Standard | Italian |
| `fzDFBB4mgvMlL36gPXcz` | Giovanni Rossi | Male | Standard | Italian |
| `t3hJ92dgZhDVtsff084B` | Chris Basetta | Male | Standard | Italian |
| `3DPhHWXDY263XJ1d2EPN` | Linda Fiore | Female | Standard | Italian |
| `33B4UnXyTNbgLmdEDh5P` | Keren | Female | Brazilian | Portuguese |
| `GDzHdQOi6jjf8zaXhCYD` | Raquel | Female | Brazilian | Portuguese |
| `RGymW84CSmfVugnA5tvA` | Roberta | Female | Brazilian | Portuguese |
| `36rVQA1AOIPwpA3Hg1tC` | Matheus | Male | Brazilian | Portuguese |
| `rpNe0HOx7heUulPiOEaG` | Diego | Male | Brazilian | Portuguese |
| `J17lijyP1BHYcM7ld0Rg` | Adam | Male | Istanbul | Turkish |
| `NNn9dv8zq2kUo7d3JSGG` | Derya | Female | Standard | Turkish |
| `DqkEc6nlvKNIUjWfMgVg` | Burcu Basyigit | Female | Standard | Turkish |
| `uvU9jrgGLWNPeNA4NgNT` | İrem | Female | Istanbul | Turkish |
| `j82ax9yhzfYwq9lDvRWL` | Kadir Kayışcı | Male | Standard | Turkish |
| `OtEfb2LVzIE45wdYe54M` | Zara | Female | Standard | Hindi |
| `KYiVPerWcenyBTIvWbfY` | Sia | Female | Standard | Hindi |
| `FZkK3TvQ0pjyDmT8fzIW` | Bunty | Male | Standard | Hindi |
| `zT03pEAEi0VHKciJODfn` | Raju | Male | Standard | Hindi |
| `gHu9GtaHOXcSqFTK06ux` | Anjali | Female | Standard | Hindi |

### Voices on MiniMax Speech (`minimax_speech`)

| Voice id | Name | Gender | Accent | Language |
| --- | --- | --- | --- | --- |
| `Calm_Woman` | Calm Woman | Female | Multilingual | 30+ languages |
| `Casual_Guy` | Casual Guy | Male | Multilingual | 30+ languages |
| `Deep_Voice_Man` | Deep Voice Man | Male | Multilingual | 30+ languages |
| `Determined_Man` | Determined Man | Male | Multilingual | 30+ languages |
| `Elegant_Man` | Elegant Man | Male | Multilingual | 30+ languages |
| `Friendly_Person` | Friendly Person | Male | Multilingual | 30+ languages |
| `Imposing_Manner` | Imposing Manner | Male | Multilingual | 30+ languages |
| `Lively_Girl` | Lively Girl | Female | Multilingual | 30+ languages |
| `Lovely_Girl` | Lovely Girl | Female | Multilingual | 30+ languages |
| `Patient_Man` | Patient Man | Male | Multilingual | 30+ languages |
| `Wise_Woman` | Wise Woman | Female | Multilingual | 30+ languages |
| `Young_Knight` | Young Knight | Male | Multilingual | 30+ languages |

## Workflow examples

### Text to video on Seedance 2.0 Fast

1. estimate_cost `{"model":"seedance_20_fast","resolution":480,"duration_seconds":4}`, then tell the user the totalCredits. Its balance and affordable say whether the account covers it.
2. generate_video `{"model":"seedance_20_fast","resolution":480,"duration_seconds":4,"prompt":"A red fox running through deep snow at dawn, slow motion","idempotency_key":"<a new uuid>"}`
3. get_generation `{"id":"<id from the generate call>","wait_seconds":50}`, again until status is delivered; then show the user the output links.

### Photo to video on Seedance 2.0 Fast

1. estimate_cost `{"model":"seedance_20_fast","resolution":480,"duration_seconds":4,"image_attached":true}`, then tell the user the totalCredits.
2. generate_video `{"model":"seedance_20_fast","resolution":480,"duration_seconds":4,"prompt":"The dog drops the ball and runs down the beach","image_url":"https://example.com/dog.jpg","idempotency_key":"<a new uuid>"}`
3. get_generation `{"id":"<id from the generate call>","wait_seconds":50}`, again until status is delivered; then show the user the output links.

The photo is the first frame. Send a public https link (DreamClip copies it into the user's uploads), or one data: URL under 3 MB.

### Speech on ElevenLabs v3

1. list_models `{"kind":"speech"}`, and pick a voice id from the model's voices.
2. estimate_cost `{"model":"elevenlabs_v3","text":"The rain had not stopped for three days."}`, then tell the user the totalCredits.
3. generate_speech `{"model":"elevenlabs_v3","text":"The rain had not stopped for three days.","voice":"Rachel","idempotency_key":"<a new uuid>"}`
4. get_generation `{"id":"<id from the generate call>","wait_seconds":50}`, again until status is delivered; then show the user the output links.

## Limits and errors

- No token, or an expired one: HTTP 401 with a WWW-Authenticate Bearer challenge naming scope "read generate" and resource_metadata https://dreamclip.ai/.well-known/oauth-protected-resource/mcp. The client signs in again or refreshes its token.
- Scopes: read covers list_models, estimate_cost, get_generation, list_generations, get_credit_balance, read_guide. generate covers generate_video, generate_image, generate_speech, generate_music. A tool outside the connection's scopes answers with a sentence asking the user to reconnect.
- 120 tool calls a minute per account, all tools together, and 15 generations a minute.
- Concurrency: the free plan runs one generation at a time; paid plans run several. A generate call past the limit is refused with a sentence that says how many may run, and nothing is charged.
- get_generation waits up to 50 seconds (wait_seconds) and always answers within 55. At most 4 waiting calls per account; past that a call answers at once.
- Image inputs: PNG, JPEG or WebP, as a public https link up to 20 MB or one data: URL under 3 MB a call, 60 MB in all per call. A request body is at most 4.5 MB.
- OAuth: an authorization code lasts 5 minutes, an access token 1 hour, a refresh token 30 days and is rotated on every use.

## Links

- Setup for every app: https://dreamclip.ai/connect
- Short guide: https://dreamclip.ai/llms.txt
- Full guide: https://dreamclip.ai/llms-full.txt
- Models as JSON: https://dreamclip.ai/llms.json
- MCP server: https://dreamclip.ai/mcp
- Inside a connection: the read_guide tool, and the resources dreamclip://guide (this guide, markdown) and dreamclip://models (the models, JSON).
