Przejdź do głównej treści
Ten dokument przedstawi sposób integracji z Midjourney Edits API, które umożliwia edytowanie przesłanych obrazów za pomocą wprowadzonych słów kluczowych.

Proces aplikacji

Aby korzystać z API, należy najpierw przejść do strony Midjourney Edits API i złożyć wniosek o odpowiednią usługę. Po wejściu na stronę, kliknij przycisk „Acquire”, jak pokazano na obrazku: Jeśli nie jesteś zalogowany lub zarejestrowany, automatycznie zostaniesz przekierowany na stronę logowania, aby zarejestrować się i zalogować. Po zalogowaniu lub rejestracji zostaniesz automatycznie przekierowany z powrotem 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łów kluczowych prompt, działania action, oraz linku do obrazu image_url, aby uzyskać przetworzony wynik. Najpierw musisz przekazać prostą wartość pola action, która wynosi generate, a szczegóły są następujące:

Można zauważyć, że ustawiliśmy nagłówki żądania, w tym:
  • accept: format odpowiedzi, który chcesz otrzymać, tutaj wpisano 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, które obejmuje:
  • mask: można określić lokalizację maski obszaru obrazu do edycji i ponownego generowania.
  • split_images: dzieli wygenerowany obraz na wiele obrazów, zwracając je przez pole sub_image_urls. Domyślnie jest to false.
  • action: działanie związane z edycją obrazu, domyślnie to generate.
  • image_url: link do obrazu, który ma być edytowany.
  • prompt: słowa kluczowe.
  • mode: tryb generacji, opcjonalnie fast/relax/turbo.
  • 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:

Kliknij przycisk „Try”, aby przeprowadzić test, jak pokazano na powyższym obrazku, a otrzymamy następujący wynik:
{
  "sub_image_urls": [
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_0.png",
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_1.png",
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_2.png",
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_3.png"
  ],
  "image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391371957878132849/cat_sitting_table_88e16dab-ef48-43a5-af73-bf24065287bc.png?ex=686ba79d&is=686a561d&hm=ad005d06f6673d6152456e04c3cbec39d062bd9df10448623fae27ddaf8b8a80&",
  "image_width": 960,
  "image_height": 1200,
  "raw_image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391371957878132849/cat_sitting_table_88e16dab-ef48-43a5-af73-bf24065287bc.png?ex=686ba79d&is=686a561d&hm=ad005d06f6673d6152456e04c3cbec39d062bd9df10448623fae27ddaf8b8a80&",
  "raw_image_width": 960,
  "raw_image_height": 1200,
  "progress": 100,
  "image_id": "1391372193836826624",
  "task_id": "26c39859-f54a-4998-9e42-3da96eceee8c",
  "success": true
}
Zwrócony wynik zawiera wiele pól, które są opisane poniżej:
  • success, status zadania edycji obrazu.
  • task_id, ID zadania edycji obrazu.
  • image_id, ID obrazu w tym zadaniu edycji.
  • sub_image_urls, wiele wyników obrazów z zadania generacji.
  • image_url, link do wygenerowanego obrazu.
  • image_width, szerokość wygenerowanego obrazu.
  • image_height, wysokość wygenerowanego obrazu.
  • progress, pole postępu zadania edycji obrazu.
Można zauważyć, że otrzymaliśmy zadowalające informacje o obrazie, wystarczy uzyskać wygenerowany obraz na podstawie adresu URL image_url w wyniku. Dodatkowo, jeśli chcesz wygenerować odpowiedni kod do integracji, możesz go bezpośrednio skopiować, na przykład kod CURL wygląda następująco:
curl -X POST 'https://api.acedata.cloud/midjourney/edits' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "prompt": "A cat sitting on a table",
  "split_images": true,
  "image_url": "https://cdn.acedata.cloud/jgo1cw.jpg",
  "action": "generate"
}'

Asynchroniczne wywołanie zwrotne

Ponieważ czas generacji przez Midjourney Edits API 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. Cały proces polega na tym, że klient podczas wysyłania żądania dodatkowo określa pole callback_url. Po wysłaniu żądania API natychmiast zwraca wynik, zawierający pole task_id, które reprezentuje aktualne ID zadania. Po zakończeniu zadania, wynik generacji wideo zostanie wysłany do określonego przez klienta callback_url w formie POST JSON, w tym również pole task_id, co pozwala na powiązanie wyniku zadania z ID. Poniżej przedstawiamy przykład, aby zrozumieć, jak to działa. Najpierw, wywołanie zwrotne Webhook to usługa, która może odbierać żądania HTTP, deweloperzy powinni zastąpić to URL swojego serwera HTTP. Dla wygody demonstracji użyjemy publicznej strony przykładowej Webhook https://webhook.site/, otwierając tę stronę, otrzymasz URL Webhook, jak pokazano na obrazku: 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 są pokazane na obrazku:

Klikając „Uruchom”, można zauważyć, że natychmiast otrzymujemy wynik, jak poniżej:
{
  "task_id": "b8b7fdc2-628e-40dd-bc0c-671c3ddac9e9"
}
Po chwili możemy na stronie https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f zobaczyć wynik generacji wideo, jak pokazano na obrazku:

Treść jest następująca:
{
    "sub_image_urls": [
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_0.png",
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_1.png",
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_2.png",
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_3.png"
    ],
    "image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391374307719905340/cat_sitting_table_f3638ed2-60f6-49dd-897a-6d68c15afb17.png?ex=686ba9cd&is=686a584d&hm=71543c21c38db8a50c7ebcf54bc5208ec349e8592ec9e332f778f74167000ced&",
    "image_width": 960,
    "image_height": 1200,
    "raw_image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391374307719905340/cat_sitting_table_f3638ed2-60f6-49dd-897a-6d68c15afb17.png?ex=686ba9cd&is=686a584d&hm=71543c21c38db8a50c7ebcf54bc5208ec349e8592ec9e332f778f74167000ced&",
    "raw_image_width": 960,
    "raw_image_height": 1200,
    "progress": 100,
    "image_id": "1391374390892953600",
    "task_id": "b8b7fdc2-628e-40dd-bc0c-671c3ddac9e9",
    "success": true
}
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 zrealizować powiązanie z zadaniem.

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

{
  "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 Edits, które umożliwia edytowanie obrazów za pomocą wprowadzonych słów kluczowych. 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.