Format d'image de mi-parcours (Midjourney Proxy/Midjourney Proxy Plus)
Veuillez noter
Cette interface n'est pas une interface officielle de Midjourney, mais plutôt un Interface proxy Midjourney implémentée sur la base du projet open source midjourney-proxy by author novicezk.
Ce projet est divisé en deux versions, toutes deux adaptées par 88API:
-
Version Open Source midjourney-proxy
-
Version payante midjourney-proxy-plus
Nous sommes très reconnaissants pour la contribution de l'auteur, qui nous permet d'utiliser facilement les puissantes fonctionnalités de Midjourney. Si vous avez le temps, merci de donner une étoile à l'auteur. Si vous en avez la possibilité, nous vous recommandons de prendre en charge la version payante de l'auteur, qui prend en charge plus de fonctionnalités.
| Catégorie de fonctionnalités | Ouvert | Version payante |
|---|---|---|
| Fonctionnalités de base | ||
| Imaginez les commandes et les actions associées | ✓ | ✓ |
| Prise en charge du remplissage d'image | ✓ | ✓ |
| Mélange (Mélange d'images) | ✓ | ✓ |
| Décrire (image en texte) | ✓ | ✓ |
| Progression des tâches en temps réel | ✓ | ✓ |
| Traduction invite chinoise | ✓ | ✓ |
| Détection rapide des mots sensibles | ✓ | ✓ |
| Connexion WSS avec jeton utilisateur | ✓ | ✓ |
| Configuration multi-comptes | ✓ | ✓ |
| Fonctionnalités avancées | ||
| Raccourcir (analyse rapide) | ✗ | ✓ |
| Mouvement de mise au point (Pan) | ✗ | ✓ |
| Zoom d'image (Zoom) | ✗ | ✓ |
| Redessinage local (varier la région) | ✗ | ✓ |
| Actions des boutons associés et mode Remix | ✗ | ✓ |
| Obtenir la valeur de départ de l'image | ✗ | ✓ |
| Gestion de compte | ||
| Persistance du pool de comptes | ✗ | ✓ |
| Prise en charge de plusieurs stockages (Redis/MySQL) | ✗ | ✓ |
| Récupération et paramètres des informations du compte | ✗ | ✓ |
| Fonction d'annulation de tâche | ✗ | ✓ |
| Backend de gestion intégré | ✗ | ✓ |
| Fonctionnalités intelligentes | ||
| Prise en charge de MJ V6.0 | ✗ | ✓ |
| Surveillance automatique de l'état du compte | ✗ | ✓ |
| Changement de mode automatique | ✗ | ✓ |
| Niji・voyage Bot support | ✗ | ✓ |
| Service de visage InsightFace | ✗ | ✓ |
| Sécurité et performances | ||
| Prise en charge de la configuration dynamique | ✗ | ✓ |
| Correction du problème de déconnexion du jeton | ✗ | ✓ |
| Fonction de vérification automatique | ✗ | ✓ |
| Appel automatique de mot interdit | ✗ | ✓ |
📝Présentation
Midjourney est un puissant modèle de génération et de traitement d'images capable de créer, d'éditer et de modifier des images basées sur des descriptions en langage naturel. En fournissant différentes interfaces, diverses tâches de génération et de traitement d'images peuvent être mises en œuvre.
🔄 Diagramme de flux de processus
graph TD
A[Start] --> B{Select Task Type}
%% Imagine Flow
B -->|Text to Image| C[Submit Imagine Task]
C --> D[Get Initial Image]
D --> E{Select Operation}
%% Basic Operation Branches
E -->|U1-U4| F[Upscale]
E -->|V1-V4| G[Variation]
%% Blend Flow
B -->|Image Mixing| H[Submit Blend Task]
H --> D
%% Describe Flow
B -->|Image to Text| I[Submit Describe Task]
I --> J[Get Image Description]
%% Action & Modal Flow
F --> K[Submit Action]
G --> K
K -->|Modal Required| L[Submit Modal]
K -->|Direct Execution| M[Execution Complete]
L --> M
%% Face Swap Flow
B -->|Face Replacement| N[Submit Swap Face Task]
N --> M
%% Query Related
M --> O{Subsequent Operations}
O -->|Query Progress| P[Get Task Details]
O -->|Get Seed| Q[Get Image Seed]
O -->|Save Image| R[Upload to Discord]
%% Style Definitions
classDef process fill:#f9f,stroke:#333,stroke-width:2px
classDef decision fill:#bbf,stroke:#333,stroke-width:2px
classDef endpoint fill:#bfb,stroke:#333,stroke-width:2px
class A,M,J,R endpoint
class B,E,O decision
class C,D,F,G,H,I,K,L,N,P,Q processDescription du flux
- Tâches initiales
- Imagine: génération de texte en image
- Mélange: mélange multi-images
- Décrire: description de l'image
- Swap Face: remplacement du visage
- Traitement des images
- U1-U4 : Opérations haut de gamme
- V1-V4 : Génération de variations
- Pan: traduction d'images
- Zoom: mise à l'échelle de l'image
- Flux spéciaux
- Action + Modal : Opérations nécessitant une confirmation modale
- Exécution d'actions directes: Opérations ne nécessitant pas de modalité
- Gestion des tâches
- Obtenir les détails de la tâche
- Obtenez une graine d'image
- Télécharger sur Discord
💡 Exemples de requêtes
Soumettre la tâche Imagine ✅
curl --location --request POST 'https://88api.ai/mj/submit/imagine' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"botType": "MID_JOURNEY",
"prompt": "Cat",
"base64Array": [],
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Soumettre une tâche de fusion ✅
curl --location --request POST 'https://88api.ai/mj/submit/blend' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"botType": "MID_JOURNEY",
"base64Array": [
"data:image/png;base64,xxx1",
"data:image/png;base64,xxx2"
],
"dimensions": "SQUARE",
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Soumettre Décrire la tâche ✅
curl --location --request POST 'https://88api.ai/mj/submit/describe' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"botType": "MID_JOURNEY",
"base64": "data:image/png;base64,xxx",
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Soumettre le modal ✅
curl --location --request POST 'https://88api.ai/mj/submit/modal' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"maskBase64": "",
"prompt": "",
"taskId": "14001934816969359"
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Soumettre la tâche swap_face ✅
curl --location --request POST 'https://88api.ai/mj/insight-face/swap' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"sourceBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RDnYdriP1wsS81kwU8OVs/R3xu8s6bX7+zYnOH8coSqpmRSBjqerjcBlr2OB/lbAf/2Q==",
"targetBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD849k="
}'Response Example:
{
"code": 0,
"description": "string",
"result": "string"
}Exécuter l'action ✅
curl --location --request POST 'https://88api.ai/mj/submit/action' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"chooseSameChannel": true,
"customId": "MJ::JOB::upsample::1::82c51c9d-bc33-4c07-a471-36c3dcb1a6f0",
"taskId": "1728781324658687",
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Téléchargez des fichiers sur Discord ✅
curl --location --request POST 'https://88api.ai/mj/submit/upload-discord-images' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"base64Array": [],
"filter": {
"channelId": "",
"instanceId": "",
"remark": ""
}
}'Response Example:
{
"code": 0,
"description": "string",
"result": ["string"]
}Tâches de requête par liste d'ID ✅
curl --location --request POST 'https://88api.ai/mj/task/list-by-condition' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"ids": []
}'Response Example:
[
{
"action": "IMAGINE",
"buttons": [
{
"customId": "string",
"emoji": "string",
"label": "string",
"style": 0,
"type": 0
}
],
"description": "string",
"failReason": "string",
"finishTime": 0,
"id": "string",
"imageUrl": "string",
"progress": "string",
"prompt": "string",
"promptEn": "string",
"properties": {},
"startTime": 0,
"state": "string",
"status": "NOT_START",
"submitTime": 0
}
]Obtenir la tâche par ID spécifique ✅
curl --location --request GET 'https://88api.ai/mj/task/{id}/fetch' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json'Response Example:
{
"action": "IMAGINE",
"buttons": [
{
"customId": "string",
"emoji": "string",
"label": "string",
"style": 0,
"type": 0
}
],
"description": "string",
"failReason": "string",
"finishTime": 0,
"id": "string",
"imageUrl": "string",
"progress": "string",
"prompt": "string",
"promptEn": "string",
"properties": {},
"startTime": 0,
"state": "string",
"status": "NOT_START",
"submitTime": 0
}Obtenez une graine d'image de tâche ✅
curl --location --request GET 'https://88api.ai/mj/task/{id}/image-seed' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json'Response Example:
{
"code": 0,
"description": "string",
"result": "string"
}📮 Demande
Points de terminaison
Soumettre la tâche Imagine
POST /mj/submit/imagineCréez des images basées sur des invites textuelles.
Soumettre la tâche de fusion
POST /mj/submit/blendGénérez de nouvelles images en mélangeant plusieurs images d’entrée.
Soumettre Décrire la tâche
POST /mj/submit/describeGénérez des descriptions de texte basées sur les images d'entrée.
Soumettre le modal
POST /mj/submit/modalSoumettez des informations modales pour ajuster les détails de génération d’image.
Soumettre la tâche swap_face
POST /mj/insight-face/swapEffectuez un échange de visage en fonction des images source et cible.
Exécuter l'action
POST /mj/submit/actionEffectuez les opérations ultérieures sur les images générées, telles que la mise à l'échelle, les ajustements, etc.
Télécharger des fichiers sur Discord
POST /mj/submit/upload-discord-imagesTéléchargez des images sur la plateforme Discord.
Tâches de requête par liste d'ID
POST /mj/task/list-by-conditionInterrogez les détails de la tâche en fonction de la liste d’ID de tâche spécifiée.
Obtenir la tâche par ID spécifique
GET /mj/task/{id}/fetchObtenez les détails de la tâche par ID de tâche.
Obtenir la graine de l'image de la tâche
GET /mj/task/{id}/image-seedObtenez la valeur de départ de l'image générée par la tâche spécifiée.
Méthode d'authentification
Incluez les éléments suivants dans l'en-tête de la demande pour l'authentification par clé API:
Authorization: Bearer $API_KEYOù $API_KEY est votre clé API.
Paramètres du corps de la requête
Soumettre la tâche Imagine
botType
- Type: chaîne d'énumération
- Obligatoire: Non
- Par défaut: MID_JOURNEY -Options:
MID_JOURNEY: Modèle à mi-parcoursNIJI_JOURNEY: modèle Niji Journey- Description: Sélectionnez le type de bot à utiliser
prompt
- Type : Chaîne
- Obligatoire : Oui
- Description: invite de texte pour la génération d'images
- Conseils:
- Utiliser des descriptions claires et précises
- Peut inclure un style artistique, une composition et d'autres détails
- Prend en charge la saisie en anglais et en chinois
base64Array
- Type: Tableau de chaînes
- Obligatoire: Non
- Description: tableau codé en base64 pour le remplissage d'image
- Format: chaque élément doit être une chaîne d'image complète en base64 avec un préfixe de type MIME
accountFilter
- Type : Objet
- Obligatoire: Non
- Propriétés:
channelId: ID de chaîneinstanceId: ID d'instance de comptemodes: tableau du mode compte, options: RELAX, FAST, TURBOremark: Contenu inclus dans les remarquesremix: indique si le compte prend en charge le remixremixAutoConsidered: paramètres de soumission automatique du remix
notifyHook
- Type : Chaîne
- Obligatoire: Non
- Description: adresse de rappel une fois la tâche terminée, utilise notifyHook global lorsqu'elle est vide
state
- Type : Chaîne
- Obligatoire: Non
- Description: paramètre d'état personnalisé pour le suivi des demandes
Soumettre la tâche de fusion
base64Array
- Type: Tableau de chaînes
- Obligatoire : Oui
- Description: Tableau d'images encodé en Base64 à mélanger
- Format: doit inclure 2 à 5 chaînes d'images en base64
dimensions
- Type: chaîne d'énumération
- Obligatoire: Non -Options:
PORTRAIT: rapport 2:3SQUARE: rapport 1:1- rapport
LANDSCAPE: 3:2 - Description: paramètres du rapport hauteur/largeur de l'image de sortie
Soumettre Décrire la tâche
base64
- Type : Chaîne
- Obligatoire : Oui
- Description : Encodage Base64 de l'image à décrire
- Format: Chaîne complète en base64 avec préfixe de type MIME
Soumettre une tâche modale
maskBase64
- Type : Chaîne
- Obligatoire: Non
- Description: Encodage Base64 de l'image du masque pour redessiner localement
prompt
- Type : Chaîne
- Obligatoire: Non
- Description: invite de texte pour la zone de redessinage
taskId
- Type : Chaîne
- Obligatoire : Oui
- Description: ID de la tâche d'origine
Soumettre la tâche d'échange de visage
sourceBase64
- Type : Chaîne
- Obligatoire : Oui
- Description: Encodage Base64 de l'image source du visage
- Exigences: L'image doit contenir un visage clair
targetBase64
- Type : Chaîne
- Obligatoire : Oui
- Description : Encodage Base64 de l'image cible
- Exigences: L'image doit contenir le visage à remplacer
Exécuter l'action
chooseSameChannel
- Type: Booléen
- Obligatoire: Non
- Par défaut: faux
- Description: s'il faut sélectionner des comptes dans le même canal
customId
- Type : Chaîne
- Obligatoire : Oui
- Description: Identifiant de l'action
- Format: chaîne de format spécifique, telle que "MJ::JOB::upsample::1::xxx"
taskId
- Type : Chaîne
- Obligatoire : Oui
- Description: ID de tâche pour l'action à exécuter
Télécharger des fichiers sur Discord
base64Array
- Type: Tableau de chaînes
- Obligatoire : Oui
- Description: Tableau d'images encodé en Base64 à télécharger
filter
- Type : Objet
- Obligatoire: Non
- Propriétés:
channelId: ID du canal cibleinstanceId: ID d'instance de compteremark: Informations sur les remarques
Tâches de requête par liste d'ID
ids
- Type: Tableau de chaînes
- Obligatoire : Oui
- Description: Liste des ID de tâches à interroger
Format de réponse commun
Toutes les interfaces renvoient des structures de réponse similaires:
code
- Type : Entier
- Description: Code d'état
| Code d'état | Descriptif |
|---|---|
| 1 | Soumis avec succès |
| 22 | Tâche en file d'attente |
| 21 | Erreur de paramètre |
| 23 | Erreur système |
| 24 | Compte indisponible |
| 25 | Solde insuffisant |
description
- Type : Chaîne
- Description: informations de description de la réponse
properties
- Type : Objet
- Description: Propriétés étendues
result
- Type : Chaîne ou tableau
- Description: résultat renvoyé, peut être l'ID de la tâche ou d'autres données
📥 Réponse
Réponse réussie
action
- Type: chaîne d'énumération
- Description: Type de tâche
| Valeur de chaîne | Descriptif |
|---|---|
IMAGINE | Créer une image |
UPSCALE | Image haut de gamme |
VARIATION | Générer des variations |
ZOOM | Agrandir l'image |
PAN | Image panoramique |
DESCRIBE | Description des images |
BLEND | Mélange d'images |
SHORTEN | Raccourcir l'invite |
SWAP_FACE | Remplacement du visage |
buttons
- Type: Tableau d'objets
- Description: Boutons de commande exécutables
| Propriétés du tableau | Descriptif |
|---|---|
customId | Identificateur d'action |
emoji | Icône du bouton |
label | Texte du bouton |
style | Style (2=Primaire, 3=Vert) |
type | Type utilisé en interne par le système |
description
- Type : Chaîne
- Description: informations sur la description de la tâche
failReason
- Type : Chaîne
- Description: Raison de l'échec de la tâche
finishTime
- Type : Entier
- Description: horodatage d'achèvement de la tâche
id
- Type : Chaîne
- Description: Identifiant unique de la tâche
imageUrl
- Type : Chaîne
- Description : URL de l'image générée
progress
- Type : Chaîne
- Description: informations sur la progression de la tâche
prompt
- Type : Chaîne
- Description: invite originale
promptEn
- Type : Chaîne
- Description: invite en anglais
status
- Type: chaîne d'énumération
- Description: Statut de la tâche
| Valeur de chaîne | Descriptif |
|---|---|
NOT_START | Pas démarré |
SUBMITTED | Soumis |
MODAL | Opération modale en cours |
IN_PROGRESS | En cours |
FAILURE | Échec |
SUCCESS | Réussi |
CANCEL | Annulé |
submitTime
- Type : Entier
- Description: horodatage de soumission de la tâche
startTime
- Type : Entier
- Description: Horodatage de début d'exécution de la tâche
Réponse d'erreur
En cas de problèmes avec la requête, l'API renvoie une réponse d'erreur:
Codes d'état HTTP
400 Bad Request: Paramètres de requête invalides401 Unauthorized: Clé API invalide ou manquante403 Forbidden: autorisations insuffisantes404 Not Found: Ressource non trouvée429 Too Many Requests: Limite de fréquence de requête dépassée500 Internal Server Error: Erreur interne du serveur
Format de réponse d'erreur
{
"code": `<error_code>`,
"description": "Error description information",
"result": null
}💡 Bonnes pratiques
Suggestions d'écriture rapides
- Utilisez un langage clair et concis pour décrire le contenu de l'image attendu
- Peut se référer à divers paramètres pris en charge par Midjourney pour contrôler le style de l'image
- Utilisez de manière appropriée les descriptions négatives pour exclure les éléments indésirables
- Peut utiliser les URL d'images comme références pour guider la génération
Processus de génération d'images
- Soumettez la tâche Imagine pour obtenir les premières images
- Optimisez davantage via Blend, Modal et d'autres tâches selon les besoins
- Exécuter des opérations d'action pour le réglage fin de l'image
- Téléchargez et enregistrez des images de résultats satisfaisantes
Exigences relatives au format d'image
- Formats d'images pris en charge: -JPEG/JPG -PNG
- GIF (statique)
- WEBP
- Limites de taille d'image:
- Taille du fichier: 4 Mo maximum
- Résolution: 1024x1024 recommandé ou supérieur
- Rapport hauteur/largeur: prend en charge 1:1, 2:3, 3:2
Suggestions d'optimisation des performances
- Encodage Base64:
- Utiliser le format d'encodage standard Base64
- Inclure le préfixe de type MIME correct
- Compresser les images pour réduire la transmission de données
- Traitement des tâches:
- Utilisez le webhook pour recevoir des notifications d'achèvement de tâches
- Définir des stratégies de nouvelle tentative raisonnables
- Recommander d'utiliser des méthodes de traitement asynchrones
Gestion des erreurs
-
Implémenter des mécanismes de nouvelle tentative de requête
-
Ajouter un enregistrement du journal des erreurs
-
Définir des délais d'attente raisonnables