Ce document décrit comment utiliser le code pour obtenir les mêmes résultats que sur le web. Après le document ne donnera que l'adresse relative de l'API, vous devez vous regrouper au nom de domaine principal : https://api.aitubo.ai.
Par exemple, si vous souhaitez créer un travail, vous devez appeler https://api.aitubo.ai/api/job/create
Le document est divisé en deux sections, la première pour les exemples et la seconde pour l'API spécifique.
Cette section décrit comment créer un travail et en obtenir un. Notre API de création de travaux propose trois fonctions principales : Text2Image, Image2Image, and ControlNet(ControlNet est une structure de réseau neuronal permettant de contrôler les modèles de diffusion en ajoutant des conditions supplémentaires).
Quelle que soit la fonctionnalité que vous utilisez, vous devez d'abord obtenir une liste des modèles que nous prenons en charge, puis, lorsque vous créez le travail, vous devez transmettre le id champ des informations du modèle
curl --request GET \
--url 'https://api.aitubo.ai/api/model/list?type=platform' \
--header 'Authorization: Bearer ced695cfd83811eda5e286850d1dc848'
Le résultat ressemble à ceci :
{
"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"
}
Ensuite, vous obtiendrez une réponse comme celle-ci :
{
"code": 0,
"data": {
"consumedCredit": 40,
"credit": 120,
"id": "64351e4d567bcd86773dc841"
}
}
Vous pouvez vérifier l'état de la création de la tâche par sondage. Chaque photo prend environ 2 secondes, veuillez donc contrôler la fréquence de vos requêtes. Enfin, vous obtiendrez quelque chose comme ceci :
{
"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"
}
}
Pour utiliser Image2Image, vous pouvez appeler notre Télécharger une image API pour obtenir l'adresse relative OSS d'une image, ou vous pouvez donner une image avec une adresse absolue.
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
}'
Vous pouvez vérifier l'état de la création de la tâche par sondage, comme pour Text2Image.
Avant d'utiliser la fonction ControlNet, vous devez d'abord appeler l'API /job/model/list pour obtenir les catégories ControlNet correspondantes :
{
"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"
},
...
}
}
Appelez ensuite l'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"
}'
Vous pouvez également passer modelId champ(Assurez-vous que le modèle prend en charge 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"
}'
Chemin : /api/job/upload-image
Méthode : POST
En-têtes
Nom | Valeur | Obligatoire | Exemple |
---|---|---|---|
Content-Type | multipart/form-data | oui | |
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Corps
Nom | Valeur | Obligatoire |
---|---|---|
image | fichier | oui |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | integer | oui | code=0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | non | |||
├─path | string | non | chemin de l'image d'AliYun OSS |
Chemin : /api/job/create
Méthode : POST
En-têtes
Nom | Valeur | Obligatoire | Exemple |
---|---|---|---|
Content-Type | application/json | oui | |
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Corps
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
imagePath | string | non | chemin de l'image téléchargée (url/oss) | ||
maskImage | string | non | AI Editor doit passer ce champ | ||
modelId | string | non | si controlModel est nul, ce champ doit être rempli | ||
prompt | string | oui | invite | ||
negativePrompt | string | non | invite négative | ||
controlModel | string | non | canny / scribble / openpose / mlsd / hed / seg / depth / normal | ||
controlStrength | number | non | 1 | [0, 2] | |
controlFilter | string | non | preprecessor de l'image de contrôle, par exemple : openpose / openpose_full / openpose_hand / openpose_face / openpose_faceonly | ||
strength | number | non | 0.8 | [0.1, 1] | |
width | integer | non | 512 | ||
height | integer | non | 512 | ||
steps | integer | non | 30 | 10 <= value <= 50 | |
guidanceScale | integer | non | 7.5 | 0 < value <= 20 | |
count | integer | non | 4 | nombre d'images générées |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | number | oui | 0 -> succès ;1000 -> pas assez de crédit | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─id | string | oui | ID du travail | ||
├─credit | integer | oui | crédit total de l'utilisateur | ||
├─consumedCredit | integer | oui | crédit consommé du travail |
Chemin : /api/job/get
Méthode : GET
Requête
Nom | Obligatoire | Exemple | Remarque |
---|---|---|---|
id | oui | 642ba091592245d79a645b39 | ID du travail |
Nom | Type | Obligatoire | Default | Remarque | Others |
---|---|---|---|---|---|
code | integer | oui | 0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─id | string | oui | ID du travail | ||
├─createAt | string | oui | heure de création du travail | ||
├─status | integer | oui | statut du travail. 0 -> non prêt ; 1 -> traitement ; 2 -> succès ; 3 -> échec | ||
├─result | object | non | |||
├─├─info | string | non | |||
├─├─data | object | non | |||
├─├─├─images | string [] | non | Le chemin relatif résultant de l'image (doit être concaténé avec le champ de domaine) | item Type:string | |
├─├─├─artIds | string [] | non | Picture corresponding artID | item Type:string | |
├─├─├─domain | string | non | oss url, vous devez concaténer le chemin relatif de l'image | ||
├─args | object | non | |||
├─├─prompt | string | non | |||
├─├─negativePrompt | string | non | |||
├─├─model | string | non | |||
├─├─strength | integer | non | |||
├─├─width | integer | non | |||
├─├─height | integer | non |
Chemin : /api/job/models
Méthode : GET
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | integer | oui | 0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├domain | string | oui | nom de domaine oss de l'image, doit concaténer le champ d'icône ci-dessous | ||
├models | object [] | oui | item Type:object | ||
id | string | oui | ID du modèle, la valeur du paramètre controlModel est cet ID lors de la création d'un travail | ||
name | string | oui | Nom anglais | ||
cname | string | oui | Nom chinois | ||
icon | string | oui | image d'exemple. chemin relatif oss, vous devez concaténer les domaines |
Chemin : /api/job/list
Méthode : GET
En-têtes
Nom | Valeur | Obligatoire | Exemple | Remarque |
---|---|---|---|---|
Content-Type | application/json | oui | ||
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Query
Nom | Obligatoire | Exemple | Remarque |
---|---|---|---|
pageIndex | oui | commencer à partir de 1 | |
pageSize | oui |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | integer | oui | 0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─jobs | object [] | oui | tableau de travaux | item Type:object | |
├─├─id | string | oui | ID du travail | ||
├─├─createdAt | string | oui | |||
├─├─args | object | oui | |||
├─├─├─prompt | string | oui | |||
├─├─├─negativePrompt | string | oui | |||
├─├─├─strength | integer | oui | |||
├─├─├─width | integer | oui | |||
├─├─├─height | integer | oui | |||
├─├─├─count | integer | oui | |||
├─├─├─steps | integer | oui | |||
├─├─arts | object [] | oui | le tableau d'images générées | item Type:object | |
├─├─├─id | string | oui | l'identifiant de l'image générée | ||
├─├─├─images | object [] | oui | tableau d'images variées | item Type:object | |
├─├─├─├─spec | string | oui | type de variante. o -> origine ; 2x/3x/4x -> image à l'échelle 2/3/4 | ||
├─├─├─├─path | string | oui | chemin de l'image. domaine à concaténer | ||
├─├─├─├─size | integer | oui | taille de l'image. unité : octet | ||
├─domain | string | oui | domaine de l'image oss |
Chemin : /api/model/list
Méthode : GET
En-têtes
Nom | Valeur | Obligatoire | Exemple | Remarque |
---|---|---|---|---|
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Requête
Nom | Obligatoire | Exemple | Remarque |
---|---|---|---|
pageIndex | oui | commencer à partir de 1 | |
pageSize | oui | ||
type | non | platform/community |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | integer | oui | 0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─domain | string | oui | domaine oss | ||
├─total | integer | oui | le nombre total de modèles filtrés pour la pagination | ||
├─models | object [] | oui | item Type:object | ||
├─├─id | string | oui | ID du modèle | ||
├─├─name | string | oui | nom du modèle | ||
├─├─username | string | oui | model’s author name | ||
├─├─desc | string | oui | description du modèle | ||
├─├─cover | string | oui | couverture du modèle | ||
├─├─isFavourite | boolean | oui | si l'utilisateur favorise le modèle | ||
├─├─controlNet | boolean | oui | si le modèle prend en charge ControlNet |
Chemin : /api/job/upscale
Méthode : POST
En-têtes
Nom | Valeur | Obligatoire | Exemple | Remarque |
---|---|---|---|---|
Content-Type | application/json | oui | ||
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Corps
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
model | string | non | nom du modèle de mise à l'échelle | ||
RealESRGAN _x4plus / RealESRGAN_x4plus_anime_6B | |||||
imagePath | string | oui | chemin de l'image. domaine à concaténer | ||
upscaleFactor | integer | oui | 2 <= facteur <= 4 | ||
beauty | boolean | non | si l'amélioration du visage doit être activée | ||
artId | string | oui | Besoin d'un artID d'image super point |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | number | oui | 0 -> succès ;1000 -> pas assez de crédit | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─id | string | non | ID du travail de mise à l'échelle | ||
├─credit | integer | oui | crédit total de l'utilisateur | ||
├─consumedCredit | integer | oui | crédit consommé du travail |
Chemin : /api/art/segment
Méthode : POST
En-têtes
Nom | Valeur | Obligatoire | Exemple | Remarque |
---|---|---|---|---|
Content-Type | application/json | oui | ||
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Corps
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
image | string | oui | chemin de l'image. chemin absolu/relatif |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | number | oui | 0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─image | string | oui | URL de l'image après segmentation |
Chemin : /api/user/profile
Méthode : GET
En-têtes
Nom | Valeur | Obligatoire | Exemple | Remarque |
---|---|---|---|---|
Content-Type | application/json | oui | ||
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | number | oui | 0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─name | string | oui | |||
string | oui | ||||
├─avatar | string | oui | |||
├─phone | string | oui | |||
├─credit | integer | oui | crédit total de l'utilisateur | ||
├─displayNSFW | boolean | oui | |||
├─discord | boolean | oui |
Chemin : api/transform/list
Méthode : GET
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | number | oui | 0 -> succès | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─domain | string | oui | nom de domaine oss de l'image, doit concaténer le champ d'icône ci-dessous | ||
├─tags | string[] | oui | balise de modèle | ||
├─transform | object | oui | |||
├─├─tag | object[] | oui | |||
├─├─├─id | string | oui | |||
├─├─├─name | string | oui | |||
├─├─├─image | string | oui | image d'origine | ||
├─├─├─art | string | oui | image résultante | ||
├─├─├─cost | number | oui | consommation de crédit | ||
├─├─├─pro | boolean | oui | est pro | ||
├─├─├─tag | string | oui | balise |
Chemin : api/transform/create-headshot
Méthode : POST
En-têtes
Nom | Valeur | Obligatoire | Exemple | Remarque |
---|---|---|---|---|
Content-Type | application/json | oui | ||
Authorization | Bearer {YOUR KEY} | oui | Bearer 37f333a2d5f811edb248acde48001122 |
Corps
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
imagePath | string | oui | chemin de l'image renvoyé lors de l'appel upload-image api | ||
transformId | string | oui | |||
width | integer | non | |||
height | integer | non | |||
keepHair | boolean | non | false | ||
keepPose | boolean | non | true |
Nom | Type | Obligatoire | Par défaut | Remarque | Autres |
---|---|---|---|---|---|
code | number | oui | 0 -> succès ;1000 -> pas assez de crédit | ||
info | string | non | informations d'erreur | ||
data | object | oui | |||
├─id | string | oui | ID du travail | ||
├─credit | integer | oui | crédit total de l'utilisateur | ||
├─consumedCredit | integer | oui | crédit consommé du travail |