JavaScript (Node.js)

使用我们的Midjourney API快速入门

概述

本指南假定您正在使用演示帐户 (opens in a new tab)。我们将通过生成一张图片并查看结果来快速开始。您也可以选择使用的编程语言。

最好的部分是,您可以复制代码并立即使用!

🚀

通过获取演示帐户 (opens in a new tab)最简单的开始生成Midjourney图片的方法。

获取身份验证令牌

生成身份验证令牌的步骤动画

  1. 一旦购买了演示帐户 (opens in a new tab),您将收到一封包含用户名和密码的电子邮件。使用它登录到我们的演示服务器:https://cl.imagineapi.dev (opens in a new tab)
  2. 登录后,点击左下角的 用户图标
  3. 这是您的用户设置。滚动到底部,找到 Token 字段并 点击圆形箭头按钮 以重新生成令牌:
  4. 这将创建一个新的令牌,您可以用它来授权您的API调用,所以 复制该令牌。请将它保存在某个文件中,因为您很快就会用到它:
  5. 然后 点击右上角的复选框按钮 以保存您的帐户更改:

就是这样。现在我们将使用该令牌来验证我们的API调用。

生成一张图片

现在您拥有您的身份验证令牌,您可以生成您的第一张图片。

midjourney-api.js
// 使用fetch - 需要Node.js 18或更高版本
 
const data = {
    prompt: "a pretty lady at the beach --ar 9:21 --chaos 40 --stylize 1000"
};
 
// 我们在这里将其包装在一个主函数中,以便我们可以在其中使用async/await。
async function main() {
    try {
        const response = await fetch('https://cl.imagineapi.dev/items/images/', {
            method: 'POST',
            headers: {
                'Authorization': 'Bearer u667iLDO2Xfu0-qpv_nu82EeeDtYGlsf', // <<<< TODO: 记得更改这个
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(data)
        });
 
        const responseData = await response.json();
        console.log(responseData);
    } catch (error) {
        console.error('生成图像时出错:', error);
        throw error;
    }
}
 
main();

我们使用以下命令运行它(需要Node.js 18或更高版本):

 node --version
v18.14.0
 
 node midjourney-api.js

输出将如下所示:

{
  data: {
    id: '8fd5bc67-a4c5-4bf0-a09d-e20341d17135',
    prompt: 'a pretty lady at the beach --ar 9:21 --chaos 40 --stylize 1000',
    results: null,
    user_created: '4df804f1-e32e-4e1c-be58-6acbe48cce98',
    date_created: '2023-09-01T04:33:44.939Z',
    status: 'pending',
    progress: null,
    url: null,
    error: null,
    upscaled_urls: null,
    upscaled: [],
    ref: null
  }
}

现在您的提示将被发送到Midjourney。

需要注意的一些重要细节:

  • 图像 id 将保持不变,我们可以使用它来获取数据和状态
  • statuspending,这是首次创建图像生成时的默认值
  • 当完成生成(status 将为 completed)时,upscaled_urls 将具有4个独立的图像URL,而 url 将具有其中包含所有四个图像的网格图像

让我们继续下面,并获取生成的图像

获取生成的图像

在演示服务器中生成一张图像最多需要30秒。我们使用 turbo mode 启用的Midjourney帐户,所以通常非常快。

让我们创建一个新文件来获取我们在上一步中创建的图像。

get-image.js
 
const imageId = '7f360434-675f-4abb-8cca-1ca0bca6f1a6'; // <<< TODO: 更改为图像ID(您从上一个请求中得到的ID)
 
async function main() {
  try {
    const response = await fetch(`https://cl.imagineapi.dev/items/images/${imageId}`, {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer u667iLDO2Xfu0-qpv_nu82EeeDtYGlsf', // <<<< TODO: 记得更改这个
        'Content-Type': 'application/json'
      }
    })
 
    const responseData = await response.json();
    console.log(responseData)
  } catch (error) {
    console.error('出错了', error);
    throw error;
  }
}
 
main();

然后我们运行它(需要Node.js 18或更高版本):

 node --version
v18.14.0
 
 node get-image.js

如果图像完成生成,这是我们得到的结果:

{
  data: {
    id: '8fd5bc67-a4c5-4bf0-a09d-e20341d17135',
    prompt: 'a pretty lady at the beach --ar 9:21 --chaos 40 --stylize 1000',
    results: 'e779c669-fa11-4dce-968e-bb673d16f48c',
    user_created: '4df804f1-e32e-4e1c-be58-6acbe48cce98',
    date_created: '2023-09-01T04:33:44.939Z',
    status: 'completed',
    progress: null,
    url: 'https://cl.imagineapi.dev/assets/e779c669-fa11-4dce-968e-bb673d16f48c/e779c669-fa11-4dce-968e-bb673d16f48c.png',
    error: null,
    upscaled_urls: [
      'https://cl.imagineapi.dev/assets/591495eb-5db5-4b85-a3aa-d06309b614ed/591495eb-5db5-4b85-a3aa-d06309b614ed.png',
      'https://cl.imagineapi.dev/assets/fdb55e69-5c15-4846-8050-d6ae991657c1/fdb55e69-5c15-4846-8050-d6ae991657c1.png',
      'https://cl.imagineapi.dev/assets/b625e482-a91f-4451-8086-6d6eeb0e9bd7/b625e482-a91f-4451-8086-6d6eeb0e9bd7.png',
      'https://cl.imagineapi.dev/assets/7ef88522-f4d1-4ed3-9f52-6306cca167a6/7ef88522-f4d1-4ed3-9f52-6306cca167a6.png'
    ],
    upscaled: [
      '591495eb-5db5-4b85-a3aa-d06309b614ed',
      '7ef88522-f4d1-4ed3-9f52-6306cca167a6',
      'b625e482-a91f-4451-8086-6d6eeb0e9bd7',
      'fdb55e69-5c15-4846-8050-d6ae991657c1'
    ],
    ref: null
  }
}

自动等待图像

让我们取下生成图像的代码片段,并让它每 5 秒检查一次图像是否已生成(即 status 是 completed 或 failed):

midjourney-api.js
// 使用 fetch —— 需要 Node.js 18 或更高版本
 
const data = {
    prompt: "a pretty lady at the beach --ar 9:21 --chaos 40 --stylize 1000"
};
 
// 我们在这里将其包装在一个主函数中,以便我们可以在其中使用 async/await。
async function main() {
    let promptResponseData;
    // 生成图像
    try {
        const response = await fetch('https://cl.imagineapi.dev/items/images/', {
            method: 'POST',
            headers: {
                'Authorization': 'Bearer u667iLDO2Xfu0-qpv_nu82EeeDtYGlsf', // <<<< TODO: 记得更改这个
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(data)
        });
 
        promptResponseData = await response.json();
        console.log(promptResponseData);
    } catch (error) {
        console.error('生成图片时出错:', error);
        throw error;
    }
 
    // 检查图像是否已完成生成
    // 我们每 5000 毫秒(5 秒,设置在底部)重复此代码
    const intervalId = setInterval(async function () {
        try {
          console.log('正在检查图像详情');
          const response = await fetch(`https://cl.imagineapi.dev/items/images/${promptResponseData.data.id}`, {
            method: 'GET',
            headers: {
                'Authorization': 'Bearer u667iLDO2Xfu0-qpv_nu82EeeDtYGlsf', // <<<< TODO: 记得更改这个
                'Content-Type': 'application/json'
            }
          })
 
          const responseData = await response.json();
          if (responseData.data.status === 'completed' || responseData.data.status === 'failed') {
            // 停止重复
            clearInterval(intervalId);
            console.log('完成的图像详情', responseData.data);
          } else {
            console.log("图像尚未完成生成。状态:", responseData.data.status)
          }
        } catch (error) {
          console.error('获取更新时出错', error);
          throw error;
        }
    }, 5000 /* 每 5 秒 */);
    // TODO: 添加检查以确保这不会无限期运行
}
 
main();

输出可能如下所示:

{
  data: {
    id: '96e8c151-085f-4e1b-a3be-36dcff594dbd',
    prompt: 'a pretty lady at the beach --ar 9:21 --chaos 40 --stylize 1000',
    results: null,
    user_created: '4df804f1-e32e-4e1c-be58-6acbe48cce98',
    date_created: '2023-09-01T04:36:06.549Z',
    status: 'pending',
    progress: null,
    url: null,
    error: null,
    upscaled_urls: null,
    upscaled: [],
    ref: null
  }
}
正在检查图像详情
图像尚未完成生成。状态: pending
正在检查图像详情
图像尚未完成生成。状态: pending
正在检查图像详情
图像尚未完成生成。状态: pending
正在检查图像详情
图像尚未完成生成。状态: pending
正在检查图像详情
图像尚未完成生成。状态: in-progress
正在检查图像详情
图像尚未完成生成。状态: in-progress
正在检查图像详情
图像尚未完成生成。状态: in-progress
正在检查图像详情
图像尚未完成生成。状态: in-progress
正在检查图像详情
图像尚未完成生成。状态: in-progress
正在检查图像详情
完成的图像详情 {
  id: '96e8c151-085f-4e1b-a3be-36dcff594dbd',
  prompt: 'a pretty lady at the beach --ar 9:21 --chaos 40 --stylize 1000',
  results: 'ad2fd5e8-09f5-49ed-b00c-c4ce492deb6b',
  user_created: '4df804f1-e32e-4e1c-be58-6acbe48cce98',
  date_created: '2023-09-01T04:36:06.549Z',
  status: 'completed',
  progress: null,
  url: 'https://cl.imagineapi.dev/assets/ad2fd5e8-09f5-49ed-b00c-c4ce492deb6b/ad2fd5e8-09f5-49ed-b00c-c4ce492deb6b.png',
  error: null,
  upscaled_urls: [
    'https://cl.imagineapi.dev/assets/426e213c-8ace-462e-b62c-ba1b63ace088/426e213c-8ace-462e-b62c-ba1b63ace088.png',
    'https://cl.imagineapi.dev/assets/665b2bf2-66ea-4a18-a3f5-5532edd4d2e1/665b2bf2-66ea-4a18-a3f5-5532edd4d2e1.png',
    'https://cl.imagineapi.dev/assets/a73df4d2-3d3d-418f-bc56-8d338b2f33a4/a73df4d2-3d3d-418f-bc56-8d338b2f33a4.png',
    'https://cl.imagineapi.dev/assets/c6dd3426-dcf1-4753-ba64-a9bcacbd0723/c6dd3426-dcf1-4753-ba64-a9bcacbd0723.png'
  ],
  upscaled: [
    '426e213c-8ace-462e-b62c-ba1b63ace088',
    '665b2bf2-66ea-4a18-a3f5-5532edd4d2e1',
    'a73df4d2-3d3d-418f-bc56-8d338b2f33a4',
    'c6dd3426-dcf1-4753-ba64-a9bcacbd0723'
  ],
  ref: null
}

upscaled_urls 的样子如下: 自动放大的 Midjourney 图像