> ## 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 Videos Generation API Integracja Opis

> ByteDance Seedance Video Generation 集成指南 - XHuoAPI

Dokument ten przedstawia sposób integracji z SeeDance Videos Generation API, które umożliwia generowanie oficjalnych filmów SeeDance poprzez wprowadzenie niestandardowych parametrów.

## Proces aplikacji

Aby skorzystać z API, należy najpierw przejść do strony [SeeDance Videos Generation API](https://api.xhuoapi.ai/documents/seedance-videos) i złożyć wniosek o odpowiednią usługę. Po wejściu na stronę, kliknij przycisk „Acquire”, jak pokazano na obrazku:

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

Jeśli nie jesteś zalogowany lub zarejestrowany, automatycznie zostaniesz przekierowany na stronę logowania, aby zarejestrować się i zalogować. Po zalogowaniu lub rejestracji automatycznie wrócisz na bieżącą stronę.

Podczas pierwszej aplikacji otrzymasz darmowy limit, który pozwala na bezpłatne korzystanie z tego API.

## Podstawowe użycie

Najpierw zapoznaj się z podstawowym sposobem użycia, czyli wprowadzeniem słów kluczowych `content.text`, typu `content.type=text` oraz modelu `model`, aby uzyskać przetworzony wynik. Szczegóły są następujące:

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

Możemy zobaczyć, że ustawiliśmy nagłówki żądania, w tym:

* `accept`: format odpowiedzi, który chcemy otrzymać, tutaj wpisujemy `application/json`, czyli format JSON.
* `authorization`: klucz do wywołania API, który można wybrać z rozwijanej listy po złożeniu wniosku.

Dodatkowo ustawiono ciało żądania, w tym:

* `model`: model generujący wideo, dostępne wartości: `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`: tablica wprowadzonych treści, `type` może być `text` lub `image_url`.
* `resolution`: rozdzielczość wyjściowa, dostępne opcje `480p` / `720p` / `1080p`.
* `ratio`: proporcje, dostępne opcje `16:9` / `4:3` / `1:1` / `3:4` / `9:16` / `21:9` / `adaptive`.
* `duration`: długość wideo (sekundy), zakres 2–12.
* `seed`: losowe ziarno, liczba całkowita, -1 do 4294967295.
* `camerafixed`: czy kamera jest stała, `true` / `false`.
* `watermark`: czy dodać znak wodny, `true` / `false`.
* `generate_audio`: czy generować wideo z dźwiękiem, `true` / `false`, **tylko `doubao-seedance-1-5-pro-251215` wspiera**.
* `service_tier`: tryb wnioskowania, `default` (online) lub `flex` (offline, cena 50% ceny online).
* `return_last_frame`: czy w wynikach zwrócić URL ostatniej klatki wideo.
* `execution_expires_after`: czas wygaśnięcia zadania (sekundy), zakres 3600–259200.
* `callback_url`: adres asynchronicznego wywołania zwrotnego, po ustawieniu API natychmiast zwraca `task_id`, a po zakończeniu zadania wynik zostanie przesłany na ten adres.

Po dokonaniu wyboru, można zauważyć, że po prawej stronie wygenerowano odpowiedni kod, jak pokazano na obrazku:

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

Kliknij przycisk „Try”, aby przeprowadzić test, jak pokazano na powyższym obrazku, a otrzymamy następujący wynik:

```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"
  }
}
```

Wynik zwrotny zawiera wiele pól, które są opisane poniżej:

* `success`, status zadania generowania wideo.
* `task_id`, ID zadania generowania wideo.
* `trace_id`, ID śledzenia generowania wideo.
* `data`, lista wyników zadania generowania wideo.
  * `task_id`, ID serwera zadania generowania wideo.
  * `video_url`, link do wideo z zadania generowania wideo.
  * `status`, status zadania generowania wideo.
    * `model`, model użyty do generowania wideo.

Możemy zobaczyć, że otrzymaliśmy satysfakcjonujące informacje o wideo, wystarczy, że na podstawie adresu URL wideo w `data` uzyskamy wygenerowane wideo SeeDance.

Dodatkowo, jeśli chcesz wygenerować odpowiedni kod integracyjny, możesz go bezpośrednio skopiować, na przykład kod CURL wygląda następująco:

```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"
}'
```

## Opis parametrów inline

Na końcu słów kluczowych `content[].text` można przekazać parametry generowania w formie `--parameter value` (stara metoda, słaba walidacja, w przypadku błędnego wypełnienia automatycznie używane są wartości domyślne). Pełna lista parametrów jest następująca:

| Parametr inline | Odpowiednie pole  | Opis                     | Zakres wartości                                               |
| --------------- | ----------------- | ------------------------ | ------------------------------------------------------------- |
| `--rs`          | `resolution`      | Rozdzielczość wyjściowa  | `480p` / `720p` / `1080p`                                     |
| `--rt`          | `ratio`           | Proporcje                | `16:9` / `4:3` / `1:1` / `3:4` / `9:16` / `21:9` / `adaptive` |
| `--dur`         | `duration`        | Długość wideo (sekundy)  | 2–12                                                          |
| `--frames`      | `frames`          | Liczba klatek wideo      | Liczby całkowite spełniające 25+4n w zakresie \[29, 289]      |
| `--fps`         | `framespersecond` | Liczba klatek na sekundę | Tylko `24`                                                    |
| `--seed`        | `seed`            | Losowe ziarno            | -1 do 4294967295                                              |
| `--cf`          | `camerafixed`     | Czy kamera jest stała    | `true` / `false`                                              |
| `--wm`          | `watermark`       | Czy dodać znak wodny     | `true` / `false`                                              |

> **Zalecana praktyka**: bezpośrednio w ciele żądania używaj odpowiednich pól najwyższego poziomu (takich jak `resolution`, `ratio` itp.), aby uzyskać tryb silnej walidacji, w przypadku błędnego wypełnienia parametrów zwróci wyraźny komunikat o błędzie, co ułatwia diagnozowanie problemów.

## Generowanie wideo z dźwiękiem

`doubao-seedance-1-5-pro-251215` wspiera generowanie wideo z dźwiękiem za pomocą parametru `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
}
```

Inne modele nie obsługują tego parametru, po przekazaniu zostanie on zignorowany.

## Generowanie wideo z obrazu - pierwsza klatka

Jeśli chcesz wygenerować wideo z obrazu, najpierw parametr `content` musi zawierać element z `type` równym `image_url`, a pole `image_url` musi być w formacie obiektowym: `{"url": "https://..."}` lub w formacie Base64 `{"url": "data:image/png;base64,..."}`.

> **Uwaga**: `image_url` nie obsługuje bezpośredniego przekazywania w formacie string (np. `"image_url": "https://..."`), musi być użyty format obiektowy `"image_url": {"url": "https://..."}`, w przeciwnym razie zwróci błąd 400.

Odpowiedni kod:

```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": "Dziewczyna trzyma lisa w ramionach. Otwiera oczy i patrzy czule w kamerę, podczas gdy lis z czułością trzyma ją z powrotem. Gdy kamera powoli się oddala, jej włosy są delikatnie powiewane przez wiatr. --ratio adaptive  --dur 5"
        }
    ],
    "model": "doubao-seedance-1-0-pro-250528"
}

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

Klikając uruchom, można zauważyć, że natychmiast otrzymuje się wynik, jak poniżej:

```
{
    "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"
    }
}
```

Można zobaczyć, że wygenerowany efekt to wideo z obrazu, wynik jest podobny do powyższego.

## Generowanie wideo z obrazu - pierwsza i ostatnia klatka

Jeśli chcesz wygenerować wideo z pierwszą i ostatnią klatką, najpierw parametr `content` musi zawierać typ `image_url`, a także należy ustawić `role` na `first_frame` i `last_frame`, aby określić następujące treści:

* role: określa pierwszą lub ostatnią klatkę.
* image\_url
  * url link do obrazu
    Równocześnie `content` musi również zawierać typ `text` jako prompt.

Odpowiedni kod:

```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": "Ujęcie 360 stopni"
        },
        {
            "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)
```

Klikając uruchom, można zauważyć, że natychmiast otrzymuje się wynik, jak poniżej:

```
{
    "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"
    }
}
```

Można zobaczyć, że wygenerowany efekt to wideo z postaciami, wynik jest podobny do powyższego.

## Asynchroniczny callback

Ponieważ czas generowania wideo przez API SeeDance jest dość długi (około 1-2 minut), można użyć pola `callback_url` w trybie asynchronicznym, aby uniknąć długiego zajmowania połączenia HTTP.

Cały proces: klient inicjuje żądanie, określając `callback_url`, API natychmiast zwraca odpowiedź zawierającą `task_id`; po zakończeniu zadania platforma wysyła wyniki w formacie POST JSON do `callback_url`, w wynikach również znajduje się `task_id`, aby umożliwić powiązanie.

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

Gdy zadanie zostanie zakończone, zawartość wysyłana do `callback_url` przez platformę wygląda następująco:

```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"
  }
}
```

Pole `task_id` w wynikach jest zgodne z tym, które zostało zwrócone podczas żądania, dzięki czemu można powiązać zadania.

## Obsługa błędów

Podczas wywoływania API, jeśli wystąpią błędy, API zwróci odpowiedni kod błędu i informacje. Na przykład:

* `400 token_mismatched`: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
* `400 api_not_implemented`: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
* `401 invalid_token`: Nieautoryzowany, nieprawidłowy lub brakujący token autoryzacyjny.
* `429 too_many_requests`: Zbyt wiele żądań, przekroczono limit.
* `500 api_error`: Błąd wewnętrzny serwera, coś poszło nie tak na serwerze.

### Przykład odpowiedzi błędu

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

## Wnioski

Dzięki tej dokumentacji zrozumiałeś, jak korzystać z API generowania wideo SeeDance, aby generować wideo na podstawie wprowadzonych słów kluczowych oraz obrazów referencyjnych. Mamy nadzieję, że ta dokumentacja pomoże Ci lepiej zintegrować i korzystać z tego API. W razie jakichkolwiek pytań, prosimy o kontakt z naszym zespołem wsparcia technicznego.
