88API88API
AI-приложенияAPIПомощь и поддержка

Формат образа Midjourney (Midjourney Proxy/Midjourney Proxy Plus)

пожалуйста, обратите внимание

Этот интерфейс не является официальным интерфейсом Midjourney, но основан на проекте с открытым исходным кодом автора novicezk. midjourney-прокси Реализован промежуточный прокси-интерфейс.

Проект разделен на две версии и адаптирован 88API:

Мы очень благодарны автору за его вклад, который позволяет нам легко использовать мощные функции 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

Описание процесса

  1. Начальная миссия

    • Представьте себе: текстовое изображение.
    • Blend: смешивание нескольких изображений.
    • Описать: описание изображения.
    • Swap Face: замена лица
  2. Обработка изображений

    • U1-U4: операция масштабирования
    • V1-V4: поколение вариантов
    • Панорамирование: панорамирование изображения.
    • Масштаб: увеличение изображения.
  3. Специальный процесс

    • Действие + модальное: операции, требующие подтверждения во всплывающем окне.
    • Непосредственное выполнение Действия: Операции, не требующие всплывающих окон.
  4. Управление задачами

    • Получить подробную информацию о задаче
    • Получить исходное изображение
    • Загрузить в Дискорд

💡 Пример запроса

Отправить задание 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
}

💡 Лучшие практики

Подскажите предложения по написанию

  1. Используйте ясный и краткий язык, чтобы описать желаемое содержание изображения.
  2. Вы можете использовать различные параметры, поддерживаемые Midjourney, для управления стилем изображения.
  3. Используйте негативные описания правильно, чтобы исключить ненужные элементы.
  4. Вы можете использовать URL-адрес изображения в качестве ссылки для создания

Процесс создания изображения

  1. Отправьте задание «Представь» и получите предварительные снимки.
  2. При необходимости выполните дальнейшую оптимизацию с помощью таких задач, как Blend и Modal.
  3. Выполните действие для точной настройки изображения.
  4. Загрузите и сохраните фотографии удовлетворительных результатов.

Требования к формату изображения

  1. Поддерживаемые форматы изображений:

    • JPEG/JPG
    • PNG
    • GIF (статический) -ВЕБП
  2. Ограничение размера изображения:

    • Размер файла: Макс. 4 МБ.
    • Разрешение: рекомендуется 1024x1024 или выше.
    • Соотношение сторон: поддерживает 1:1, 2:3, 3:2.

Рекомендации по оптимизации производительности

  1. Кодировка Base64:

    • Используйте стандартный формат кодировки Base64.
    • Содержит правильный префикс типа MIME.
    • Сжимайте изображения для уменьшения передачи данных.
  2. Обработка задач:

    • Используйте вебхуки для получения уведомлений о завершении задач.
    • Установите разумную стратегию повторных попыток.
    • Рекомендуется использовать асинхронную обработку

Обработка ошибок

  • Реализовать механизм повтора запроса.

  • Добавить журнал ошибок

  • Установите разумный тайм-аут

Содержание

📝 Введение
🔄 Схема процесса
Описание процесса
💡 Пример запроса
Отправить задание Imagine ✅
Отправьте задачу Blend ✅
Отправить Описать задачу ✅
Модальное окно отправки ✅
Отправьте задачу swap_face ✅
Выполнить действие ✅
Загрузить файлы в дискорд ✅
Запрос задач на основе списка идентификаторов ✅
Получите задание, указав ID ✅
Получите начальное изображение задачи ✅
📮 Запрос
Конечная точка
Отправьте задачу Imagine
Отправьте задачу Blend
Отправить Описать задачу
Модальное окно отправки
Отправьте задачу swap_face
Выполнить действие
Загрузить файлы в дискорд
Запрос задач на основе списка идентификаторов
Укажите идентификатор для получения задания
Получите начальное значение изображения задачи
Метод аутентификации
Параметры тела запроса
Отправьте задачу Imagine
$OPENAI_API_KEY
$OPENAI_API_KEY
$OPENAI_API_KEY
$OPENAI_API_KEY
$OPENAI_API_KEY
$OPENAI_API_KEY
Отправьте задачу Blend
$OPENAI_API_KEY
$OPENAI_API_KEY
Отправить Описать задачу
$OPENAI_API_KEY
Отправить модальную задачу
maskBase64
maskBase64
maskBase64
Отправьте задачу по замене лица
maskBase64
maskBase64
Действие «Выполнить действие»
maskBase64
maskBase64
maskBase64
Загрузить файлы в Discord
maskBase64
maskBase64
Запрос задач на основе списка идентификаторов
maskBase64
Общий формат ответа
maskBase64
maskBase64
maskBase64
result
📥 Ответ
Успешный ответ
result
result
result
result
result
result
result
result
result
result
result
NOT_START
NOT_START
Ошибка ответа
Код статуса HTTP
Формат ответа об ошибке
💡 Лучшие практики
Подскажите предложения по написанию
Процесс создания изображения
Требования к формату изображения
Рекомендации по оптимизации производительности
Обработка ошибок