Este documento describe cómo usar el código para lograr los mismos resultados que en la web. Después del documento solo dará la dirección relativa de la API, necesita juntarlo con el nombre de dominio principal: https://api.aitubo.ai.
Por ejemplo, si desea crear un trabajo, debe llamar a https://api.aitubo.ai/api/job/create
El documento se divide en dos secciones, la primera para ejemplos y la segunda para la API específica.
Esta sección describe cómo crear un trabajo y obtener un trabajo. Nuestra API para crear trabajos proporciona tres funciones principales: Text2Image, Image2Image, and ControlNet(ControlNet es una estructura de red neuronal para controlar los modelos de difusión agregando condiciones adicionales).
Independientemente de cuál de las tres funciones use, primero debe obtener una lista de los modelos que admitimos, y luego, cuando cree el trabajo, debe pasar el id campo de la información del modelo
curl --request GET \
--url 'https://api.aitubo.ai/api/model/list?type=platform' \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848'
El resultado es algo como esto:
{
"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"
}
Luego, obtendrá una respuesta como esta:
{
"code": 0,
"data": {
"consumedCredit": 40,
"credit": 120,
"id": "64351e4d567bcd86773dc841"
}
}
Puede verificar el estado de la creación de la tarea mediante el sondeo. Cada foto tarda unos 2 segundos en completarse, así que controle la frecuencia de sus consultas. Finalmente, obtendrá algo como esto:
{
"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, puede llamar a nuestro Subir imagen API para obtener la dirección relativa de OSS de una imagen, o puede dar una imagen con una dirección absoluta.
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
}'
Puede verificar el estado de la creación de la tarea mediante el sondeo al igual que Text2Image.
Antes de usar la función ControlNet, primero debe llamar a la API /job/model/list para obtener las categorías de ControlNet correspondientes:
{
"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"
},
...
}
}
Luego llame a la 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"
}'
También puedes pasar modelId campo(Asegúrese de que el modelo sea compatible con 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"
}'
Ruta: /api/job/upload-image
Método: POST
Encabezados
Nombre | Valor | Requerido | Ejemplo |
---|---|---|---|
Content-Type | multipart/form-data | sí | |
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Cuerpo
Nombre | Valor | Requerido |
---|---|---|
image | archivo | sí |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | integer | sí | code=0 -> éxito | ||
info | string | no | información de error | ||
data | object | no | |||
├─path | string | no | ruta de la imagen de AliYun OSS |
Ruta: /api/job/create
Método: POST
Encabezados
Nombre | Valor | Requerido | Ejemplo |
---|---|---|---|
Content-Type | application/json | sí | |
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Cuerpo
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
imagePath | string | no | ruta de la imagen cargada (url/oss ambos) | ||
maskImage | string | no | AI Editor debe pasar este campo | ||
modelId | string | no | si controlModel es nulo, este campo debe estar lleno | ||
prompt | string | sí | indicación | ||
negativePrompt | string | no | indicación negativa | ||
controlModel | string | no | canny / scribble / openpose / mlsd / hed / seg / depth / normal | ||
controlStrength | number | no | 1 | [0, 2] | |
controlFilter | string | no | preprecessor de la imagen de control, por ejemplo: openpose / openpose_full / openpose_hand / openpose_face / openpose_faceonly | ||
strength | number | no | 0.8 | [0.1, 1] | |
width | integer | no | 512 | ||
height | integer | no | 512 | ||
steps | integer | no | 30 | 10 <= value <= 50 | |
guidanceScale | integer | no | 7.5 | 0 < value <= 20 | |
count | integer | no | 4 | recuento de imágenes generadas |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | number | sí | 0 -> éxito;1000 -> no hay suficiente crédito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─id | string | sí | ID del trabajo | ||
├─credit | integer | sí | crédito total del usuario | ||
├─consumedCredit | integer | sí | crédito consumido del trabajo |
Ruta: /api/job/get
Método: GET
Consulta
Nombre | Requerido | Ejemplo | Nota |
---|---|---|---|
id | sí | 642ba091592245d79a645b39 | ID del trabajo |
Nombre | Type | Requerido | Default | Nota | Others |
---|---|---|---|---|---|
code | integer | sí | 0 -> éxito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─id | string | sí | ID del trabajo | ||
├─createAt | string | sí | hora de creación del trabajo | ||
├─status | integer | sí | estado del trabajo. 0 -> no listo; 1 -> procesando; 2 -> éxito; 3 -> fallo | ||
├─result | object | no | |||
├─├─info | string | no | |||
├─├─data | object | no | |||
├─├─├─images | string [] | no | La ruta relativa resultante de la imagen (necesita ser concatenada con el campo de dominio) | item Type:string | |
├─├─├─artIds | string [] | no | Picture corresponding artID | item Type:string | |
├─├─├─domain | string | no | oss url, necesita concatenar la ruta relativa de la imagen | ||
├─args | object | no | |||
├─├─prompt | string | no | |||
├─├─negativePrompt | string | no | |||
├─├─model | string | no | |||
├─├─strength | integer | no | |||
├─├─width | integer | no | |||
├─├─height | integer | no |
Ruta: /api/job/models
Método: GET
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | integer | sí | 0 -> éxito | ||
info | string | no | información de error | ||
data | object | sí | |||
├domain | string | sí | nombre de dominio oss de la imagen, necesita concatenar el campo de icono a continuación | ||
├models | object [] | sí | item Type:object | ||
id | string | sí | id del modelo, el valor del parámetro controlModel es este ID al crear un trabajo | ||
name | string | sí | Nombre en inglés | ||
cname | string | sí | Nombre en chino | ||
icon | string | sí | imagen de muestra. ruta relativa de oss, necesita concatenar dominios |
Ruta: /api/job/list
Método: GET
Encabezados
Nombre | Valor | Requerido | Ejemplo | Nota |
---|---|---|---|---|
Content-Type | application/json | sí | ||
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Query
Nombre | Requerido | Ejemplo | Nota |
---|---|---|---|
pageIndex | sí | comenzar desde 1 | |
pageSize | sí |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | integer | sí | 0 -> éxito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─jobs | object [] | sí | matriz de trabajos | item Type:object | |
├─├─id | string | sí | ID del trabajo | ||
├─├─createdAt | string | sí | |||
├─├─args | object | sí | |||
├─├─├─prompt | string | sí | |||
├─├─├─negativePrompt | string | sí | |||
├─├─├─strength | integer | sí | |||
├─├─├─width | integer | sí | |||
├─├─├─height | integer | sí | |||
├─├─├─count | integer | sí | |||
├─├─├─steps | integer | sí | |||
├─├─arts | object [] | sí | la matriz generada de imágenes | item Type:object | |
├─├─├─id | string | sí | el id de la imagen generada | ||
├─├─├─images | object [] | sí | matriz de imágenes variadas | item Type:object | |
├─├─├─├─spec | string | sí | tipo de variante. o -> origen; 2x/3x/4x -> imagen de escala 2/3/4 | ||
├─├─├─├─path | string | sí | ruta de la imagen. dominio a concatenar | ||
├─├─├─├─size | integer | sí | tamaño de la imagen. unidad: Byte | ||
├─domain | string | sí | dominio de la imagen oss |
Ruta: /api/model/list
Método: GET
Encabezados
Nombre | Valor | Requerido | Ejemplo | Nota |
---|---|---|---|---|
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Consulta
Nombre | Requerido | Ejemplo | Nota |
---|---|---|---|
pageIndex | sí | comenzar desde 1 | |
pageSize | sí | ||
type | no | platform/community |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | integer | sí | 0 -> éxito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─domain | string | sí | dominio oss | ||
├─total | integer | sí | el número total de modelos filtrados para la paginación | ||
├─models | object [] | sí | item Type:object | ||
├─├─id | string | sí | ID del modelo | ||
├─├─name | string | sí | nombre del modelo | ||
├─├─username | string | sí | model’s author name | ||
├─├─desc | string | sí | descripción del modelo | ||
├─├─cover | string | sí | portada del modelo | ||
├─├─isFavourite | boolean | sí | ¿el usuario prefiere el modelo? | ||
├─├─controlNet | boolean | sí | ¿el modelo es compatible con ControlNet? |
Ruta: /api/job/upscale
Método: POST
Encabezados
Nombre | Valor | Requerido | Ejemplo | Nota |
---|---|---|---|---|
Content-Type | application/json | sí | ||
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Cuerpo
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
model | string | no | nombre del modelo de ampliación | ||
RealESRGAN _x4plus / RealESRGAN_x4plus_anime_6B | |||||
imagePath | string | sí | ruta de la imagen. dominio a concatenar | ||
upscaleFactor | integer | sí | 2 <= factor <= 4 | ||
beauty | boolean | no | ¿habilitar la mejora facial? | ||
artId | string | sí | Necesita un artID de imagen de súper punto |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | number | sí | 0 -> éxito;1000 -> no hay suficiente crédito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─id | string | no | id del trabajo de ampliación | ||
├─credit | integer | sí | crédito total del usuario | ||
├─consumedCredit | integer | sí | crédito consumido del trabajo |
Ruta: /api/art/segment
Método: POST
Encabezados
Nombre | Valor | Requerido | Ejemplo | Nota |
---|---|---|---|---|
Content-Type | application/json | sí | ||
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Cuerpo
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
image | string | sí | ruta de la imagen. ruta absoluta/relativa |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | number | sí | 0 -> éxito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─image | string | sí | URL de la imagen después de la segmentación |
Ruta: /api/user/profile
Método: GET
Encabezados
Nombre | Valor | Requerido | Ejemplo | Nota |
---|---|---|---|---|
Content-Type | application/json | sí | ||
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | number | sí | 0 -> éxito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─name | string | sí | |||
string | sí | ||||
├─avatar | string | sí | |||
├─phone | string | sí | |||
├─credit | integer | sí | crédito total del usuario | ||
├─displayNSFW | boolean | sí | |||
├─discord | boolean | sí |
Ruta: api/transform/list
Método: GET
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | number | sí | 0 -> éxito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─domain | string | sí | nombre de dominio oss de la imagen, necesita concatenar el campo de icono a continuación | ||
├─tags | string[] | sí | etiqueta de plantilla | ||
├─transform | object | sí | |||
├─├─tag | object[] | sí | |||
├─├─├─id | string | sí | |||
├─├─├─name | string | sí | |||
├─├─├─image | string | sí | imagen original | ||
├─├─├─art | string | sí | imagen de resultado | ||
├─├─├─cost | number | sí | consumo de crédito | ||
├─├─├─pro | boolean | sí | ¿es pro? | ||
├─├─├─tag | string | sí | etiqueta |
Ruta: api/transform/create-headshot
Método: POST
Encabezados
Nombre | Valor | Requerido | Ejemplo | Nota |
---|---|---|---|---|
Content-Type | application/json | sí | ||
Authorization | Bearer {YOUR KEY} | sí | Bearer 37f333a2d5f811edb248acde48001122 |
Cuerpo
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
imagePath | string | sí | ruta de la imagen devuelta cuando se llama api de carga de imágenes | ||
transformId | string | sí | |||
width | integer | no | |||
height | integer | no | |||
keepHair | boolean | no | false | ||
keepPose | boolean | no | true |
Nombre | Tipo | Requerido | Predeterminado | Nota | Otros |
---|---|---|---|---|---|
code | number | sí | 0 -> éxito;1000 -> no hay suficiente crédito | ||
info | string | no | información de error | ||
data | object | sí | |||
├─id | string | sí | ID del trabajo | ||
├─credit | integer | sí | crédito total del usuario | ||
├─consumedCredit | integer | sí | crédito consumido del trabajo |