释放生产力,在 Laf 云开发上快速部署你的 Midjourney API

956 阅读2分钟
  1. 访问登录:laf 云开发 - life is short, you need laf.

  2. 新建一个应用,并选择免费资源 image.png

  3. 点击开发按钮,进入 Laf Web IDE image.png

  4. 点击左下方的 NPM 依赖 👉 + 按钮,安装 midjourney 保存并等待重启 image.png

  5. 创建你的第一个云函数,输入函数名,其余选项默认,最后点确定按钮 image.png

  6. 拷贝并审查下面代码到 midjourney-api 云函数中,如果你没有 SERVER_ID、CHANNEL_ID、SALAI_TOKEN ,可以在这篇文章中的公共账号群里找 [米开朗基杨]获取 - Laf 开发者社区

import cloud from '@lafjs/cloud'
import { Midjourney, MidjourneyMessage } from 'midjourney'
const SERVER_ID = '' // Midjourney 服务 ID
const CHANNEL_ID = '' // Midjourney 频道 ID
const SALAI_TOKEN = '' // Midjourney 服务 Token

const Limit = 100
const MaxWait = 3

const client = new Midjourney({
  ServerId: SERVER_ID,
  ChannelId: CHANNEL_ID,
  SalaiToken: SALAI_TOKEN,
  Debug: true,
  SessionId: SALAI_TOKEN,
  Limit: Limit,
  MaxWait: MaxWait
});

export default async function (ctx: FunctionContext) {
  const { type, param } = ctx.body
  switch (type) {
    case 'RetrieveMessages':
      return await RetrieveMessages(param)
    case 'imagine':
      return await imagine(param)
    case 'upscale':
      return await upscale(param)
    case 'variation':
      return await variation(param)
  }

}

// 查询最近消息
async function RetrieveMessages(param) {
  console.log("RetrieveMessages")
  const client = new MidjourneyMessage({
    ChannelId: CHANNEL_ID,
    SalaiToken: SALAI_TOKEN,
  });
  const msg = await client.RetrieveMessages();
  console.log("RetrieveMessages success ", msg)
  return msg
}

// 创建生图任务
async function imagine(param) {
  console.log("imagine", param)
  const { question, msg_Id } = param
  const msg = await client.Imagine(
    `[${msg_Id}] ${question}`,
    (uri: string, progress: string) => {
      console.log("loading", uri, "progress", progress);
    }
  );
  console.log("imagine success ", msg)
  return true
}

// upscale 放大图片
async function upscale(param) {
  console.log("upscale", param)
  const { question, index, id, url } = param
  const hash = url.split("_").pop()?.split(".")[0] ?? ""
  console.log(hash)
  const msg = await client.Upscale(
    question,
    index,
    id,
    hash,
    (uri: string, progress: string) => {
      console.log("loading", uri, "progress", progress);
    }
  );
  console.log("upscale success ", msg)
  return msg
}

// variation 变换图片
async function variation(param) {
  console.log("variation", param)
  const client = new Midjourney({
    ServerId: SERVER_ID,
    ChannelId: CHANNEL_ID,
    SalaiToken: SALAI_TOKEN,
    Debug: true,
    SessionId: SALAI_TOKEN,
    Limit: Limit,
    MaxWait: 100
  });
  const { question, index, id, url } = param
  const hash = url.split("_").pop()?.split(".")[0] ?? ""
  const msg = await client.Variation(
    question,
    index,
    id,
    hash,
    (uri: string, progress: string) => {
      console.log("loading", uri, "progress", progress);
    }
  );
  console.log("variation success ", msg)
  return msg
}
  1. 调试代码,我们先试试文生图,运行结果返回 true 表示成功了,控制台打印 imagine success 'null' , 我们需要等待 midjourney 生成图片,通过 RetrieveMessages 查看结果。 image.png

8.调整 RetrieveMessages 代码,根据 msg_Id 过滤出我们传给 Midjourney Bot 的返回消息

// 查询最近消息
async function RetrieveMessages(param) {
  console.log("RetrieveMessages")
  const { question, msg_Id } = param
  const client = new MidjourneyMessage({
    ChannelId: CHANNEL_ID,
    SalaiToken: SALAI_TOKEN,
  });
  const msg = await client.RetrieveMessages();

  if (msg && msg.length) {
    const result = msg.filter(item => {
      const m_id = item.content.match(/\[(.*?)\]/) && item.content.match(/\[(.*?)\]/)[1]
      return m_id === msg_Id
    })
    console.log("RetrieveMessages success result", result)
  }
  console.log("RetrieveMessages success all msg")
  return msg
}

重新绘制图片 image.png 修改type字段值为RetrieveMessages,查看打印结果,我们已经成功获得了返回消息。如果你的 attachments是空数组,请耐心等待一段时间,在 Midjourney 绘图成功后,再次运行接口调试。 image.png 最后浏览器打开attachments.url或者proxyUrl访问图片,可爱的皮卡丘绘制成功了🎉🎉🎉 image.png

以上就是本篇文章的全部内容,快来免费上手体验吧,如果你想了解更多有关 Laf 请访问这个地址 介绍 | laf 云开发 最后感谢 Laf 官方举办的这次活动,也感谢群内大佬们的帮助💗,云开发将会是潮流!!