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

# Luma API do generowania wideo - instrukcja integracji

> Luma Video Generation 集成指南 - XHuoAPI

Wraz z rosnącym zastosowaniem AI, różne programy AI stały się coraz bardziej powszechne. AI stopniowo przenika do wszystkich aspektów życia i pracy ludzi. Branże związane z AI również się rozszerzają, od początkowego pisania, przez edukację medyczną, aż po obecne wideo.

Luma to profesjonalna platforma do generowania wysokiej jakości wideo, gdzie użytkownicy muszą jedynie przesłać materiały, aby automatycznie wygenerować wysokiej jakości wideo w różnych stylach i efektach. Ten generator wideo AI został opracowany przez zespół członków z renomowanych firm technologicznych, a jego celem jest umożliwienie każdemu łatwego tworzenia doskonałych wideo bez skomplikowanych narzędzi do edycji.

Jednak Luma oficjalnie nie oferuje API, XHuoAPI dostarcza zestaw API Luma, symulując integrację z oficjalnym Suno, co umożliwia szybkie i wygodne generowanie pożądanych wideo.

## Aplikacja i użycie

Aby korzystać z Luma Videos API, najpierw można przejść na stronę [Luma Videos Generation API](https://api.xhuoapi.ai/documents/5bd3597d-1ff8-44ad-a580-b66b48393e7f) i kliknąć przycisk „Acquire”, aby uzyskać potrzebne poświadczenia:

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

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

Podczas pierwszej aplikacji przyznawana jest darmowa pula, która pozwala na bezpłatne korzystanie z tego API.

## Podstawowe użycie

Aby wygenerować wideo, można wprowadzić dowolny tekst, na przykład, jeśli chcę wygenerować wideo o astronautach przemieszczających się między przestrzenią a wulkanem, mogę wpisać `Astronauts shuttle from space to volcano`, jak pokazano na obrazku:

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

Wygenerowany kod wygląda następująco:

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

Główne parametry żądania:

* `prompt`: hasło do generowania wideo.
* `aspect_ratio`: proporcje wideo, domyślnie 16:9.
* `end_image_url`: opcjonalne, określa ostatnią klatkę.
* `enhancement`: opcjonalne, przełącznik poprawy ostrości.
* `loop`: czy generować wideo w pętli, domyślnie false.
* `timeout`: opcjonalne, liczba sekund na czas oczekiwania.
* `callback_url`: adres zwrotny asynchroniczny.

Można kliknąć przycisk „Try”, aby bezpośrednio przetestować API, poczekać 1-2 minuty, a wyniki będą następujące:

```json theme={null}
{
  "success": true,
  "task_id": "e4018a99-1522-4f24-9330-62c2a9b50b59",
  "video_id": "155838f8-7f1e-44d8-b387-192f3b4b509d",
  "prompt": "Astronauts shuttle from space to volcano",
  "video_url": "https://storage.cdn-luma.com/dream_machine/af94e7ca-da35-4b5f-a636-2d7254184d0d/watermarked_video0585de3737db946e5a0ac895384ecd180.mp4",
  "video_height": 752,
  "video_width": 1360,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.xhuoapi.ai/luma/e4018a99-1522-4f24-9330-62c2a9b50b59.jpg",
  "thumbnail_width": 1360,
  "thumbnail_height": 752
}
```

Można zauważyć, że otrzymaliśmy informacje o tym wideo, w tym ID wideo, link do wideo, miniaturę itp.

Opis pól jest następujący:

* success: czy generowanie się powiodło, jeśli tak, to `true`, w przeciwnym razie `false`
* task\_id: unikalne ID zadania generowania wideo
* video\_id: unikalne ID wideo wygenerowanego w tym zadaniu
* prompt: słowo kluczowe zadania generowania wideo
* video\_url: link do wynikowego wideo wygenerowanego w tym zadaniu
* video\_height: wysokość wygenerowanego obrazu miniatury wideo
* video\_width: szerokość wygenerowanego obrazu miniatury wideo
* state: stan zadania generowania wideo, jeśli zadanie jest zakończone, to `completed`.
* thumbnail\_url: link do wygenerowanego obrazu miniatury wideo
* thumbnail\_width: szerokość wygenerowanego obrazu miniatury wideo
* thumbnail\_height: wysokość wygenerowanego obrazu miniatury wideo

## Generowanie niestandardowych klatek początkowych i końcowych

Jeśli chcesz wygenerować wideo za pomocą niestandardowych klatek początkowych i końcowych, możesz wprowadzić linki do obrazów klatek początkowych i końcowych:

W tym przypadku pole `start_image_url` może przyjąć następujący obraz jako klatkę początkową wideo:

![Klatka początkowa](https://cdn.xhuoapi.ai/r9vsv9.png)

Następnie, aby dostosować generowanie wideo na podstawie klatek początkowych i końcowych oraz słów kluczowych, można określić następujące treści:

* action: działanie zadania generowania wideo, zazwyczaj zwykłe generowanie `generate` i rozszerzone generowanie `extend`, domyślnie `generate`.
* start\_image\_url: określa klatkę początkową generowanego wideo.
* end\_image\_url: określa klatkę końcową generowanego wideo.
* prompt: treść słów kluczowych do generowania wideo.

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

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

Po wypełnieniu automatycznie wygenerowano kod, który wygląda następująco:

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

Odpowiedni kod:

```python theme={null}
import requests

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

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

payload = {
    "start_image_url": "https://cdn.xhuoapi.ai/r9vsv9.png",
    "action": "generate",
    "prompt": "Astronauts shuttle from space to volcano"
}

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

Otrzymany wynik wygląda następująco:

```json theme={null}
{
  "success": true,
  "task_id": "12a18694-fd4b-47e7-9c50-34f30862cff6",
  "video_id": "0105c090-03a5-425a-8026-523341cd575b",
  "prompt": "Astronauts shuttle from space to volcano",
  "video_url": "https://platform.cdn.xhuoapi.ai/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.xhuoapi.ai/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
```

Ostateczny wynik jest podobny do powyższego, wygenerowana klatka początkowa wideo zawiera przesłany obraz, oczywiście można również jednocześnie przesłać linki do obrazów klatek początkowych i końcowych, aby wygenerować wideo, wystarczy dodać dodatkowy obraz klatki końcowej do powyższego. Informacje o obrazie klatki końcowej są następujące:

![Klatka końcowa](https://cdn.xhuoapi.ai/0iad3k.png)

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

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

Na koniec uzyskujemy następujący wynik:

```json theme={null}
{
  "success": true,
  "task_id": "d1cb723a-e554-4775-94a4-bb6ae8c7ea67",
  "video_id": "6bebd0d2-f793-472e-9326-38528a9273bb",
  "prompt": "Astronauci przelatują z kosmosu do wulkanu",
  "video_url": "https://platform.cdn.xhuoapi.ai/luma/d1cb723a-e554-4775-94a4-bb6ae8c7ea67.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.xhuoapi.ai/luma/d1cb723a-e554-4775-94a4-bb6ae8c7ea67.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
```

Wynik jest podobny do powyższego, wygenerowane wideo zawiera zarówno obrazek z pierwszej, jak i ostatniej klatki, co kończy proces dostosowywania pierwszej i ostatniej klatki do generowania wideo.

## Funkcje rozszerzenia wideo

Jeśli chcesz kontynuować generowanie wideo, możesz ustawić parametr `action` na `extend` i wprowadzić ID wideo lub link do wideo, ID wideo i link do wideo można uzyskać na podstawie podstawowego użycia, jak pokazano na poniższym obrazku:

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

W tym momencie można zobaczyć, że ID wideo to:

```
"video_id": "0105c090-03a5-425a-8026-523341cd575b",
"video_url": "https://platform.cdn.xhuoapi.ai/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.mp4"
```

> Uwaga, tutaj `video_id` i `video_url` w wideo to ID i link do wygenerowanego wideo, jeśli nie wiesz, jak wygenerować wideo, możesz odwołać się do podstawowego użycia opisanego powyżej.

Aby kontynuować generowanie wideo, musisz przesłać link do wideo lub ID wideo, poniżej pokazano, jak użyć ID wideo do rozszerzenia, następnie musimy wypełnić słowa kluczowe, aby dostosować generowanie wideo, co pozwoli na określenie następujących treści:

* action: w tym przypadku działanie rozszerzające wideo, powinno być `extend`.
* prompt: słowa kluczowe, które mają być rozszerzone w wideo.
* video\_url: link do wideo, które ma być rozszerzone.
* video\_id: unikalne ID wideo, które ma być rozszerzone.
* end\_image\_url: link do obrazka końcowej klatki, opcjonalny parametr.

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

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

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

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

Odpowiedni kod Python:

```python theme={null}
import requests

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

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

payload = {
    "action": "extend",
    "video_id": "0105c090-03a5-425a-8026-523341cd575b",
    "prompt": "Astronauci przelatują z kosmosu do wulkanu"
}

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

Po kliknięciu uruchomienia można zauważyć, że otrzymano wynik jak poniżej:

```json theme={null}
{
  "success": true,
  "task_id": "c6e529d1-a06d-4c12-91b2-c855135131c3",
  "video_id": "36908c49-c2bb-4a11-bd5a-b8512b004818",
  "prompt": "Astronauci przelatują z kosmosu do wulkanu",
  "video_url": "https://platform.cdn.xhuoapi.ai/luma/c6e529d1-a06d-4c12-91b2-c855135131c3.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.xhuoapi.ai/luma/c6e529d1-a06d-4c12-91b2-c855135131c3.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
```

Można zauważyć, że to wideo zostało rozszerzone na podstawie wideo, które miało być rozszerzone, a treść wyniku jest zgodna z powyższym, co realizuje funkcję kontynuacji generowania piosenki.

Oczywiście możemy również określić link do wideo, aby przeprowadzić rozszerzenie, wypełniając następujące informacje:

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

Po uruchomieniu otrzymano następujący wynik:

```json theme={null}
{
  "success": true,
  "task_id": "1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca",
  "video_id": "f0187dc2-339f-4a08-a435-c3a3341f620a",
  "prompt": "Astronauci przelatują z kosmosu do wulkanu",
  "video_url": "https://platform.cdn.xhuoapi.ai/luma/1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.xhuoapi.ai/luma/1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
```

Na podstawie wyniku można zauważyć, że na podstawie linku do wideo również można zrealizować funkcję rozszerzenia wideo.

Na koniec możemy również określić obrazek końcowej klatki w rozszerzonym wideo, poniżej znajdują się informacje o obrazku końcowej klatki:

![Klatka końcowa](https://cdn.xhuoapi.ai/0iad3k.png)

Następnie na podstawie powyższego dodajemy informacje o obrazku końcowej klatki, szczegóły są następujące:

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

Po kliknięciu uruchomienia otrzymano następujące informacje:

```json theme={null}
{
  "success": true,
  "task_id": "b816b2b4-c345-4673-9e19-83e91f91b643",
  "video_id": "c5400053-63e6-4206-8082-31cf9dd1e7ed",
  "prompt": "Astronauci przelatują z kosmosu do wulkanu",
  "video_url": "https://platform.cdn.xhuoapi.ai/luma/b816b2b4-c345-4673-9e19-83e91f91b643.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.xhuoapi.ai/luma/b816b2b4-c345-4673-9e19-83e91f91b643.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
```

Można zauważyć, że na podstawie rozszerzonego wideo można również określić obrazek końcowej klatki do rozszerzenia.

## Asynchroniczne wywołania zwrotne

Ponieważ czas generowania wideo przez Luma 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 wywołań zwrotnych.
整体流程是：Klient inicjuje żądanie, dodatkowo określając pole `callback_url`. Po wysłaniu żądania API, API natychmiast zwraca wynik, zawierający informacje o polu `task_id`, które reprezentuje aktualne ID zadania. Po zakończeniu zadania, wynik generowania muzyki zostanie wysłany do określonego przez klienta `callback_url` w formie POST JSON, w którym również znajduje się pole `task_id`, dzięki czemu wyniki zadania można powiązać za pomocą ID.

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

Po pierwsze, Webhook to usługa, która może odbierać żądania HTTP, a deweloperzy powinni zastąpić ją 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/q78okf.png" width="500" className="m-auto" />
</p>

Skopiuj ten URL, aby użyć go jako Webhook, a przykładowy URL to [https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13](https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13).

Następnie możemy ustawić pole `callback_url` na powyższy URL Webhook, a także wypełnić `prompt`, jak pokazano na obrazku:

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

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

```json theme={null}
{
  "task_id": "732f8282-7cf8-401c-95f2-42c33aa079a6"
}
```

Po chwili możemy zaobserwować wynik generowania piosenki na [https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13](https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13), jak pokazano na obrazku:

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

Treść jest następująca:

```json theme={null}
{
    "success": true,
    "task_id": "732f8282-7cf8-401c-95f2-42c33aa079a6",
    "video_id": "4d8013c3-5de0-41aa-966e-0b1a51d1c633",
    "prompt": "Astronauts shuttle from space to volcano",
    "video_url": "https://platform.cdn.xhuoapi.ai/luma/732f8282-7cf8-401c-95f2-42c33aa079a6.mp4",
    "video_height": 752,
    "video_width": 1360,
    "state": "completed",
    "thumbnail_url": "https://platform.cdn.xhuoapi.ai/luma/732f8282-7cf8-401c-95f2-42c33aa079a6.jpg",
    "thumbnail_width": 1360,
    "thumbnail_height": 752
}
```

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