Формат образа Midjourney (Midjourney Proxy/Midjourney Proxy Plus)
пожалуйста, обратите внимание
Этот интерфейс не является официальным интерфейсом Midjourney, но основан на проекте с открытым исходным кодом автора novicezk. midjourney-прокси Реализован промежуточный прокси-интерфейс.
Проект разделен на две версии и адаптирован 88API:
-
Версия с открытым исходным кодом midjourney-proxy
-
Платная версия midjourney-proxy-plus
Мы очень благодарны автору за его вклад, который позволяет нам легко использовать мощные функции Midjourney. Если у вас есть время, поставьте, пожалуйста, звезду автору. Если есть возможность, рекомендуется поддержать платную версию автора, которая поддерживает больше функций.
| Категория функции | Версия с открытым исходным кодом | Платная версия |
|---|---|---|
| Основные функции | ||
| Представьте себе команды и связанные с ними действия | ✓ | ✓ |
| Матовая опора | ✓ | ✓ |
| Blend (смешивание изображений) | ✓ | ✓ |
| Описать (изображения и текст) | ✓ | ✓ |
| Ход выполнения задачи в реальном времени | ✓ | ✓ |
| Китайский оперативный перевод | ✓ | ✓ |
| Оперативное обнаружение чувствительных слов | ✓ | ✓ |
| соединение с токеном пользователя wss | ✓ | ✓ |
| Конфигурация нескольких учетных записей | ✓ | ✓ |
| Расширенные функции | ||
| Сократить(оперативный анализ) | ✗ | ✓ |
| Движение фокуса (Панорамирование) | ✗ | ✓ |
| Увеличение изображения (Увеличение) | ✗ | ✓ |
| Частичная перерисовка (Разные регионы) | ✗ | ✓ |
| Связанные действия кнопок и режим Remix | ✗ | ✓ |
| Получить начальное значение изображения | ✗ | ✓ |
| Управление аккаунтом | ||
| Сохранение пула учетных записей | ✗ | ✓ |
| Поддержка нескольких хранилищ (Redis/MySQL) | ✗ | ✓ |
| Получение и настройка учетной информации | ✗ | ✓ |
| Функция отмены задачи | ✗ | ✓ |
| Встроенный фон управления | ✗ | ✓ |
| Умные функции | ||
| Поддержка MJ V6.0 | ✗ | ✓ |
| Автоматический мониторинг состояния счета | ✗ | ✓ |
| Режим автоматического переключения | ✗ | ✓ |
| поддержка ботов niji・journey | ✗ | ✓ |
| Лицевой сервис InsightFace | ✗ | ✓ |
| Показатель безопасности | ||
| Поддержка динамической конфигурации | ✗ | ✓ |
| Исправление проблемы с отключением токена | ✗ | ✓ |
| Функция автоматической проверки | ✗ | ✓ |
| Автоматическая апелляция на запрещенные слова | ✗ | ✓ |
📝 Введение
Midjourney — это мощная модель создания и обработки изображений, которая позволяет создавать, редактировать и изменять изображения на основе описаний на естественном языке. Предоставляя различные интерфейсы, можно реализовать различные задачи создания и обработки изображений.
🔄 Схема процесса
graph TD
A[начинать] --> B{Выберите тип задачи}
%% Imagine процесс
B -->|Винсентианская картина| C[представлять на рассмотрение Imagine Задача]
C --> D[Получить исходное изображение]
D --> E{Выберите действие}
%% Основная операционная ветка
E -->|U1-U4| F[увеличить]
E -->|V1-V4| G[Варианты]
%% Blend процесс
B -->|Микс изображений| H[представлять на рассмотрение Blend Задача]
H --> D
%% Describe процесс
B -->|Иллюстрированный текст| I[представлять на рассмотрение Describe Задача]
I --> J[Получить описание изображения]
%% Action & Modal процесс
F --> K[представлять на рассмотрение Action]
G --> K
K -->|Нужно всплывающее окно| L[представлять на рассмотрение Modal]
K -->|Прямое исполнение| M[Выполнение завершено]
L --> M
%% Face Swap процесс
B -->|замена лица| N[представлять на рассмотрение Swap Face Задача]
N --> M
%% Связанный запрос
M --> O{Последующие операции}
O -->|Ход выполнения запроса| P[Получить подробную информацию о задаче]
O -->|Получить торрент| Q[Получить фотографии Seed]
O -->|сохранить изображение| R[загрузить в Discord]
%% определение стиля
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 processОписание процесса
-
Начальная миссия
- Представьте себе: текстовое изображение.
- Blend: смешивание нескольких изображений.
- Описать: описание изображения.
- Swap Face: замена лица
-
Обработка изображений
- U1-U4: операция масштабирования
- V1-V4: поколение вариантов
- Панорамирование: панорамирование изображения.
- Масштаб: увеличение изображения.
-
Специальный процесс
- Действие + модальное: операции, требующие подтверждения во всплывающем окне.
- Непосредственное выполнение Действия: Операции, не требующие всплывающих окон.
-
Управление задачами
- Получить подробную информацию о задаче
- Получить исходное изображение
- Загрузить в Дискорд
💡 Пример запроса
Отправить задание 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": ""
}'Пример ответа:
{
"code": 1,
"description": "Отправка успешна",
"properties": {},
"result": 1320098173412546
}Отправьте задачу Blend ✅
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": ""
}'Пример ответа:
{
"code": 1,
"description": "Отправка успешна",
"properties": {},
"result": 1320098173412546
}Отправить Описать задачу ✅
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": ""
}'Пример ответа:
{
"code": 1,
"description": "Отправка успешна",
"properties": {},
"result": 1320098173412546
}Модальное окно отправки ✅
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"
}'Пример ответа:
{
"code": 1,
"description": "Отправка успешна",
"properties": {},
"result": 1320098173412546
}Отправьте задачу 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="
}'Пример ответа:
{
"code": 0,
"description": "string",
"result": "string"
}Выполнить действие ✅
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": ""
}'Пример ответа:
{
"code": 1,
"description": "Отправка успешна",
"properties": {},
"result": 1320098173412546
}Загрузить файлы в дискорд ✅
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": ""
}
}'Пример ответа:
{
"code": 0,
"description": "string",
"result": ["string"]
}Запрос задач на основе списка идентификаторов ✅
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": []
}'Пример ответа:
[
{
"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
}
]Получите задание, указав ID ✅
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'Пример ответа:
{
"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
}Получите начальное изображение задачи ✅
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'Пример ответа:
{
"code": 0,
"description": "string",
"result": "string"
}📮 Запрос
Конечная точка
Отправьте задачу Imagine
POST /mj/submit/imagineСоздавайте изображения на основе текстовых подсказок.
Отправьте задачу Blend
POST /mj/submit/blendСоздавайте новые изображения на основе объединения нескольких входных изображений.
Отправить Описать задачу
POST /mj/submit/describeГенерируйте текстовые описания на основе входных изображений.
Модальное окно отправки
POST /mj/submit/modalОтправьте модальную информацию, чтобы настроить детали создания изображения.
Отправьте задачу swap_face
POST /mj/insight-face/swapОбмен лицами на основе исходного изображения и целевого изображения.
Выполнить действие
POST /mj/submit/actionВыполняйте над сгенерированными картинками последующие операции, такие как увеличение, корректировка и т.п.
Загрузить файлы в дискорд
POST /mj/submit/upload-discord-imagesЗагрузите изображение на платформу Discord.
Запрос задач на основе списка идентификаторов
POST /mj/task/list-by-conditionЗапрос сведений о задаче на основе указанного списка идентификаторов задач.
Укажите идентификатор для получения задания
GET /mj/task/{id}/fetchПолучите подробную информацию о задаче на основе идентификатора задачи.
Получите начальное значение изображения задачи
GET /mj/task/{id}/image-seedПолучите начальное значение изображения, созданного указанной задачей.
Метод аутентификации
Включите в заголовок запроса для аутентификации ключа API следующее:
Authorization: Bearer $API_KEY$OPENAI_API_KEYГде $OPENAI_API_KEY — ваш ключ API.
Параметры тела запроса
Отправьте задачу Imagine
$OPENAI_API_KEY
- Тип: строка перечисления.
- Требуется: Нет
- Значение по умолчанию: MID_JOURNEY.
- Необязательные значения:
$OPENAI_API_KEY: модель Midjourney$OPENAI_API_KEY: модель Niji Journey
- Описание: выберите тип бота для использования.
$OPENAI_API_KEY
- Тип: строка
- Требуется: Да
- Описание: текстовые подсказки, генерируемые изображением.
- Советы:
- Используйте четкие и конкретные описания.
- Может включать такие детали, как художественный стиль, композиция и т. д.
- Поддерживает ввод на английском и китайском языках.
$OPENAI_API_KEY
- Тип: массив строк.
- Требуется: Нет
- Описание: массив матового изображения в кодировке Base64. – Формат: каждый элемент должен представлять собой полную строку изображения в формате Base64, включая префикс типа MIME.
$OPENAI_API_KEY
- Тип: Объект
- Требуется: Нет
- Свойства:
$OPENAI_API_KEY: идентификатор канала$OPENAI_API_KEY: идентификатор экземпляра учетной записи.$OPENAI_API_KEY: массив режимов учетной записи, необязательные значения: RELAX, FAST, TURBO.$OPENAI_API_KEY: Содержимое включено в примечания.$OPENAI_API_KEY: Поддерживает ли аккаунт ремикс?$OPENAI_API_KEY: настройки автоматической отправки ремикса.
$OPENAI_API_KEY
- Тип: строка
- Требуется: Нет
- Описание: адрес обратного вызова после завершения задачи. Если он пуст, используйте глобальный notifyHook.
$OPENAI_API_KEY
- Тип: строка
- Требуется: Нет
- Описание: пользовательские параметры статуса, которые можно использовать для отслеживания запросов.
Отправьте задачу Blend
$OPENAI_API_KEY
- Тип: массив строк.
- Требуется: Да
- Описание: массив изображений в кодировке Base64 для смешивания.
- Формат: строка base64, которая должна содержать 2–5 изображений.
$OPENAI_API_KEY
- Тип: строка перечисления.
- Требуется: Нет
- Необязательные значения:
$OPENAI_API_KEY: соотношение 2:3$OPENAI_API_KEY: соотношение 1:1$OPENAI_API_KEY: соотношение 3:2
- Описание: настройка соотношения сторон выходного изображения.
Отправить Описать задачу
$OPENAI_API_KEY
- Тип: строка
- Требуется: Да
- Описание: кодировка base64 изображения, которое необходимо описать.
- Формат: полная строка base64, включая префикс типа MIME.
Отправить модальную задачу
maskBase64
- Тип: строка
- Требуется: Нет
- Описание: кодирование Base64 частично перерисованного изображения маски.
maskBase64
- Тип: строка
- Требуется: Нет
- Описание: текстовая подсказка для области перерисовки.
maskBase64
- Тип: строка
- Требуется: Да
- Описание: идентификатор исходной задачи.
Отправьте задачу по замене лица
maskBase64
- Тип: строка
- Требуется: Да
- Описание: кодировка base64 исходного изображения лица.
- Требование: на изображении должно быть четко видно человеческое лицо.
maskBase64
- Тип: строка
- Требуется: Да
- Описание: кодировка Base64 целевого изображения.
- Требование: изображение должно содержать заменяемое лицо.
Действие «Выполнить действие»
maskBase64
- Тип: Логический
- Требуется: Нет -Значение по умолчанию: ложь
- Описание: следует ли выбирать учетную запись в том же канале.
maskBase64
- Тип: строка
- Требуется: Да
- Описание: идентификатор действия
- Формат: строка в определенном формате, например «MJ::JOB::upsample::1::xxx».
maskBase64
- Тип: строка
- Требуется: Да
- Описание: идентификатор задачи действия, которое необходимо выполнить.
Загрузить файлы в Discord
maskBase64
- Тип: массив строк.
- Требуется: Да
- Описание: массив изображений в кодировке Base64 для загрузки.
maskBase64
- Тип: Объект
- Требуется: Нет
- Свойства:
maskBase64: идентификатор целевого канала.maskBase64: идентификатор экземпляра учетной записи.maskBase64: информация о примечаниях.
Запрос задач на основе списка идентификаторов
maskBase64
- Тип: массив строк.
- Требуется: Да
- Описание: список идентификаторов задач, которые будут запрошены.
Общий формат ответа
Все интерфейсы возвращают схожие структуры ответа:
maskBase64
- Тип: целое число
- Описание: код состояния
| Код состояния | Описание |
|---|---|
| 1 | Отправка успешна |
| 22 | Задача в очереди |
| 21 | Ошибка параметра |
| 23 | Системная ошибка |
| 24 | Аккаунт недоступен |
| 25 | Недостаточный баланс |
maskBase64
- Тип: строка
- Описание: информация описания ответа.
maskBase64
- Тип: Объект
- Описание: расширенные атрибуты
result
- Тип: строка или массив.
- Описание: возврат результата, который может быть идентификатором задачи или другими данными.
📥 Ответ
Успешный ответ
result
- Тип: строка перечисления.
- Описание: Тип задачи
| Строковое значение | Описание |
|---|---|
result | Создать изображение |
result | Увеличить изображение |
result | Генерация вариантов |
result | Увеличить изображение |
result | Панорамирование изображения |
result | Описание изображения |
result | Микс изображений |
result | Сократите подсказки |
result | Замена лица |
result
- Тип: массив объектов.
- Описание: исполняемые кнопки действий.
| Массив содержит атрибуты | Описание |
|---|---|
result | Идентификатор действия |
result | значок кнопки |
result | Текст кнопки |
result | Стиль(2=Основной, 3=Зеленый) |
result | Тип, используемый системой внутри |
result
- Тип: строка
- Описание: информация описания задачи.
result
- Тип: строка
- Описание: Причина сбоя задачи.
result
- Тип: целое число
- Описание: временная метка завершения задачи.
result
- Тип: строка
- Описание: уникальный идентификатор задачи.
result
- Тип: строка
- Описание: создать URL-адрес изображения.
result
- Тип: строка
- Описание: информация о ходе выполнения задачи.
result
- Тип: строка
- Описание: Исходное слово-подсказка.
result
- Тип: строка
- Описание: английские слова-подсказки.
result
- Тип: строка перечисления.
- Описание: Статус задачи.
| Строковое значение | Описание |
| ------------- | ---------- |
|
NOT_START| Не запущено | |NOT_START| Представлено | |NOT_START| Модальная операция | |NOT_START| В процессе | |NOT_START| Не удалось | |NOT_START| Успех | |NOT_START| Отменено |
NOT_START
- Тип: целое число
- Описание: отметка времени отправки задачи.
NOT_START
- Тип: целое число
- Описание: отметка времени начала выполнения задачи.
Ошибка ответа
Если с запросом что-то пойдет не так, API вернет ответ об ошибке:
Код статуса HTTP
NOT_START: неверные параметры запроса.NOT_START: ключ API недействителен или не предоставлен.NOT_START: недостаточно разрешений.NOT_START: Ресурс не существует.NOT_START: частота запросов превышает предел.NOT_START: внутренняя ошибка сервера.
Формат ответа об ошибке
{
"code": `<код ошибки>`,
"description": "Информация описания ошибки",
"result": null
}💡 Лучшие практики
Подскажите предложения по написанию
- Используйте ясный и краткий язык, чтобы описать желаемое содержание изображения.
- Вы можете использовать различные параметры, поддерживаемые Midjourney, для управления стилем изображения.
- Используйте негативные описания правильно, чтобы исключить ненужные элементы.
- Вы можете использовать URL-адрес изображения в качестве ссылки для создания
Процесс создания изображения
- Отправьте задание «Представь» и получите предварительные снимки.
- При необходимости выполните дальнейшую оптимизацию с помощью таких задач, как Blend и Modal.
- Выполните действие для точной настройки изображения.
- Загрузите и сохраните фотографии удовлетворительных результатов.
Требования к формату изображения
-
Поддерживаемые форматы изображений:
- JPEG/JPG
- PNG
- GIF (статический) -ВЕБП
-
Ограничение размера изображения:
- Размер файла: Макс. 4 МБ.
- Разрешение: рекомендуется 1024x1024 или выше.
- Соотношение сторон: поддерживает 1:1, 2:3, 3:2.
Рекомендации по оптимизации производительности
-
Кодировка Base64:
- Используйте стандартный формат кодировки Base64.
- Содержит правильный префикс типа MIME.
- Сжимайте изображения для уменьшения передачи данных.
-
Обработка задач:
- Используйте вебхуки для получения уведомлений о завершении задач.
- Установите разумную стратегию повторных попыток.
- Рекомендуется использовать асинхронную обработку
Обработка ошибок
-
Реализовать механизм повтора запроса.
-
Добавить журнал ошибок
-
Установите разумный тайм-аут