В этом документе описывается, как использовать код для достижения тех же результатов, что и в Интернете. После документа будет указан только относительный адрес API, вам нужно будет объединить его с основным доменным именем: https://api.aitubo.ai.
Например, если вы хотите создать задание, вам нужно вызвать https://api.aitubo.ai/api/job/create
Документ разделен на два раздела: первый — для примеров, а второй — для конкретного API.
В этом разделе описывается, как создать задание и получить его. Наш API для создания заданий предоставляет три основные функции: Text2Image, Image2Image, and ControlNet(ControlNet — это структура нейронной сети для управления моделями диффузии путем добавления дополнительных условий).
Независимо от того, какую из трех функций вы используете, сначала вам нужно получить список поддерживаемых нами моделей, а затем, когда вы создадите задание, вам нужно будет передать id поле информации о модели
curl --request GET \
--url 'https://api.aitubo.ai/api/model/list?type=platform' \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848'
Результат выглядит примерно так:
{
"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"
}
Затем вы получите ответ, подобный этому:
{
"code": 0,
"data": {
"consumedCredit": 40,
"credit": 120,
"id": "64351e4d567bcd86773dc841"
}
}
Вы можете проверить статус создания задачи путем опроса. Каждое фото занимает около 2 секунд, поэтому, пожалуйста, контролируйте частоту запросов. Наконец, вы получите что-то вроде этого:
{
"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"
}
}
Чтобы использовать Image2Image, вы можете вызвать наш Загрузить изображение API, чтобы получить относительный адрес изображения в OSS, или вы можете предоставить изображение с абсолютным адресом.
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
}'
Вы можете проверить статус создания задачи путем опроса, как и в Text2Image.
Перед использованием функции ControlNet необходимо сначала вызвать API /job/model/list, чтобы получить соответствующие категории 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"
},
...
}
}
Затем вызовите 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"
}'
Вы также можете передать modelId поле(Убедитесь, что модель поддерживает 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"
}'
Путь: /api/job/upload-image
Метод: POST
Заголовки
Имя | Значение | Обязательно | Пример |
---|---|---|---|
Content-Type | multipart/form-data | да | |
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Тело
Имя | Значение | Обязательно |
---|---|---|
image | файл | да |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | integer | да | code=0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | нет | |||
├─path | string | нет | путь к изображению AliYun OSS |
Путь: /api/job/create
Метод: POST
Заголовки
Имя | Значение | Обязательно | Пример |
---|---|---|---|
Content-Type | application/json | да | |
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Тело
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
imagePath | string | нет | path of the uploaded image(url/oss both) | ||
maskImage | string | нет | AI Editor should pass this field | ||
modelId | string | нет | if controlModel is null, this field should be filled | ||
prompt | string | да | подсказка | ||
negativePrompt | string | нет | отрицательная подсказка | ||
controlModel | string | нет | canny / scribble / openpose / mlsd / hed / seg / depth / normal | ||
controlStrength | number | нет | 1 | [0, 2] | |
controlFilter | string | нет | preprecessor of control image, for example: openpose / openpose_full / openpose_hand / openpose_face / openpose_faceonly | ||
strength | number | нет | 0.8 | [0.1, 1] | |
width | integer | нет | 512 | ||
height | integer | нет | 512 | ||
steps | integer | нет | 30 | 10 <= value <= 50 | |
guidanceScale | integer | нет | 7.5 | 0 < value <= 20 | |
count | integer | нет | 4 | generated image count |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | number | да | 0 -> success;1000 -> no enough credit | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─id | string | да | job ID | ||
├─credit | integer | да | общий кредит пользователя | ||
├─consumedCredit | integer | да | consumed credit of the job |
Путь: /api/job/get
Метод: GET
Запрос
Имя | Обязательно | Пример | Примечание |
---|---|---|---|
id | да | 642ba091592245d79a645b39 | job ID |
Имя | Type | Обязательно | Default | Примечание | Others |
---|---|---|---|---|---|
code | integer | да | 0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─id | string | да | job ID | ||
├─createAt | string | да | время создания задания | ||
├─status | integer | да | статус задания. 0 -> не готово; 1 -> обработка; 2 -> успех; 3 -> сбой | ||
├─result | object | нет | |||
├─├─info | string | нет | |||
├─├─data | object | нет | |||
├─├─├─images | string [] | нет | Результирующий относительный путь к изображению (необходимо объединить с полем домена) | item Type:string | |
├─├─├─artIds | string [] | нет | Picture corresponding artID | item Type:string | |
├─├─├─domain | string | нет | oss url, you need to concatenate the relative path of the picture | ||
├─args | object | нет | |||
├─├─prompt | string | нет | |||
├─├─negativePrompt | string | нет | |||
├─├─model | string | нет | |||
├─├─strength | integer | нет | |||
├─├─width | integer | нет | |||
├─├─height | integer | нет |
Путь: /api/job/models
Метод: GET
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | integer | да | 0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├domain | string | да | image oss domain name, need to concatenate the icon field below | ||
├models | object [] | да | item Type:object | ||
id | string | да | model id, The controlModel parameter value is this ID when creating a job | ||
name | string | да | English name | ||
cname | string | да | Chinese name | ||
icon | string | да | sample picture. oss relative path, you need to concatenate domains |
Путь: /api/job/list
Метод: GET
Заголовки
Имя | Значение | Обязательно | Пример | Примечание |
---|---|---|---|---|
Content-Type | application/json | да | ||
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Query
Имя | Обязательно | Пример | Примечание |
---|---|---|---|
pageIndex | да | start from 1 | |
pageSize | да |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | integer | да | 0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─jobs | object [] | да | job array | item Type:object | |
├─├─id | string | да | job ID | ||
├─├─createdAt | string | да | |||
├─├─args | object | да | |||
├─├─├─prompt | string | да | |||
├─├─├─negativePrompt | string | да | |||
├─├─├─strength | integer | да | |||
├─├─├─width | integer | да | |||
├─├─├─height | integer | да | |||
├─├─├─count | integer | да | |||
├─├─├─steps | integer | да | |||
├─├─arts | object [] | да | сгенерированный массив изображений | item Type:object | |
├─├─├─id | string | да | id сгенерированного изображения | ||
├─├─├─images | object [] | да | массив разнообразных изображений | item Type:object | |
├─├─├─├─spec | string | да | variant type. o -> origin; 2x/3x/4x -> 2/3/4 scale image | ||
├─├─├─├─path | string | да | image path. domain to be concatenated | ||
├─├─├─├─size | integer | да | image size. unit: Byte | ||
├─domain | string | да | oss image domain |
Путь: /api/model/list
Метод: GET
Заголовки
Имя | Значение | Обязательно | Пример | Примечание |
---|---|---|---|---|
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Запрос
Имя | Обязательно | Пример | Примечание |
---|---|---|---|
pageIndex | да | start from 1 | |
pageSize | да | ||
type | нет | platform/community |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | integer | да | 0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─domain | string | да | oss domain | ||
├─total | integer | да | the total number of models filtered for paging | ||
├─models | object [] | да | item Type:object | ||
├─├─id | string | да | model ID | ||
├─├─name | string | да | model name | ||
├─├─username | string | да | model’s author name | ||
├─├─desc | string | да | описание модели | ||
├─├─cover | string | да | обложка модели | ||
├─├─isFavourite | boolean | да | предпочитает ли пользователь модель | ||
├─├─controlNet | boolean | да | whether the model supports ControlNet |
Путь: /api/job/upscale
Метод: POST
Заголовки
Имя | Значение | Обязательно | Пример | Примечание |
---|---|---|---|---|
Content-Type | application/json | да | ||
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Тело
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
model | string | нет | upscale model name | ||
RealESRGAN _x4plus / RealESRGAN_x4plus_anime_6B | |||||
imagePath | string | да | image path. domain to be concatenated | ||
upscaleFactor | integer | да | 2 <= factor <= 4 | ||
beauty | boolean | нет | whether to enable face enhancement | ||
artId | string | да | Need a super point picture artID |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | number | да | 0 -> success;1000 -> no enough credit | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─id | string | нет | upscale job id | ||
├─credit | integer | да | общий кредит пользователя | ||
├─consumedCredit | integer | да | consumed credit of the job |
Путь: /api/art/segment
Метод: POST
Заголовки
Имя | Значение | Обязательно | Пример | Примечание |
---|---|---|---|---|
Content-Type | application/json | да | ||
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Тело
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
image | string | да | image path. absolute/relative path |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | number | да | 0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─image | string | да | URL of the image after segmentating |
Путь: /api/user/profile
Метод: GET
Заголовки
Имя | Значение | Обязательно | Пример | Примечание |
---|---|---|---|---|
Content-Type | application/json | да | ||
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | number | да | 0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─name | string | да | |||
string | да | ||||
├─avatar | string | да | |||
├─phone | string | да | |||
├─credit | integer | да | общий кредит пользователя | ||
├─displayNSFW | boolean | да | |||
├─discord | boolean | да |
Путь: api/transform/list
Метод: GET
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | number | да | 0 -> успешно | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─domain | string | да | image oss domain name, need to concatenate the icon field below | ||
├─tags | string[] | да | template tag | ||
├─transform | object | да | |||
├─├─tag | object[] | да | |||
├─├─├─id | string | да | |||
├─├─├─name | string | да | |||
├─├─├─image | string | да | origin image | ||
├─├─├─art | string | да | result image | ||
├─├─├─cost | number | да | credit consume | ||
├─├─├─pro | boolean | да | is pro | ||
├─├─├─tag | string | да | tag |
Путь: api/transform/create-headshot
Метод: POST
Заголовки
Имя | Значение | Обязательно | Пример | Примечание |
---|---|---|---|---|
Content-Type | application/json | да | ||
Authorization | Bearer {YOUR KEY} | да | Bearer 37f333a2d5f811edb248acde48001122 |
Тело
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
imagePath | string | да | image path returned when called upload-image api | ||
transformId | string | да | |||
width | integer | нет | |||
height | integer | нет | |||
keepHair | boolean | нет | false | ||
keepPose | boolean | нет | true |
Имя | Тип | Обязательно | По умолчанию | Примечание | Другие |
---|---|---|---|---|---|
code | number | да | 0 -> success;1000 -> no enough credit | ||
info | string | нет | информация об ошибке | ||
data | object | да | |||
├─id | string | да | job ID | ||
├─credit | integer | да | общий кредит пользователя | ||
├─consumedCredit | integer | да | consumed credit of the job |