使用我们的Midjourney API快速入门
概述
本指南假定您正在使用演示帐户 (opens in a new tab)。我们将通过生成一张图片并查看结果来快速开始。您也可以选择使用的编程语言。
最好的部分是,您可以复制代码并立即使用!
🚀
通过获取演示帐户 (opens in a new tab)最简单的开始生成Midjourney图片的方法。
获取身份验证令牌
- 一旦购买了演示帐户 (opens in a new tab),您将收到一封包含用户名和密码的电子邮件。使用它登录到我们的演示服务器:https://cl.imagineapi.dev (opens in a new tab)。
- 登录后,点击左下角的
用户图标
: - 这是您的用户设置。滚动到底部,找到
Token
字段并点击圆形箭头按钮
以重新生成令牌: - 这将创建一个新的令牌,您可以用它来授权您的API调用,所以
复制该令牌
。请将它保存在某个文件中,因为您很快就会用到它: - 然后
点击右上角的复选框按钮
以保存您的帐户更改:
就是这样。现在我们将使用该令牌来验证我们的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
将保持不变,我们可以使用它来获取数据和状态 status
是pending
,这是首次创建图像生成时的默认值- 当完成生成(
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
的样子如下: