Ten dokument opisuje, jak używać kodu, aby osiągnąć te same wyniki, co w sieci. Po dokumencie podany zostanie tylko względny adres API, musisz połączyć się z główną nazwą domeny: https://api.aitubo.ai.
Na przykład, jeśli chcesz utworzyć zadanie, musisz wywołać https://api.aitubo.ai/api/job/create
Dokument podzielony jest na dwie sekcje, pierwsza dla przykładów, a druga dla konkretnych API.
Ta sekcja opisuje, jak utworzyć zadanie i uzyskać zadanie. Nasze API do tworzenia zadań zapewnia trzy podstawowe funkcje: Text2Image, Image2Image, and ControlNet(ControlNet to struktura sieci neuronowej do kontrolowania modeli dyfuzyjnych poprzez dodanie dodatkowych warunków).
Niezależnie od tego, której z trzech funkcji używasz, najpierw musisz uzyskać listę obsługiwanych przez nas modeli, a następnie podczas tworzenia zadania musisz przekazać id pole informacji o modelu
curl --request GET \
--url 'https://api.aitubo.ai/api/model/list?type=platform' \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848'
Wynik jest mniej więcej taki:
{
"code": 0,
"data": {
"domain": "https://file.aitubo.ai/",
"total": 10,
"models": [
{
"id": "6426f9c60ca4651b98b91a6d",
"name": "ConceptCanvas",
"username": "Aitubo",
"desc": "A model that creates concept scenes with a European thick paint or CG style.",
"cover": "assets/model/6426f9c60ca4651b98b91a6d/cover.jpg",
"isFavourite": false,
"controlNet": false
},
{
"id": "642b977d2f2842537c09fe41",
"name": "DreamShaper",
"username": "Aitubo",
"desc": "A model that can generate multiple styles of scenes, characters, and game assets.",
"cover": "assets/model/642b977d2f2842537c09fe41/cover.jpg",
"isFavourite": false,
"controlNet": true
},
...
]
}
}
curl --request POST \
--url https://api.aitubo.ai/api/job/create \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848' \
--header 'content-type: application/json' \
--data '{
"prompt": "A cat sleeps on the plane",
"modelId": "642b977d2f2842537c09fe41"
}
Następnie otrzymasz odpowiedź taką jak ta:
{
"code": 0,
"data": {
"consumedCredit": 40,
"credit": 120,
"id": "64351e4d567bcd86773dc841"
}
}
Możesz sprawdzić status tworzenia zadania przez ankietowanie. Każde zdjęcie zajmuje około 2 sekund, więc kontroluj częstotliwość zapytań. Na koniec otrzymasz coś takiego:
{
"code": 0,
"data": {
"id": "64351e4d567bcd86773dc841",
"args": {
"prompt": "A cat sleeps on the plane",
"negativePrompt": "lowres, bad anatomy, cropped, worst quality, low quality",
"strength": 0.8,
"width": 512,
"height": 512,
"count": 4,
"steps": 30,
"modelId": "642b977d2f2842537c09fe41"
},
"result": {
"info": "Warning: some images may contain NSFW content",
"data": {
"images": [
"images/art/640076a4661aa1c0f81ba2d7/cgqhsljj5mf00080001g.png",
"images/art/640076a4661aa1c0f81ba2d7/cgqhsljj5mf000800020.png",
"images/art/640076a4661aa1c0f81ba2d7/cgqhsljj5mf00080002g.png",
"images/art/640076a4661aa1c0f81ba2d7/cgqhsljj5mf000800030.png"
],
"artIds": [
"64351e56567bcd86773dc842",
"64351e56567bcd86773dc843",
"64351e56567bcd86773dc844",
"64351e56567bcd86773dc845"
],
"domain": "https://file.aitubo.ai/"
}
},
"status": 2,
"createAt": "2023-04-11T08:46:05.55Z"
}
}
Aby użyć Image2Image, możesz wywołać nasze Prześlij obraz API, aby uzyskać względny adres OSS obrazu, lub możesz podać obraz z adresem bezwzględnym.
curl --request POST \
--url https://api.aitubo.ai/api/job/create \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848' \
--header 'content-type: application/json' \
--data '{
"imagePath": "images/tmp/cgqi1jntuq4000800040.png",
"modelId": "642b977d2f2842537c09fe41",
"prompt": "scene",
"guidanceScale": 0.7
}'
Możesz sprawdzić status tworzenia zadania przez ankietowanie, tak jak w Text2Image.
Przed użyciem funkcji ControlNet musisz najpierw wywołać API /job/model/list, aby uzyskać odpowiednie kategorie ControlNet:
{
"code": 0,
"data": {
"domain": "https://file.aitubo.ai/",
"models": [
{
"id": "canny",
"name": "canny",
"icon": "assets/template/control_canny.jpg"
},
{
"id": "scribble",
"name": "scribble",
"icon": "assets/template/control_scribble.jpg"
},
...
}
}
Następnie wywołaj API /job/create:
curl --request POST \
--url https://api.aitubo.ai/api/job/create \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848' \
--header 'content-type: application/json' \
--data '{ "imagePath": "https://ichef.bbci.co.uk/news/976/cpsprodpb/17638/production/_124800859_gettyimages-817514614.jpg.webp",
"controlModel": "canny",
"prompt": "a little dog"
}'
Możesz również przekazać modelId pole(Upewnij się, że model obsługuje ControlNet):
curl --request POST \
--url https://api.aitubo.ai/api/job/create \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848' \
--header 'content-type: application/json' \
--data '{
"imagePath": "https://ichef.bbci.co.uk/news/976/cpsprodpb/17638/production/_124800859_gettyimages-817514614.jpg.webp",
"controlModel": "canny",
"prompt": "a little dog",
"modelId": "642b977d2f2842537c09fe41"
}'
Ścieżka: /api/job/upload-image
Metoda: POST
Nagłówki
Nazwa | Wartość | Wymagane | Przykład |
---|---|---|---|
Content-Type | multipart/form-data | tak | |
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Treść
Nazwa | Wartość | Wymagane |
---|---|---|
image | plik | tak |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | integer | tak | code=0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | nie | |||
├─path | string | nie | ścieżka obrazu AliYun OSS |
Ścieżka: /api/job/create
Metoda: POST
Nagłówki
Nazwa | Wartość | Wymagane | Przykład |
---|---|---|---|
Content-Type | application/json | tak | |
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Treść
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
imagePath | string | nie | ścieżka przesłanego obrazu (url/oss) | ||
maskImage | string | nie | Edytor AI powinien przekazać to pole | ||
modelId | string | nie | jeśli controlModel ma wartość null, to pole powinno być wypełnione | ||
prompt | string | tak | prompt | ||
negativePrompt | string | nie | negatywny prompt | ||
controlModel | string | nie | canny / scribble / openpose / mlsd / hed / seg / depth / normal | ||
controlStrength | number | nie | 1 | [0, 2] | |
controlFilter | string | nie | preprecessor of control image, for example: openpose / openpose_full / openpose_hand / openpose_face / openpose_faceonly | ||
strength | number | nie | 0.8 | [0.1, 1] | |
width | integer | nie | 512 | ||
height | integer | nie | 512 | ||
steps | integer | nie | 30 | 10 <= value <= 50 | |
guidanceScale | integer | nie | 7.5 | 0 < value <= 20 | |
count | integer | nie | 4 | wygenerowana liczba obrazów |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | number | tak | 0 -> sukces;1000 -> brak wystarczającego kredytu | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─id | string | tak | ID zadania | ||
├─credit | integer | tak | całkowity kredyt użytkownika | ||
├─consumedCredit | integer | tak | zużyty kredyt zadania |
Ścieżka: /api/job/get
Metoda: GET
Zapytanie
Nazwa | Wymagane | Przykład | Uwaga |
---|---|---|---|
id | tak | 642ba091592245d79a645b39 | ID zadania |
Nazwa | Type | Wymagane | Default | Uwaga | Others |
---|---|---|---|---|---|
code | integer | tak | 0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─id | string | tak | ID zadania | ||
├─createAt | string | tak | czas utworzenia zadania | ||
├─status | integer | tak | status zadania. 0 -> nie gotowe; 1 -> przetwarzanie; 2 -> sukces; 3 -> niepowodzenie | ||
├─result | object | nie | |||
├─├─info | string | nie | |||
├─├─data | object | nie | |||
├─├─├─images | string [] | nie | Wynikowa ścieżka względna obrazu (należy połączyć z polem domeny) | item Type:string | |
├─├─├─artIds | string [] | nie | Picture corresponding artID | item Type:string | |
├─├─├─domain | string | nie | oss url, you need to concatenate the relative path of the picture | ||
├─args | object | nie | |||
├─├─prompt | string | nie | |||
├─├─negativePrompt | string | nie | |||
├─├─model | string | nie | |||
├─├─strength | integer | nie | |||
├─├─width | integer | nie | |||
├─├─height | integer | nie |
Ścieżka: /api/job/models
Metoda: GET
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | integer | tak | 0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├domain | string | tak | nazwa domeny oss obrazu, należy połączyć z poniższym polem ikony | ||
├models | object [] | tak | item Type:object | ||
id | string | tak | id modelu, wartość parametru controlModel to ten ID podczas tworzenia zadania | ||
name | string | tak | Nazwa angielska | ||
cname | string | tak | Nazwa chińska | ||
icon | string | tak | przykładowy obraz. względna ścieżka oss, musisz połączyć domeny |
Ścieżka: /api/job/list
Metoda: GET
Nagłówki
Nazwa | Wartość | Wymagane | Przykład | Uwaga |
---|---|---|---|---|
Content-Type | application/json | tak | ||
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Query
Nazwa | Wymagane | Przykład | Uwaga |
---|---|---|---|
pageIndex | tak | zacznij od 1 | |
pageSize | tak |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | integer | tak | 0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─jobs | object [] | tak | tablica zadań | item Type:object | |
├─├─id | string | tak | ID zadania | ||
├─├─createdAt | string | tak | |||
├─├─args | object | tak | |||
├─├─├─prompt | string | tak | |||
├─├─├─negativePrompt | string | tak | |||
├─├─├─strength | integer | tak | |||
├─├─├─width | integer | tak | |||
├─├─├─height | integer | tak | |||
├─├─├─count | integer | tak | |||
├─├─├─steps | integer | tak | |||
├─├─arts | object [] | tak | wygenerowana tablica obrazów | item Type:object | |
├─├─├─id | string | tak | id wygenerowanego obrazu | ||
├─├─├─images | object [] | tak | tablica różnych obrazów | item Type:object | |
├─├─├─├─spec | string | tak | typ wariantu. o -> oryginał; 2x/3x/4x -> obraz w skali 2/3/4 | ||
├─├─├─├─path | string | tak | ścieżka obrazu. domena do połączenia | ||
├─├─├─├─size | integer | tak | rozmiar obrazu. jednostka: Bajt | ||
├─domain | string | tak | domena obrazu oss |
Ścieżka: /api/model/list
Metoda: GET
Nagłówki
Nazwa | Wartość | Wymagane | Przykład | Uwaga |
---|---|---|---|---|
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Zapytanie
Nazwa | Wymagane | Przykład | Uwaga |
---|---|---|---|
pageIndex | tak | zacznij od 1 | |
pageSize | tak | ||
type | nie | platform/community |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | integer | tak | 0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─domain | string | tak | domena oss | ||
├─total | integer | tak | całkowita liczba modeli filtrowanych do stronicowania | ||
├─models | object [] | tak | item Type:object | ||
├─├─id | string | tak | ID modelu | ||
├─├─name | string | tak | nazwa modelu | ||
├─├─username | string | tak | model’s author name | ||
├─├─desc | string | tak | opis modelu | ||
├─├─cover | string | tak | okładka modelu | ||
├─├─isFavourite | boolean | tak | czy użytkownik lubi model | ||
├─├─controlNet | boolean | tak | czy model obsługuje ControlNet |
Ścieżka: /api/job/upscale
Metoda: POST
Nagłówki
Nazwa | Wartość | Wymagane | Przykład | Uwaga |
---|---|---|---|---|
Content-Type | application/json | tak | ||
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Treść
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
model | string | nie | nazwa modelu upscale | ||
RealESRGAN _x4plus / RealESRGAN_x4plus_anime_6B | |||||
imagePath | string | tak | ścieżka obrazu. domena do połączenia | ||
upscaleFactor | integer | tak | 2 <= współczynnik <= 4 | ||
beauty | boolean | nie | czy włączyć ulepszanie twarzy | ||
artId | string | tak | Potrzebujesz artID zdjęcia super punktu |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | number | tak | 0 -> sukces;1000 -> brak wystarczającego kredytu | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─id | string | nie | id zadania upscale | ||
├─credit | integer | tak | całkowity kredyt użytkownika | ||
├─consumedCredit | integer | tak | zużyty kredyt zadania |
Ścieżka: /api/art/segment
Metoda: POST
Nagłówki
Nazwa | Wartość | Wymagane | Przykład | Uwaga |
---|---|---|---|---|
Content-Type | application/json | tak | ||
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Treść
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
image | string | tak | ścieżka obrazu. ścieżka bezwzględna/względna |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | number | tak | 0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─image | string | tak | URL obrazu po segmentacji |
Ścieżka: /api/user/profile
Metoda: GET
Nagłówki
Nazwa | Wartość | Wymagane | Przykład | Uwaga |
---|---|---|---|---|
Content-Type | application/json | tak | ||
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | number | tak | 0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─name | string | tak | |||
string | tak | ||||
├─avatar | string | tak | |||
├─phone | string | tak | |||
├─credit | integer | tak | całkowity kredyt użytkownika | ||
├─displayNSFW | boolean | tak | |||
├─discord | boolean | tak |
Ścieżka: api/transform/list
Metoda: GET
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | number | tak | 0 -> sukces | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─domain | string | tak | nazwa domeny oss obrazu, należy połączyć z poniższym polem ikony | ||
├─tags | string[] | tak | tag szablonu | ||
├─transform | object | tak | |||
├─├─tag | object[] | tak | |||
├─├─├─id | string | tak | |||
├─├─├─name | string | tak | |||
├─├─├─image | string | tak | oryginalny obraz | ||
├─├─├─art | string | tak | obraz wynikowy | ||
├─├─├─cost | number | tak | zużycie kredytu | ||
├─├─├─pro | boolean | tak | czy pro | ||
├─├─├─tag | string | tak | tag |
Ścieżka: api/transform/create-headshot
Metoda: POST
Nagłówki
Nazwa | Wartość | Wymagane | Przykład | Uwaga |
---|---|---|---|---|
Content-Type | application/json | tak | ||
Authorization | Bearer {YOUR KEY} | tak | Bearer 37f333a2d5f811edb248acde48001122 |
Treść
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
imagePath | string | tak | ścieżka obrazu zwrócona po wywołaniu upload-image api | ||
transformId | string | tak | |||
width | integer | nie | |||
height | integer | nie | |||
keepHair | boolean | nie | false | ||
keepPose | boolean | nie | true |
Nazwa | Typ | Wymagane | Domyślne | Uwaga | Inne |
---|---|---|---|---|---|
code | number | tak | 0 -> sukces;1000 -> brak wystarczającego kredytu | ||
info | string | nie | informacje o błędzie | ||
data | object | tak | |||
├─id | string | tak | ID zadania | ||
├─credit | integer | tak | całkowity kredyt użytkownika | ||
├─consumedCredit | integer | tak | zużyty kredyt zadania |