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

# Seedance

> Seedance 文生视频和图生视频

Seedance 是一款视频生成模型，支持文生视频和图生视频能力，通过异步工作流完成。

## 文生视频

<Tabs>
  <Tab title="Python">
    ```python theme={null}
    from openai import OpenAI
    import time

    client = OpenAI(
        api_key="EZTOKENS_API_KEY",
        base_url="https://api.eztokens.ai/v1"
    )

    response = client.chat.completions.create(
        model="seedance",
        messages=[{
            "role": "user",
            "content": "A drone flying through a misty forest at dawn"
        }],
        max_tokens=3000
    )

    task_id = response.id
    print(f"Task created: {task_id}")

    while True:
        status = client.chat.completions.task_status(task_id)
        if status.status == "succeed":
            print(f"Video ready: {status.video_url}")
            break
        elif status.status == "failed":
            print("Generation failed")
            break
        time.sleep(5)
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    # 提交任务
    curl https://api.eztokens.ai/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $EZTOKENS_API_KEY" \
      -d '{
        "model": "seedance",
        "messages": [{
          "role": "user",
          "content": "A drone flying through a misty forest at dawn"
        }],
        "max_tokens": 3000
      }'
    ```
  </Tab>

  <Tab title="Node.js">
    ```javascript theme={null}
    import OpenAI from "openai";

    const client = new OpenAI({
      apiKey: "EZTOKENS_API_KEY",
      baseURL: "https://api.eztokens.ai/v1",
    });

    const response = await client.chat.completions.create({
      model: "seedance",
      messages: [{
        role: "user",
        content: "A drone flying through a misty forest at dawn"
      }],
      max_tokens: 3000,
    });

    const taskId = response.id;
    console.log(`Task created: ${taskId}`);

    let status;
    do {
      status = await client.chat.completions.task_status(taskId);
      if (status.status === "succeed") break;
      await new Promise(r => setTimeout(r, 5000));
    } while (status.status !== "failed");
    ```
  </Tab>
</Tabs>

## 图生视频

```python theme={null}
response = client.chat.completions.create(
    model="seedance",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Animate this image with flowing water"},
            {"type": "image_url", "image_url": {"url": "https://example.com/waterfall.jpg"}}
        ]
    }],
    max_tokens=3000
)
```

## 异步工作流

1. 通过 `POST /chat/completions` 提交生成任务
2. 获取 `task_id`
3. 轮询 `POST /chat/task/status` 查询进度
4. 状态为 `succeed` 时获取结果 URL
