> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ninjachat.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Seedance 2.5

> ByteDance's Seedance 2.5: clips up to 15 seconds from text, a first and last frame, or reference images, video and audio, with native audio.

<div className="ndoc-model-summary">
  <div className="ndoc-model-identity"><span className="ndoc-brand-mark">  <img src="https://cdn.photogenius.ai/new-ai-images/site/v1/landing/marks/marks/86e0e433/bytedance.svg" alt="" width="32" height="32" /></span><div><strong>ByteDance</strong><code>seedance-2.5</code></div></div>
  <div className="ndoc-model-stat"><span>Generation price</span><strong>\$3.47 per video</strong></div>
</div>

<div className="ndoc-capabilities" aria-label="Model capabilities">
  <span>Image reference</span>
  <span>End frame</span>
  <span>Audio output</span>
</div>

## Pricing

| Unit                             | Price   |
| :------------------------------- | :------ |
| Per video                        | \$3.47  |
| Per video with `reference_video` | \$14.52 |

[Live pricing](https://www.ninjachat.ai/api/v1/models/seedance-2.5).

## Use this model

Video is asynchronous: `videos.generate` returns a queued job, and `waitFor` / `wait_for` polls `GET /videos/{id}` until it completes. The SDK examples assume you have [created a server-side client](/sdks#create-a-client).

<CodeGroup>
  ```typescript TypeScript SDK theme={null}
  const job = await client.videos.generate({
    model: "seedance-2.5",
    prompt: "A cinematic aerial push across a desert at blue hour",
  });
  const video = await client.videos.waitFor(job.id);

  console.log(video.video_url);
  ```

  ```python Python SDK theme={null}
  job = client.videos.generate(
      model="seedance-2.5",
      prompt="A cinematic aerial push across a desert at blue hour",
  )
  video = client.videos.wait_for(job["id"])

  print(video["video_url"])
  ```

  ```bash cURL theme={null}
  curl https://www.ninjachat.ai/api/v1/videos \
    -H "Authorization: Bearer $NINJACHAT_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"model":"seedance-2.5","prompt":"A cinematic aerial push across a desert at blue hour"}'

  # then poll until status is "completed"
  curl https://www.ninjachat.ai/api/v1/videos/$VIDEO_ID \
    -H "Authorization: Bearer $NINJACHAT_API_KEY"
  ```
</CodeGroup>

## Supported parameters

<div className="ndoc-parameters"><code>prompt</code><code>model</code><code>duration</code><code>aspect\_ratio</code><code>image\_url</code><code>reference\_images</code><code>reference\_video</code><code>reference\_audio</code><code>watermark</code><code>end\_image\_url</code><code>generate\_audio</code></div>

<Accordion title="Check current availability and limits">
  ```typescript TypeScript SDK theme={null}
  const model = await client.models.retrieve("seedance-2.5");

  if (!model.servable) throw new Error("seedance-2.5 is temporarily unavailable");

  console.log({
    capabilities: model.capabilities,
    supportedParameters: model.supportedParameters,
    pricing: model.pricing,
    providers: model.providers,
  });
  ```
</Accordion>

**Guides:** [Video generation](/video-generation) · [Pricing](/pricing) · [All models](/models-overview)
