> ## 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.

# Midjourney Videos API Integracja Opis

> Midjourney generation 集成指南 - XHuoAPI

Ten dokument przedstawi sposób integracji z Midjourney Videos API, które umożliwia generowanie oficjalnych filmów Midjourney poprzez wprowadzenie niestandardowych parametrów.

## Proces aplikacji

Aby korzystać z API, należy najpierw przejść do strony [Midjourney Videos API](https://api.xhuoapi.ai/documents/midjourney-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łowa kluczowego `prompt`, działania `action`, oraz tablicy linków do obrazów referencyjnych `image_url`, aby uzyskać przetworzony wynik. Najpierw musisz przekazać pole `action`, którego wartość to `generate`. Zawiera ono głównie dwa działania: generowanie wideo (`generate`), rozszerzanie wideo (`extend`), szczegóły są następujące:

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

Można zauważyć, że ustawiliśmy nagłówki żądania, w tym:

* `accept`: w jakim formacie chcesz otrzymać odpowiedź, tutaj wpisz `application/json`, czyli format JSON.
* `authorization`: klucz do wywołania API, po złożeniu wniosku można go bezpośrednio wybrać z rozwijanej listy.

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

* `image_url`: link do obrazu referencyjnego pierwszej klatki generowanego wideo.
* `end_image_url`: opcjonalne, określa obraz referencyjny ostatniej klatki generowanego wideo.
* `video_id`: przy rozszerzaniu wideo należy podać ID wideo.
* `video_index`: przy rozszerzaniu wideo należy określić, które konkretne wideo z `video_id`, indeks zaczyna się od 0, domyślnie to 0.
* `action`: działanie tego zadania generowania wideo, głównie zawiera dwa działania: generowanie wideo (`generate`), rozszerzanie wideo (`extend`).
* `prompt`: słowo kluczowe.
* `mode`: tryb szybkości generowania wideo, domyślnie fast.
* `resolution`: jakość wideo, domyślnie 720p.
* `loop`: czy generować wideo w pętli, domyślnie false.
* `callback_url`: URL, na który mają być zwracane wyniki.

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/y0cw0p.png" width="500" className="m-auto" />
</p>

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

```json theme={null}
{
  "image_url": "https://storage.fonedis.cc/upload_1751816808164156352.png",
  "image_width": 560,
  "image_height": 688,
  "progress": 100,
  "video_id": "1751816807896311",
  "video_urls": [
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_0.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_1.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_2.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_3.mp4"
  ],
  "task_id": "037955e0-deee-4050-baa8-1416300d67e2",
  "success": true
}
```

Zwrócony wynik zawiera wiele pól, które są opisane poniżej:

* `success`, status zadania generowania wideo.
* `task_id`, ID zadania generowania wideo.
* `image_url`, obraz okładki zadania generowania wideo.
* `image_width`, szerokość obrazu okładki zadania generowania wideo.
* `image_height`, wysokość obrazu okładki zadania generowania wideo.
* `video_id`, ID wideo zadania generowania wideo.
* `video_urls`, tablica linków do wideo zadania generowania wideo.

Można zauważyć, że otrzymaliśmy satysfakcjonujące informacje o wideo, wystarczy, że na podstawie adresów linków w `video_urls` uzyskamy wygenerowane wideo Midjourney.

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/midjourney/videos' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "action": "generate",
  "prompt": "A cat sitting on a table",
  "image_url": "https://cdn.xhuoapi.ai/jgo1cw.jpg"
}'
```

## Funkcja rozszerzania wideo

Jeśli chcesz kontynuować generowanie już wygenerowanego wideo Kling, możesz ustawić parametr `action` na `extend` i wprowadzić ID wideo, które chcesz kontynuować. ID wideo można uzyskać na podstawie podstawowego użycia.

W tym momencie można zauważyć, że ID wideo z powyższego tekstu to:

```
"video_id": "1751816807896311"
```

> Uwaga, tutaj `video_id` w wideo to ID wygenerowanego wideo. Jeśli nie wiesz, jak wygenerować wideo, możesz odwołać się do podstawowego użycia, aby wygenerować wideo.

Następnie musisz wypełnić kolejne wymagane słowo kluczowe, aby dostosować generowanie wideo, co pozwoli na określenie następujących treści:

* `video_index`: wybór indeksu wideo do rozszerzenia, ten indeks pochodzi z `video_urls` wygenerowanych powyżej, indeks zaczyna się od 0, domyślna wartość to 0.
* `video_id`: ID wideo, które ma być rozszerzone.
* `action`: działanie tego rozszerzenia wideo, które wynosi `extend`.
* `prompt`: słowo kluczowe.

Przykład wypełnienia wygląda następująco:

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

Po wypełnieniu automatycznie wygenerowano kod, jak pokazano poniżej:

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

Odpowiedni kod Python:

```python theme={null}
import requests

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

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

payload = {
    "action": "extend",
    "prompt": "A cat sitting on a table",
    "video_id": "1751816807896311",
    "video_index": 1
}

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

Klikając uruchom, można zauważyć, że otrzymamy wynik, jak poniżej:

```json theme={null}
{
    "image_url": "https://storage.fonedis.cc/upload_1751817471047011172.png",
    "image_width": 560,
    "image_height": 688,
    "progress": 100,
    "video_id": "1751818094559027",
    "video_urls": [
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_0.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_1.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_2.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_3.mp4"
    ],
    "task_id": "da3bdcd0-9c21-4b40-877a-2c36e5f479e5",
    "success": true
}
```

Można zauważyć, że zawartość wyniku jest zgodna z powyższym tekstem, co realizuje funkcję rozszerzonego wideo.

## Asynchroniczny callback

Ponieważ czas generowania API Midjourney Videos jest stosunkowo długi, wynosi około 1-2 minut, jeśli API nie odpowiada przez dłuższy czas, żądanie HTTP będzie utrzymywać połączenie, co prowadzi do dodatkowego zużycia zasobów systemowych, dlatego to API oferuje również wsparcie dla asynchronicznych callbacków.

Cały proces wygląda następująco: gdy klient wysyła żądanie, dodatkowo określa pole `callback_url`, po wysłaniu żądania API natychmiast zwraca wynik, zawierający pole `task_id`, które reprezentuje aktualny identyfikator zadania. Po zakończeniu zadania wynik generowania wideo zostanie wysłany do określonego przez klienta `callback_url` w formie POST JSON, w tym również zawierając pole `task_id`, dzięki czemu wynik zadania można powiązać za pomocą identyfikatora.

Poniżej przyjrzymy się, jak to dokładnie działa na przykładzie.

Najpierw, callback Webhook to usługa, która może odbierać żądania HTTP, deweloperzy powinni zastąpić to URL swojego serwera HTTP. W tym celu, dla wygody demonstracji, użyjemy publicznej strony przykładowej Webhook [https://webhook.site/](https://webhook.site/), otwierając tę stronę, można uzyskać URL Webhook, jak pokazano na obrazku:

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

Skopiuj ten URL, aby użyć go jako Webhook, przykładowy URL to `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f`.

Następnie możemy ustawić pole `callback_url` na powyższy URL Webhook, a także wypełnić odpowiednie parametry, szczegóły jak na obrazku:

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

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

```
{
  "task_id": "b726a27a-f379-4d91-b569-cfe4b7b299ee"
}
```

Po chwili możemy na `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f` zaobserwować wynik generowania wideo, jak pokazano na obrazku:

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

Zawartość jest następująca:

```json theme={null}
{
  "image_url": "https://storage.fonedis.cc/upload_1751818513244368774.png",
  "image_width": 560,
  "image_height": 688,
  "progress": 100,
  "video_id": "1751818512924054",
  "video_urls": [
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_0.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_1.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_2.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_3.mp4"
  ],
  "task_id": "b726a27a-f379-4d91-b569-cfe4b7b299ee",
  "success": true
}
```

Można zobaczyć, że w wyniku znajduje się pole `task_id`, a pozostałe pola są podobne do powyższych, dzięki czemu można powiązać zadanie za pomocą tego identyfikatora.

## 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 szybkości.
* `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 temu dokumentowi zrozumieliście, jak korzystać z API Midjourney Videos, aby generować wideo na podstawie wprowadzonych słów kluczowych oraz referencyjnego obrazu pierwszej klatki. Mamy nadzieję, że ten dokument pomoże Wam lepiej zintegrować i korzystać z tego API. W razie jakichkolwiek pytań, prosimy o kontakt z naszym zespołem wsparcia technicznego.
