Skip to main content
Midjourney est un outil de dessin AI très puissant, il suffit d’entrer des mots-clés pour générer en quelques minutes des images très raffinées. Midjourney se distingue dans l’industrie par ses capacités de dessin exceptionnelles, et aujourd’hui, il est largement utilisé dans divers secteurs et domaines, son influence devenant de plus en plus significative. Ce document présente principalement le processus d’utilisation de l’opération Imagine dans l’API Midjourney, grâce à laquelle nous pouvons facilement générer les images souhaitées à partir de texte.

Processus de demande

Pour utiliser l’API Midjourney Imagine, commencez par obtenir votre API Token sur le tableau de bord Ace Data Cloud pour le garder en réserve. Si vous n’êtes pas encore connecté ou inscrit, vous serez automatiquement redirigé vers la page de connexion pour vous inviter à vous inscrire et à vous connecter, après quoi vous serez automatiquement renvoyé à la page actuelle. Un seul API Token suffit pour appeler tous les services de la plateforme, sans avoir besoin de demander séparément pour chaque service. La première demande vous donnera un quota gratuit pour une expérience sans frais ; lorsque le quota est insuffisant, vous pouvez recharger le solde général dans le tableau de bord.
📘 Documentation complète : Midjourney Imagine API →

Utilisation de base

Ensuite, vous pouvez remplir le contenu correspondant sur l’interface, comme indiqué sur l’image : Lors de la première utilisation de cette interface, nous devons remplir au moins deux contenus, l’un est authorization, que vous pouvez sélectionner directement dans la liste déroulante. L’autre paramètre est prompt, prompt est la description de l’image que nous souhaitons générer, il est conseillé de décrire en anglais, l’image sera plus précise et le résultat meilleur, ici nous avons utilisé le contenu d’exemple Lamborghini speeds inside a volcano, représentant un Lamborghini courant à l’intérieur d’un volcan. Vous pouvez également remarquer qu’il y a un code d’appel correspondant généré à droite, vous pouvez copier le code pour l’exécuter directement, ou cliquer sur le bouton « Essayer » pour effectuer un test. Paramètres de requête principaux :
  • prompt : mot de description de l’image (supporte la traduction automatique).
  • mode : mode de génération, options fast/relax/turbo, par défaut fast. V8.1 ne supporte que fast et relax.
  • version : version du modèle. V8.1 utilise des résolutions SD/HD, ne supporte pas le paramètre quality ; SD consomme environ 0,8 minute GPU, HD environ 1,3 minute GPU.
  • timeout : temps d’attente (secondes), un dépassement de temps renverra directement.
  • translation : si la traduction automatique des prompts non anglais est activée.
  • split_images : si les résultats 2x2 doivent être renvoyés sous forme d’images individuelles.
  • action/image_id : à spécifier lors de l’opération sur des images historiques.
  • callback_url : adresse de rappel asynchrone.
  • async : optionnel, si défini sur true, l’interface renvoie immédiatement task_id, sans avoir besoin de fournir callback_url, puis interrogez l’interface de requête de tâche correspondante pour obtenir les résultats.

Après l’appel, nous constatons que le résultat renvoyé est le suivant :
Le résultat renvoyé contient plusieurs champs, décrits comme suit :
  • task_id, l’ID de la tâche de génération de cette image, utilisé pour identifier de manière unique cette tâche de génération d’image.
  • image_id, l’identifiant unique de l’image, nécessaire pour effectuer des opérations de transformation sur l’image lors de la prochaine fois.
  • image_url, l’URL de la miniature, que vous pouvez ouvrir directement pour voir le résultat généré.
  • image_width : largeur en pixels de la miniature.
  • image_height : hauteur en pixels de la miniature.
  • raw_image_url : l’URL de l’image originale, qui est identique au contenu de la miniature, mais plus haute définition, le temps de chargement sera un peu plus long.
  • raw_image_width : largeur en pixels de l’image originale.
  • raw_image_height : hauteur en pixels de l’image originale.
  • actions, liste des opérations supplémentaires que vous pouvez effectuer sur l’image générée. Ici, il y a un total de 8, où upscale représente l’agrandissement, variation représente la transformation. Ainsi, upscale1 représente l’agrandissement de la première image en haut à gauche, variation3 représente la transformation basée sur la troisième image en bas à gauche.
En ouvrant le lien correspondant à image_url ou raw_image_url, vous pouvez voir comme indiqué sur l’image. On peut voir qu’une image de prévisualisation 2x2 a été générée ici. Jusqu’à présent, le premier appel API est terminé.

Agrandissement et transformation d’image

Ensuite, nous allons essayer d’effectuer des opérations supplémentaires sur la photo générée actuellement, par exemple, si nous pensons que la deuxième image en haut à droite est assez bonne, mais que nous souhaitons effectuer quelques ajustements, nous pouvons alors remplir action avec variation2, tout en transmettant image_id : Le résultat obtenu est le suivant :
Ouvrez image_url, l’image nouvellement générée est comme suit : On peut voir qu’en ce qui concerne l’image en haut à droite, nous avons à nouveau obtenu quatre photos similaires. À ce moment-là, nous pouvons choisir l’une d’elles pour effectuer une opération de mise à l’échelle plus précise, par exemple, si nous choisissons la quatrième, nous pouvons alors transmettre action avec upscale4, en passant à nouveau l’ID de l’image actuelle via image_id.
Remarque : l’opération upscale prend moins de temps que variation dans Midjourney.
Le résultat retourné est comme suit :
L’image_url est comme montré ci-dessous : Ainsi, nous avons réussi à obtenir une photo de Lamborghini. Il est également à noter que actions contient plusieurs opérations possibles, décrites comme suit :
  • upscale_2x : agrandir l’image de 2 fois, obtenant une image haute définition 2 fois plus grande.
  • upscale_4x : agrandir l’image de 4 fois, obtenant une image haute définition 4 fois plus grande.
  • zoom_out_2x : réduire l’image de deux fois (remplissage des zones environnantes).
  • zoom_out_1_5x : réduire l’image de 1,5 fois (remplissage des zones environnantes).
  • pan_left : décaler l’image vers la gauche.
  • pan_right : décaler l’image vers la droite.
  • pan_up : décaler l’image vers le haut.
  • pan_down : décaler l’image vers le bas.
Vous pouvez continuer à transmettre les instructions de transformation correspondantes pour effectuer des opérations d’image continues.

Réécriture d’image (Image de base)

Cette API prend également en charge la réécriture d’image, communément appelée image de base. Nous pouvons entrer une URL d’image ainsi qu’un texte descriptif à réécrire, et cette API peut retourner l’image réécrite.
Remarque : l’URL de l’image entrée doit être une image pure, ne peut pas être une image affichée dans une page web, sinon la réécriture d’image ne pourra pas être effectuée. Il est conseillé d’utiliser un hébergement d’images pour télécharger et obtenir l’URL de l’image.
Par exemple, nous avons ici une image de coucher de soleil sur une route, avec quelques arbres et bâtiments à côté de la route, comme montré ci-dessous : Maintenant, nous voulons la modifier pour qu’elle soit à côté d’une plage, avec une voiture garée sur le bord de la route. Nous pouvons donc construire le prompt suivant :
On peut voir que le début de notre prompt est un lien d’image commençant par HTTPS, suivi d’un espace, puis du contenu du texte du prompt. Ici, nous avons également utilisé quelques paramètres avancés supplémentaires, comme —iw 2 pour ajuster le poids de l’image. Nous pouvons transmettre le contenu ci-dessus comme un tout, dans le champ prompt, comme montré ci-dessous : Le résultat de sortie est comme suit :
À ce moment-là, nous avons obtenu l’image générée suivante : On peut voir que, tout en maintenant le style et la composition globaux de l’image d’origine, la scène entière est devenue à côté de la plage, tandis qu’une voiture est également apparue sur la route, c’est ce qu’on appelle le Prompt avec Image.

Fusion d’images

Cette API prend également en charge la fusion d’images, nous pouvons transmettre plusieurs images pour réaliser différents effets de fusion d’images. Par exemple, ici nous avons deux images, l’une est un ours en peluche, l’autre est une tronçonneuse, comme indiqué ci-dessous :

Maintenant, nous voulons fusionner les deux pour que cet ours tienne cette tronçonneuse, comment faire ? Nous pouvons construire le prompt suivant :
On peut constater que, comme pour l’Image avec Prompt, nous avons placé plusieurs URL d’images au début du prompt, séparées par des espaces, puis ajouté le texte du prompt, en transmettant le contenu ci-dessus comme un tout au paramètre prompt, le résultat est le suivant :
Nous avons donc obtenu le résultat suivant : On peut voir que nous avons réussi à réaliser la fusion d’images.
Remarque : La fusion d’images peut prendre en charge jusqu’à 5 URL d’images en entrée, c’est-à-dire qu’elle prend en charge la fusion de jusqu’à 5 images, le format d’entrée est le même que ci-dessus.

Transformation locale

Cette API prend également en charge la fonction de dessin local d’images, mais ne prend en charge que la génération d’images sous le contenu mentionné ci-dessus, nous pouvons transmettre l’ID unique d’une image générée, le paramètre d’action de redessin local action ainsi que le masque de la zone à redessiner pour réaliser le redessin dans la zone de ce masque. Par exemple, ici nous avons une image générée d’un chat :

Maintenant, nous voulons redessiner ce visage de chat, comment faire ? Tout d’abord, nous devons obtenir le masque de cette zone, ce masque est obtenu par l’encodage en Base64 d’une image en niveaux de gris, ci-dessous quelques outils de code pour obtenir le masque : Exemple de code Python pour obtenir le masque :
Grâce au code ci-dessus, nous pouvons obtenir une image de masque. Dans ce processus, nous devons noter que l’image de masque doit avoir la même taille que l’image d’origine, puis la zone blanche de l’image de masque est la zone à redessiner. Voici une comparaison entre l’image de masque à redessiner et l’image d’origine : Image d’origine :

Image de masque :

Enfin, nous devons également convertir l’image de masque en un encodage basé sur Base64. Voici le code pour convertir en Base64 : Exemple de code Python pour convertir en Base64 :
Remarque : Le code Python ci-dessus décrit le processus de génération du masque. Si vous souhaitez l’intégrer à votre produit, veuillez écrire le code correspondant dans le langage de votre choix en fonction de son principe.
Avec le code ci-dessus, nous avons obtenu le masque à redessiner. Ensuite, nous devons définir le paramètre action sur variation_region, générer l’ID de l’image image_id (pour obtenir ce paramètre, référez-vous au contenu ci-dessus), et passer le masque correspondant mask. Les autres informations de paramètre sont les suivantes :
  • action : le comportement d’opération sur l’image, ici variation_region, indiquant un redessin partiel de l’image.
  • prompt : le terme descriptif pour le redessin partiel de l’image (paramètre optionnel).
  • image_id : l’identifiant unique de l’image, facilitant le redessin partiel de l’image.
  • mask : l’encodage base64 de la zone de masque correspondante à l’image (l’image est celle spécifiée par l’image_id ci-dessus).
Ainsi, selon les règles ci-dessus, nous devons définir correctement les paramètres. Le paramètre prompt est un paramètre non obligatoire, ici pour faciliter la comparaison, le prompt de la zone de masque est défini sur Un chat mignon, les paramètres sont configurés comme indiqué ci-dessous :

Exemple de code

On peut constater que, sur le côté droit de la page, divers langages de code ont déjà été générés automatiquement, comme le montre l’image :

Voici un extrait de code :

Exemple de réponse

Après un succès de la requête, l’API renverra des informations sur le résultat de l’image de fond d’échange. Par exemple :
On peut constater que l’image de la zone de masque a été redessinée, et le résultat est cohérent avec ce qui a été mentionné ci-dessus, comme le montre l’image ci-dessous : Nous avons réussi à réaliser un redessin partiel de la zone personnalisée de l’image générée.

CURL

Callback asynchrone

Étant donné que la génération d’images par Midjourney nécessite d’attendre un certain temps, cette API est également conçue par défaut pour un mode d’attente prolongée. Cependant, dans certains scénarios, une attente prolongée peut entraîner des coûts supplémentaires en ressources, c’est pourquoi cette API propose également un moyen de rappel Webhook asynchrone. Lorsque la génération d’images réussit ou échoue, son résultat est envoyé via une requête HTTP à l’URL de rappel Webhook spécifiée. Une fois que l’URL de rappel reçoit le résultat, elle peut procéder à un traitement supplémentaire. Voici une démonstration du processus d’appel spécifique. Tout d’abord, le rappel Webhook est un service capable de recevoir des requêtes HTTP, les développeurs doivent le remplacer par l’URL de leur propre serveur HTTP. Pour des raisons de démonstration, nous utilisons un site Web de modèle Webhook public https://webhook.site/, en ouvrant ce site, vous obtiendrez une URL Webhook, comme illustré ci-dessous : Copiez cette URL, vous pouvez l’utiliser comme Webhook, l’exemple ici est https://webhook.site/995d0a91-d737-40a7-a3b9-5baf68ed924c. Ensuite, nous pouvons définir le champ callback_url sur l’URL Webhook ci-dessus, tout en remplissant prompt, comme illustré ci-dessous : Après avoir cliqué sur tester, vous recevrez immédiatement une réponse task_id, qui sert à identifier l’ID de la tâche de génération actuelle, comme illustré ci-dessous :

Après un moment, lorsque la génération d’images est terminée, vous pouvez constater que l’URL Webhook a reçu une requête HTTP, comme illustré ci-dessous : Le résultat est celui de la tâche actuelle, le contenu est le suivant :
Le champ success indique si la tâche a été exécutée avec succès. Si elle a été exécutée avec succès, il y aura également les mêmes champs actions, image_id, image_url, et le résultat de retour est identique à celui décrit ci-dessus, en plus du task_id utilisé pour identifier la tâche, afin de relier le résultat du Webhook à la demande API initiale. Si la génération d’images échoue, l’URL Webhook recevra un contenu similaire à celui-ci :
Ici, le champ success sera false, et il y aura également les champs error.code et error.message décrivant les détails de l’erreur de la tâche, le serveur Webhook peut traiter en fonction des résultats correspondants.

Sortie en continu

Midjourney a un progrès lors de la génération d’images, au début, il s’agit d’une photo floue, puis après plusieurs itérations, l’image devient progressivement claire, et enfin, une image complète est obtenue. Ainsi, le processus de génération d’une image peut être divisé en trois étapes : « Envoi de la commande » -> « Début de la génération d’images (plusieurs itérations progressivement claires) » -> « Génération d’images terminée ». Sans sortie en continu activée, cette API, depuis l’envoi de la demande jusqu’au retour du résultat, couvre en réalité tout le processus de « Envoi de la commande » -> « Génération d’images terminée », le processus de génération d’images est également inclus, et comme Midjourney lui-même génère des images lentement, l’ensemble du processus nécessite environ une minute ou plus. Ainsi, pour une meilleure expérience utilisateur, cette API prend en charge la sortie en continu, c’est-à-dire qu’au moment où « la génération d’images commence », elle commence à renvoyer des résultats, chaque fois que le progrès du dessin change, les résultats seront diffusés jusqu’à la fin de la génération d’images. Si vous souhaitez renvoyer des réponses en continu, vous pouvez modifier le paramètre accept dans l’en-tête de la requête, en le changeant en application/x-ndjson, mais le code d’appel doit également être modifié pour prendre en charge la réponse en continu. Exemple de code Python :
Résultat de l’exécution :
On peut voir qu’après avoir activé la sortie en continu, le résultat retourné est un JSON ligne par ligne. Dans un environnement Node.js, le code peut être écrit comme suit :
Les résultats de ces exemples sont tous similaires. Veuillez noter que dans les résultats de sortie en continu, il y a un champ appelé progress, qui indique le progrès de la génération, allant de 0 à 100. Si nécessaire, vous pouvez afficher ces informations sur la page.
Remarque : lorsque la génération n’est pas complètement terminée, le champ actions est vide, ce qui signifie qu’aucune opération de traitement supplémentaire ne peut être effectuée sur l’image intermédiaire. Une fois la génération terminée, l’URL de l’image générée pendant le processus sera détruite.
De plus, vous pouvez combiner les résultats en continu avec un rappel asynchrone en spécifiant l’en-tête accept=application/x-ndjson et le corps de la requête callback_url, puis callback_url peut recevoir plusieurs requêtes POST de résultats en continu.