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

# Flux Images Generation API Integracja

> Flux Image Generation 集成指南 - XHuoAPI

W tym artykule przedstawimy sposób integracji z API Flux Images Generation, które pozwala na generowanie obrazów Flux za pomocą wprowadzonych parametrów.

## Proces aplikacji

Aby skorzystać z API, należy najpierw przejść do strony [Flux Images Generation API](https://api.xhuoapi.ai/documents/6b9197c5-7a3f-4878-a43f-7f94e7e66394) 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 korzystanie z tego API bez opłat.

## Podstawowe użycie

Najpierw zapoznaj się z podstawowym sposobem użycia, czyli wprowadzeniem słowa kluczowego `prompt`, działania `action`, rozmiaru obrazu `size`, aby uzyskać przetworzony wynik. Najpierw musisz przekazać pole `action`, którego wartość to `generate`, a następnie musisz wprowadzić słowo kluczowe, szczegóły są następujące:

<p>
  <img src="https://cdn.xhuoapi.ai/wz85jt.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 wpisujemy `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:

* `action`: działanie związane z generowaniem obrazu.
* `size`: rozmiar wygenerowanego obrazu.
* `count`: liczba generowanych obrazów, domyślna wartość to 1, ten parametr jest ważny tylko w przypadku generowania obrazów, w przypadku edycji jest nieaktywny.
* `prompt`: słowo kluczowe.
* `model`: model generacji, domyślnie `flux-dev`.
* `callback_url`: URL, na który mają być zwracane wyniki.

Parametr `size` ma pewne szczególne ograniczenia, głównie dzieli się na proporcje `width x height` oraz proporcje `x:y`, szczegóły są następujące:

| Model              | Zakres                                                            |
| ------------------ | ----------------------------------------------------------------- |
| flux-2-flex        | Wspiera proporcje x >= 64, musi być wielokrotnością 32            |
| flux-2-pro         | Wspiera proporcje x >= 64, musi być wielokrotnością 32            |
| flux-2-max         | Wspiera proporcje x >= 64, musi być wielokrotnością 32            |
| flux-pro-1.1       | Wspiera proporcje 256 \<= x \<= 1440, musi być wielokrotnością 32 |
| flux-dev           | Wspiera proporcje 256 \<= x \<= 1440, musi być wielokrotnością 32 |
| flux-pro-1.1-ultra | Nie wspiera proporcji, wspiera proporcje obrazów                  |
| flux-kontext-pro   | Nie wspiera proporcji, wspiera proporcje obrazów                  |
| flux-kontext-max   | Nie wspiera proporcji, wspiera proporcje obrazów                  |

Proporcje obrazów do wyboru: "1:1", "16:9", "21:9", "3:2", "2:3", "4:5", "5:4", "3:4", "4:3", "9:16", "9:21",

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/8q7aux.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}
{
  "success": true,
  "task_id": "226eb763-9eab-4d06-ad57-d59753a03307",
  "trace_id": "089f8b46-0167-4f25-88ee-3c3f88d80e84",
  "data": [
    {
      "prompt": "a white siamese cat",
      "image_url": "https://fal.media/files/lion/NVhtlwwGYQD6HrGaEfrzu_341484fad6d84b21b73f4f8824a3f98a.png",
      "timings": 1752743801
    },
    {
      "prompt": "a white siamese cat",
      "image_url": "https://fal.media/files/monkey/8UEQpFbQCYVOK1wKP3aV0_9bbc26fad64049b18d0244b99ef66ad1.png",
      "timings": 1752743801
    }
  ]
}
```

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

* `success`, status zadania generowania obrazu.
* `task_id`, ID zadania generowania obrazu.
* `trace_id`, ID śledzenia zadania generowania obrazu.
* `data`, lista wyników zadania generowania obrazu.
  * `image_url`, link do zadania generowania obrazu.
  * `prompt`, słowo kluczowe.

Można zauważyć, że otrzymaliśmy zadowalające informacje o obrazie, wystarczy, że na podstawie adresu URL obrazu w `data` uzyskamy wygenerowany obraz Flux.

Jeśli chcesz wygenerować odpowiedni kod do integracji, 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/flux/images' \
-H 'authorization: Bearer {token}' \
-H 'accept: application/json' \
-H 'content-type: application/json' \
-d '{
  "action": "generate",
  "prompt": "a white siamese cat",
  "model": "flux-kontext-pro",
  "count": 2
}'
```

## Edytowanie zadań obrazów

Jeśli chcesz edytować dany obraz, najpierw parametr `image_url` musi zawierać link do obrazu, który chcesz edytować, w tym przypadku `action` wspiera tylko `edit`, co pozwala na określenie następujących treści:

* model: model używany w tym zadaniu edycji obrazu, obecnie wspiera `flux-kontext-max`, `flux-kontext-pro`.
* image\_url: link do przesyłanego obrazu do edycji.

Przykład wypełnienia jest następujący:

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

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

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

Odpowiedni kod:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/flux/images"

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

payload = {
    "action": "edit",
    "prompt": "a white siamese cat",
    "model": "flux-kontext-pro",
    "image_url": "https://cdn.xhuoapi.ai/ytj2qy.png"
}

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

Po kliknięciu „Uruchom”, można zauważyć, że natychmiast otrzymujemy wynik, jak poniżej:

```json theme={null}
{
  "success": true,
  "task_id": "2a7979ff-1f77-4380-92c6-a2dc37c3b4c8",
  "trace_id": "732b65c0-48d9-49f7-b568-64e5acffe4c0",
  "data": [
    {
      "prompt": "a white siamese cat",
      "image_url": "https://fal.media/files/monkey/aEUXJZ6Faj9YXUCQVs01Q_af0cea56c558441c9ba8df67b200812d.png",
      "timings": 1752744073
    }
  ]
}
```

Można zauważyć, że efekt generacji to efekt edycji oryginalnego obrazu, wynik jest podobny do powyższego.

## Asynchroniczny callback

Ze względu na stosunkowo długi czas generowania przez API Flux Images Generation, wynoszący 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 bieżące ID zadania. Po zakończeniu zadania wynik generowania obrazu 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 dokładnie to działa na przykładzie.

Po pierwsze, callback Webhook to usługa, która może odbierać żądania HTTP, a deweloperzy powinni zastąpić ją URL-em własnego serwera HTTP. 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:

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

Skopiuj ten URL, aby użyć go jako Webhook, przykładowy URL to `https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab`.

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

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

```
{
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c"
}
```

Po chwili możemy na `https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab` zaobserwować wynik generowania obrazu, jak pokazano na obrazku:

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

Treść jest następująca:

```json theme={null}
{
  "success": true,
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c",
  "trace_id": "9b4b1ff3-90f2-470f-b082-1061ec2948cc",
  "data": [
    {
      "prompt": "a white siamese cat",
      "image_url": "https://sf-maas-uat-prod.oss-cn-shanghai.aliyuncs.com/outputs/f4f8d407-377a-408a-82d0-427a5a836f09_0.png",
      "seed": 1698551532,
      "timings": {
        "inference": 3.328
      }
    }
  ]
}
```

Widać, że w wyniku znajduje się pole `task_id`, a pozostałe pola są podobne do wcześniej wspomnianych, dzięki czemu można powiązać zadanie za pomocą tego pola.

## Obsługa błędów

Podczas wywoływania API, jeśli wystąpi błąd, 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 Flux Images Generation, aby generować obrazy na podstawie wprowadzonych podpowiedzi. Mamy nadzieję, że ten dokument pomoże Wam lepiej zintegrować i korzystać z tego API. W przypadku jakichkolwiek pytań, prosimy o kontakt z naszym zespołem wsparcia technicznego.
