Este documento descreve como usar o código para obter os mesmos resultados que na web. Após o documento, fornecerá apenas o endereço relativo da API, você precisa juntar ao nome de domínio principal: https://api.aitubo.ai.
Por exemplo, se você deseja criar um trabalho, precisa chamar https://api.aitubo.ai/api/job/create
O documento é dividido em duas seções, a primeira para exemplos e a segunda para API específica.
Esta seção descreve como criar um trabalho e obter um trabalho. Nossa API para criar trabalhos fornece três funções principais: Text2Image, Image2Image, and ControlNet(ControlNet é uma estrutura de rede neural para controlar modelos de difusão adicionando condições extras).
Independentemente de qual dos três recursos você usar, primeiro você precisa obter uma lista dos modelos que suportamos e, em seguida, ao criar o trabalho, você precisa passar o id campo da informação do modelo
curl --request GET \
--url 'https://api.aitubo.ai/api/model/list?type=platform' \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848'
O resultado é algo assim:
{
"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"
}
Então, você receberá uma resposta assim:
{
"code": 0,
"data": {
"consumedCredit": 40,
"credit": 120,
"id": "64351e4d567bcd86773dc841"
}
}
Você pode verificar o status da criação da tarefa por meio de sondagem. Cada foto leva cerca de 2 segundos para ser concluída, portanto, controle a frequência de suas consultas. Finalmente, você obterá assim:
{
"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"
}
}
Para usar Image2Image, você pode chamar nosso Carregar imagem API para obter o endereço relativo OSS de uma imagem, ou você pode fornecer uma imagem com um endereço absoluto.
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
}'
Você pode verificar o status da criação da tarefa por meio de sondagem, assim como o Text2Image.
Antes de usar a função ControlNet, você deve primeiro chamar a API /job/model/list para obter as categorias ControlNet correspondentes:
{
"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"
},
...
}
}
Em seguida, chame a 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"
}'
Você também pode passar modelId campo(Certifique-se de que o modelo suporta 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"
}'
Caminho: /api/job/upload-image
Método: POST
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo |
---|---|---|---|
Content-Type | multipart/form-data | sim | |
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Corpo
Nome | Valor | Obrigatório |
---|---|---|
image | arquivo | sim |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | integer | sim | code=0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | não | |||
├─path | string | não | caminho da imagem do AliYun OSS |
Caminho: /api/job/create
Método: POST
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo |
---|---|---|---|
Content-Type | application/json | sim | |
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Corpo
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
imagePath | string | não | caminho da imagem carregada (url/oss ambos) | ||
maskImage | string | não | O Editor de IA deve passar este campo | ||
modelId | string | não | se controlModel for nulo, este campo deve ser preenchido | ||
prompt | string | sim | prompt | ||
negativePrompt | string | não | prompt negativo | ||
controlModel | string | não | canny / scribble / openpose / mlsd / hed / seg / depth / normal | ||
controlStrength | number | não | 1 | [0, 2] | |
controlFilter | string | não | preprecessor of control image, for example: openpose / openpose_full / openpose_hand / openpose_face / openpose_faceonly | ||
strength | number | não | 0.8 | [0.1, 1] | |
width | integer | não | 512 | ||
height | integer | não | 512 | ||
steps | integer | não | 30 | 10 <= value <= 50 | |
guidanceScale | integer | não | 7.5 | 0 < value <= 20 | |
count | integer | não | 4 | contagem de imagens geradas |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | number | sim | 0 -> sucesso;1000 -> crédito insuficiente | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─id | string | sim | ID do trabalho | ||
├─credit | integer | sim | crédito total do usuário | ||
├─consumedCredit | integer | sim | crédito consumido do trabalho |
Caminho: /api/job/get
Método: GET
Consulta
Nome | Obrigatório | Exemplo | Observação |
---|---|---|---|
id | sim | 642ba091592245d79a645b39 | ID do trabalho |
Nome | Type | Obrigatório | Default | Observação | Others |
---|---|---|---|---|---|
code | integer | sim | 0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─id | string | sim | ID do trabalho | ||
├─createAt | string | sim | tempo de criação do trabalho | ||
├─status | integer | sim | status do trabalho. 0 -> não pronto; 1 -> processando; 2 -> sucesso; 3 -> falha | ||
├─result | object | não | |||
├─├─info | string | não | |||
├─├─data | object | não | |||
├─├─├─images | string [] | não | O caminho relativo resultante da imagem (precisa ser concatenado com o campo de domínio) | item Type:string | |
├─├─├─artIds | string [] | não | Picture corresponding artID | item Type:string | |
├─├─├─domain | string | não | oss url, you need to concatenate the relative path of the picture | ||
├─args | object | não | |||
├─├─prompt | string | não | |||
├─├─negativePrompt | string | não | |||
├─├─model | string | não | |||
├─├─strength | integer | não | |||
├─├─width | integer | não | |||
├─├─height | integer | não |
Caminho: /api/job/models
Método: GET
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | integer | sim | 0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├domain | string | sim | nome de domínio oss da imagem, precisa concatenar o campo de ícone abaixo | ||
├models | object [] | sim | item Type:object | ||
id | string | sim | ID do modelo, o valor do parâmetro controlModel é este ID ao criar um trabalho | ||
name | string | sim | Nome em inglês | ||
cname | string | sim | Nome em chinês | ||
icon | string | sim | imagem de amostra. caminho relativo oss, você precisa concatenar domínios |
Caminho: /api/job/list
Método: GET
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo | Observação |
---|---|---|---|---|
Content-Type | application/json | sim | ||
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Query
Nome | Obrigatório | Exemplo | Observação |
---|---|---|---|
pageIndex | sim | começar de 1 | |
pageSize | sim |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | integer | sim | 0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─jobs | object [] | sim | matriz de trabalho | item Type:object | |
├─├─id | string | sim | ID do trabalho | ||
├─├─createdAt | string | sim | |||
├─├─args | object | sim | |||
├─├─├─prompt | string | sim | |||
├─├─├─negativePrompt | string | sim | |||
├─├─├─strength | integer | sim | |||
├─├─├─width | integer | sim | |||
├─├─├─height | integer | sim | |||
├─├─├─count | integer | sim | |||
├─├─├─steps | integer | sim | |||
├─├─arts | object [] | sim | a matriz de imagens geradas | item Type:object | |
├─├─├─id | string | sim | o id da imagem gerada | ||
├─├─├─images | object [] | sim | matriz de imagens variadas | item Type:object | |
├─├─├─├─spec | string | sim | tipo de variante. o -> origem; 2x/3x/4x -> imagem de escala 2/3/4 | ||
├─├─├─├─path | string | sim | caminho da imagem. domínio a ser concatenado | ||
├─├─├─├─size | integer | sim | tamanho da imagem. unidade: Byte | ||
├─domain | string | sim | domínio da imagem oss |
Caminho: /api/model/list
Método: GET
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo | Observação |
---|---|---|---|---|
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Consulta
Nome | Obrigatório | Exemplo | Observação |
---|---|---|---|
pageIndex | sim | começar de 1 | |
pageSize | sim | ||
type | não | platform/community |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | integer | sim | 0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─domain | string | sim | domínio oss | ||
├─total | integer | sim | o número total de modelos filtrados para paginação | ||
├─models | object [] | sim | item Type:object | ||
├─├─id | string | sim | ID do modelo | ||
├─├─name | string | sim | nome do modelo | ||
├─├─username | string | sim | model’s author name | ||
├─├─desc | string | sim | descrição do modelo | ||
├─├─cover | string | sim | capa do modelo | ||
├─├─isFavourite | boolean | sim | se o usuário favorita o modelo | ||
├─├─controlNet | boolean | sim | se o modelo suporta ControlNet |
Caminho: /api/job/upscale
Método: POST
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo | Observação |
---|---|---|---|---|
Content-Type | application/json | sim | ||
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Corpo
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
model | string | não | nome do modelo de upscale | ||
RealESRGAN _x4plus / RealESRGAN_x4plus_anime_6B | |||||
imagePath | string | sim | caminho da imagem. domínio a ser concatenado | ||
upscaleFactor | integer | sim | 2 <= fator <= 4 | ||
beauty | boolean | não | se deve ativar o aprimoramento facial | ||
artId | string | sim | Precisa de um artID de imagem de super ponto |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | number | sim | 0 -> sucesso;1000 -> crédito insuficiente | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─id | string | não | ID do trabalho de upscale | ||
├─credit | integer | sim | crédito total do usuário | ||
├─consumedCredit | integer | sim | crédito consumido do trabalho |
Caminho: /api/art/segment
Método: POST
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo | Observação |
---|---|---|---|---|
Content-Type | application/json | sim | ||
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Corpo
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
image | string | sim | caminho da imagem. caminho absoluto/relativo |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | number | sim | 0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─image | string | sim | URL da imagem após a segmentação |
Caminho: /api/user/profile
Método: GET
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo | Observação |
---|---|---|---|---|
Content-Type | application/json | sim | ||
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | number | sim | 0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─name | string | sim | |||
string | sim | ||||
├─avatar | string | sim | |||
├─phone | string | sim | |||
├─credit | integer | sim | crédito total do usuário | ||
├─displayNSFW | boolean | sim | |||
├─discord | boolean | sim |
Caminho: api/transform/list
Método: GET
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | number | sim | 0 -> sucesso | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─domain | string | sim | nome de domínio oss da imagem, precisa concatenar o campo de ícone abaixo | ||
├─tags | string[] | sim | tag do modelo | ||
├─transform | object | sim | |||
├─├─tag | object[] | sim | |||
├─├─├─id | string | sim | |||
├─├─├─name | string | sim | |||
├─├─├─image | string | sim | imagem original | ||
├─├─├─art | string | sim | imagem resultante | ||
├─├─├─cost | number | sim | consumo de crédito | ||
├─├─├─pro | boolean | sim | é pro | ||
├─├─├─tag | string | sim | tag |
Caminho: api/transform/create-headshot
Método: POST
Cabeçalhos
Nome | Valor | Obrigatório | Exemplo | Observação |
---|---|---|---|---|
Content-Type | application/json | sim | ||
Authorization | Bearer {YOUR KEY} | sim | Bearer 37f333a2d5f811edb248acde48001122 |
Corpo
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
imagePath | string | sim | caminho da imagem retornado quando chamado api de upload de imagem | ||
transformId | string | sim | |||
width | integer | não | |||
height | integer | não | |||
keepHair | boolean | não | false | ||
keepPose | boolean | não | true |
Nome | Tipo | Obrigatório | Padrão | Observação | Outros |
---|---|---|---|---|---|
code | number | sim | 0 -> sucesso;1000 -> crédito insuficiente | ||
info | string | não | informações de erro | ||
data | object | sim | |||
├─id | string | sim | ID do trabalho | ||
├─credit | integer | sim | crédito total do usuário | ||
├─consumedCredit | integer | sim | crédito consumido do trabalho |