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

# SeeDance 비디오 생성 API 연동 설명

> ByteDance Seedance Video Generation 集成指南 - XHuoAPI

본 문서에서는 SeeDance 비디오 생성 API 연동 설명을 소개합니다. 이는 사용자 정의 매개변수를 입력하여 SeeDance 공식 비디오를 생성할 수 있는 API입니다.

## 신청 절차

API를 사용하려면 먼저 [SeeDance 비디오 생성 API](https://api.xhuoapi.ai/documents/seedance-videos) 해당 페이지에서 서비스를 신청해야 합니다. 페이지에 들어가면 「Acquire」 버튼을 클릭합니다, 아래 그림과 같이:

![](https://cdn.xhuoapi.ai/q6ytrc.png)

로그인 또는 등록이 되어 있지 않으면 자동으로 로그인 페이지로 이동하여 등록 및 로그인을 요청합니다. 로그인 및 등록 후에는 자동으로 현재 페이지로 돌아옵니다.

첫 신청 시 무료 사용량이 제공되며, 해당 API를 무료로 사용할 수 있습니다.

## 기본 사용

먼저 기본 사용 방법을 이해해야 합니다. 즉, 입력 프롬프트 `content.text`, 유형 `content.type=text` 및 모델 `model`을 입력하면 처리된 결과를 얻을 수 있습니다. 구체적인 내용은 다음과 같습니다:

<p>
  <img src="https://cdn.xhuoapi.ai/seedance_parameters.png" width="500" className="m-auto" />
</p>

여기서 우리는 Request Headers를 설정했습니다. 포함된 내용은 다음과 같습니다:

* `accept`: 어떤 형식의 응답 결과를 받고 싶은지, 여기서는 `application/json`으로 JSON 형식으로 입력합니다.
* `authorization`: API 호출을 위한 키, 신청 후 직접 드롭다운에서 선택할 수 있습니다.

또한 Request Body를 설정했습니다. 포함된 내용은 다음과 같습니다:

* `model`: 비디오를 생성하는 모델, 선택 가능한 값: `doubao-seedance-1-0-pro-250528`, `doubao-seedance-1-0-pro-fast-251015`, `doubao-seedance-1-5-pro-251215`, `doubao-seedance-1-0-lite-t2v-250428`, `doubao-seedance-1-0-lite-i2v-250428`.
* `content`: 입력 내용 배열, `type`은 `text` 또는 `image_url`일 수 있습니다.
* `resolution`: 출력 해상도, 선택 가능 `480p` / `720p` / `1080p`.
* `ratio`: 가로 세로 비율, 선택 가능 `16:9` / `4:3` / `1:1` / `3:4` / `9:16` / `21:9` / `adaptive`.
* `duration`: 비디오 길이(초), 범위 2–12.
* `seed`: 랜덤 시드, 정수, -1에서 4294967295까지.
* `camerafixed`: 카메라 고정 여부, `true` / `false`.
* `watermark`: 워터마크 추가 여부, `true` / `false`.
* `generate_audio`: 음성 비디오 생성 여부, `true` / `false`, **오직 `doubao-seedance-1-5-pro-251215`만 지원**.
* `service_tier`: 추론 모드, `default`(온라인) 또는 `flex`(오프라인, 가격은 온라인의 50%).
* `return_last_frame`: 결과에 비디오 마지막 프레임 이미지 URL을 반환할지 여부.
* `execution_expires_after`: 작업 타임아웃 시간(초), 범위 3600–259200.
* `callback_url`: 비동기 콜백 주소, 설정 후 API는 즉시 `task_id`를 반환하며, 작업 완료 시 결과를 해당 주소로 POST합니다.

선택 후, 오른쪽에도 해당 코드가 생성된 것을 볼 수 있습니다. 아래 그림과 같이:

<p>
  <img src="https://cdn.xhuoapi.ai/seedance_request.png" width="500" className="m-auto" />
</p>

「Try」 버튼을 클릭하여 테스트를 진행할 수 있습니다. 위 그림과 같이, 우리는 다음과 같은 결과를 얻었습니다:

```json theme={null}
{
  "success": true,
  "task_id": "ec22ae22-0140-4033-8c86-a48b536da595",
  "trace_id": "1cc87db0-8ee5-4436-969b-35cc571a9fd5",
  "data": {
    "task_id": "cgt-20251222005129-62fhb",
    "status": "succeeded",
    "video_url": "https://platform.cdn.xhuoapi.ai/seedance/f592800a-b87c-4705-8796-cbb8018cae35.mp4",
    "model": "doubao-seedance-1-0-pro-250528"
  }
}
```

반환된 결과는 여러 필드를 포함하고 있으며, 설명은 다음과 같습니다:

* `success`: 이 시점에서 비디오 생성 작업의 상태.
* `task_id`: 이 시점에서 비디오 생성 작업 ID.
* `trace_id`: 이 시점에서 비디오 생성 추적 ID.
* `data`: 이 시점에서 비디오 생성 작업의 결과 목록.
  * `task_id`: 이 시점에서 비디오 생성 작업의 서버 측 ID.
  * `video_url`: 이 시점에서 비디오 생성 작업의 비디오 링크.
  * `status`: 이 시점에서 비디오 생성 작업의 상태.
    * `model`: 비디오 생성을 위해 사용된 모델.

우리는 만족스러운 비디오 정보를 얻었으며, 결과의 `data`에서 비디오 링크 주소를 통해 생성된 SeeDance 비디오를 얻을 수 있습니다.

또한 해당 연동 코드를 생성하고 싶다면, 생성된 코드를 직접 복사할 수 있습니다. 예를 들어 CURL의 코드는 다음과 같습니다:

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/seedance/videos' \
-H 'authorization: Bearer ${bearer_token}' \
-H 'accept: application/json' \
-H 'content-type: application/json' \
-d '{
  "content": [{"text":"A kitten yawning at the camera. --rs 720p --rt 16:9 --dur 5 --fps 24 --wm true --seed 11 --cf false","type":"text"}],
  "model": "doubao-seedance-1-0-pro-250528"
}'
```

## 인라인 매개변수 설명

`content[].text` 프롬프트의 끝에 `--parameter value` 형식으로 생성 매개변수를 추가하여 전달할 수 있습니다(구식 방법, 약한 검증, 잘못 입력 시 자동으로 기본값 사용). 전체 매개변수 목록은 다음과 같습니다:

| 인라인 매개변수   | 해당 필드             | 설명         | 값 범위                                                          |
| ---------- | ----------------- | ---------- | ------------------------------------------------------------- |
| `--rs`     | `resolution`      | 출력 해상도     | `480p` / `720p` / `1080p`                                     |
| `--rt`     | `ratio`           | 가로 세로 비율   | `16:9` / `4:3` / `1:1` / `3:4` / `9:16` / `21:9` / `adaptive` |
| `--dur`    | `duration`        | 비디오 길이(초)  | 2–12                                                          |
| `--frames` | `frames`          | 비디오 프레임 수  | \[29, 289] 중에서 25+4n의 정수                                      |
| `--fps`    | `framespersecond` | 프레임 속도     | 오직 `24`만 지원                                                   |
| `--seed`   | `seed`            | 랜덤 시드      | -1에서 4294967295                                               |
| `--cf`     | `camerafixed`     | 카메라 고정 여부  | `true` / `false`                                              |
| `--wm`     | `watermark`       | 워터마크 추가 여부 | `true` / `false`                                              |

> **추천 방법**: Request Body에서 해당 최상위 필드(예: `resolution`, `ratio` 등)를 직접 사용하여 강력한 검증 모드를 설정합니다. 매개변수 입력 오류 시 명확한 오류 메시지를 반환하여 문제를 더 쉽게 파악할 수 있습니다.

## 음성 비디오 생성

`doubao-seedance-1-5-pro-251215`는 `generate_audio` 매개변수를 통해 음성이 포함된 비디오를 생성할 수 있습니다:

```json theme={null}
{
  "model": "doubao-seedance-1-5-pro-251215",
  "content": [
    {
      "type": "text",
      "text": "A girl holds a fox, the wind blows her hair, you can hear the sound of the wind"
    }
  ],
  "generate_audio": true,
  "ratio": "16:9",
  "duration": 5
}
```

다른 모델은 이 매개변수를 지원하지 않으며, 전달 시 무시됩니다.

## 이미지로 비디오 첫 프레임 생성

비디오 생성 작업을 원할 경우, 먼저 `content` 매개변수에 `type`이 `image_url`인 항목이 포함되어야 하며, `image_url` 필드는 객체 형식이어야 합니다: `{"url": "https://..."}` 또는 Base64 형식 `{"url": "data:image/png;base64,..."}`이어야 합니다.

> **주의**: `image_url`은 문자열 형식(예: `"image_url": "https://..."`)으로 직접 전달할 수 없으며, 반드시 객체 형식 `"image_url": {"url": "https://..."}`를 사용해야 합니다. 그렇지 않으면 400 오류가 반환됩니다.

해당 코드:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/seedance/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "content": [
        {
            "type": "image_url",
            "image_url": {
                "url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_foxrgirl.png"
            }
        },
        {
            "type": "text",
            "text": "A girl holds a fox in her arms. She opens her eyes and gazes tenderly at the camera, while the fox affectionately holds her back. As the camera slowly pulls away, her hair is gently blown by the wind. --ratio adaptive  --dur 5"
        }
    ],
    "model": "doubao-seedance-1-0-pro-250528"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

클릭하여 실행하면 즉시 결과를 얻을 수 있습니다. 결과는 다음과 같습니다:

```
{
    "success": true,
    "task_id": "dc7cceb5-3c12-4de7-a5f4-abcbba3e8e39",
    "trace_id": "b3b09de3-b7fa-4bb0-88b5-aad4b4a96fd4",
    "data": {
        "task_id": "cgt-20251222072003-x2259",
        "status": "succeeded",
        "video_url": "https://platform.cdn.xhuoapi.ai/seedance/6afb78b8-5ba8-424f-adcd-69423a700b50.mp4",
        "model": "doubao-seedance-1-0-pro-250528"
    }
}
```

생성된 효과는 이미지로 비디오를 생성한 것이며, 결과는 위와 유사합니다.

## 이미지로 비디오 첫 및 마지막 프레임 생성

비디오의 첫 및 마지막 프레임을 생성하려면, 먼저 `content` 매개변수에 `image_url` 유형을 전달해야 하며, 각각 `role`을 `first_frame` 및 `last_frame`으로 설정하여 다음과 같은 내용을 지정할 수 있습니다:

* role: 첫 프레임 또는 마지막 프레임을 지정합니다.
* image\_url
  * url 이미지 링크
    동시에 `content`에는 `text` 유형을 입력하여 프롬프트 힌트를 제공해야 합니다.

해당 코드:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/seedance/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
   "model": "doubao-seedance-1-0-pro-250528",
    "content": [
         {
            "type": "text",
            "text": "360-degree shot"
        },
        {
            "type": "image_url",
            "image_url": {
                "url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_first_frame.jpeg"
            },
            "role": "first_frame"
        },
        {
            "type": "image_url",
            "image_url": {
                "url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_last_frame.jpeg"
            },
            "role": "last_frame"
        }
    ]
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

클릭하여 실행하면 즉시 결과를 얻을 수 있습니다. 결과는 다음과 같습니다:

```
{
    "success": true,
    "task_id": "f7096c6c-9430-4392-8201-d259632d7afd",
    "trace_id": "4a4a3721-00fb-43d2-aff2-3b516ac01a8a",
    "data": {
        "task_id": "cgt-20251222073134-54qcw",
        "status": "succeeded",
        "video_url": "https://platform.cdn.xhuoapi.ai/seedance/95f9f5f0-fc50-4c71-bc6f-e154582c141e.mp4",
        "model": "doubao-seedance-1-0-pro-250528"
    }
}
```

생성된 효과는 캐릭터 생성 비디오이며, 결과는 위와 유사합니다.

## 비동기 콜백

SeeDance 비디오 생성 API의 생성 시간이 길기 때문에(약 1-2분), `callback_url` 필드를 통해 비동기 모드를 사용하여 HTTP 연결이 장시간 점유되는 것을 피할 수 있습니다.

전체 프로세스: 클라이언트가 요청을 시작할 때 `callback_url`을 지정하면, API는 즉시 `task_id`가 포함된 응답을 반환합니다. 작업이 완료되면 플랫폼은 생성 결과를 POST JSON 형식으로 `callback_url`로 전송하며, 결과에도 `task_id`가 포함되어 있어 연관성을 유지할 수 있습니다.

```json theme={null}
{
  "task_id": "f7096c6c-9430-4392-8201-d259632d7afd"
}
```

작업이 완료되면 플랫폼이 `callback_url`로 푸시하는 내용은 다음과 같습니다:

```json theme={null}
{
  "success": true,
  "task_id": "f7096c6c-9430-4392-8201-d259632d7afd",
  "trace_id": "4a4a3721-00fb-43d2-aff2-3b516ac01a8a",
  "data": {
    "task_id": "cgt-20251222073134-54qcw",
    "status": "succeeded",
    "video_url": "https://platform.cdn.xhuoapi.ai/seedance/95f9f5f0-fc50-4c71-bc6f-e154582c141e.mp4",
    "model": "doubao-seedance-1-0-pro-250528"
  }
}
```

결과의 `task_id` 필드는 요청 시 반환된 것과 일치하며, 이 필드를 통해 작업의 연관성을 실현할 수 있습니다.

## 오류 처리

API를 호출할 때 오류가 발생하면, API는 해당 오류 코드와 정보를 반환합니다. 예를 들어:

* `400 token_mismatched`: 잘못된 요청, 누락되었거나 잘못된 매개변수 때문일 수 있습니다.
* `400 api_not_implemented`: 잘못된 요청, 누락되었거나 잘못된 매개변수 때문일 수 있습니다.
* `401 invalid_token`: 인증되지 않음, 잘못되었거나 누락된 인증 토큰입니다.
* `429 too_many_requests`: 너무 많은 요청, 비율 제한을 초과했습니다.
* `500 api_error`: 내부 서버 오류, 서버에서 문제가 발생했습니다.

### 오류 응답 예시

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## 결론

이 문서를 통해 SeeDance 비디오 생성 API를 사용하여 입력 프롬프트와 참조 이미지를 통해 비디오를 생성하는 방법을 이해하셨습니다. 이 문서가 API를 더 잘 연결하고 사용하는 데 도움이 되기를 바랍니다. 질문이 있으시면 언제든지 기술 지원 팀에 문의해 주시기 바랍니다.
