无需魔法,教你Midjourney随意用【内附源码】【示例】

这篇具有很好参考价值的文章主要介绍了无需魔法,教你Midjourney随意用【内附源码】【示例】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

感谢laf提供云资源赞助,小伙伴可白piao用来做测试。

感谢laf团队、白夜、米开朗基杨@sealos.io的热心布道 ,life is short, u need laf : )

欢迎你也来加入laf开发。

正好现在laf在做一个活动,一起搞起来吧人人都能接入 Midjourney

目标
由于Midjourney官方并没有提供api接口,有大佬开封装了通过discord间接操作使用midjourney的nodejs包,我们通过在自己的程序中集成这个三方库来完成midjourney的使用,这是代码层面的核心事情。另外就是大家都懂的原因没办法访问midjourney,我们通过https://laf.dev 的新加坡节点Serverless来运行我们的程序,我们再通过访问在laf部署的程序来连接midjourney服务。

注册laf账号
Laf是环界云开发的一个Serverless框架,它可以帮助开发者快速构建具有AI能力的分布式应用。使用Laf,你可以像写博客一样轻松地编写代码,并随时随地快速发布上线应用。

现在Laf提供免费资源供开发者测试使用,这里我们直接用免费的就足够跑程序了。

无需魔法,教你Midjourney随意用【内附源码】【示例】

laf服务区分杭州和新加坡,从不同域名进入注册不同区域的账号。

新加坡:新加坡地址 (今天的midjourney我们要用新加坡的服务)

杭州:杭州地址

手机号码短信注册,过程太简单,这里不多说了。

编写函数

先在云开发面板添加一个函数,取个自己喜欢的函数名,我这里取名:midjourney 

无需魔法,教你Midjourney随意用【内附源码】【示例】

添加函数代码

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
}

 添加相关函数所需的依赖:

无需魔法,教你Midjourney随意用【内附源码】【示例】

无需魔法,教你Midjourney随意用【内附源码】【示例】

 填写关键配置信息,用于初始化一个midjourney客户端:

const SERVER_ID = '' // Midjourney 服务 ID

const CHANNEL_ID = '' // Midjourney 频道 ID

const SALAI_TOKEN = '' // Midjourney 服务 Token

这三项配置信息可以白piao @米开朗基杨@sealos.io 提供的满级账号用来测试够了,仔细看前文的活动帖即可获得。

如果有自己的账号,可以登录discord在频道发一条信息,F12在请求中找到。

完成以上操作步骤,点击laf云开发节点的发布,即可测试midjourney api接口调用。

无需魔法,教你Midjourney随意用【内附源码】【示例】

接口调试:

先点击发布左侧的链接,复制。这就是我们写好的midjourney服务api链接了。

无需魔法,教你Midjourney随意用【内附源码】【示例】

我这里用postman调试api接口:

先来调用生成图片

无需魔法,教你Midjourney随意用【内附源码】【示例】

查询历史任务:

无需魔法,教你Midjourney随意用【内附源码】【示例】

从历史任务中获得我们发送的生图任务和结果。

查询接口一次返回多条数据,返回的是这个频道中的数据,目前这个测试配置信息是多人共享的,所以能查到其他人生成的图片任务。

查询到结果后,记得提取出:id、content、url这几个字段,后面放大和重新绘制会用到。

来看看生成的图片效果吧。

无需魔法,教你Midjourney随意用【内附源码】【示例】

一次生图任务会返回四张预览图供你选择,选择一张你喜欢的,执行放大即可获得高清大图。

 这里我们把第二张图放大看看:

无需魔法,教你Midjourney随意用【内附源码】【示例】

 看看放大的图片效果:

无需魔法,教你Midjourney随意用【内附源码】【示例】

非常高清,很有质感。midjourney 杠杆滴。 

小伙伴可能会遇到生成图片结果的url链接无法访问的情况,是因为大家都懂的原因。

这里我们仍然可以继续使用laf提供的云存储能力来转存图片,示例代码如下:

import cloud from '@lafjs/cloud'
import axios from 'axios'
import { S3 } from "@aws-sdk/client-s3";

const s3Client = new S3({
  endpoint: process.env.OSS_EXTERNAL_ENDPOINT,
  region: process.env.OSS_REGION,
  credentials: {
    accessKeyId: process.env.OSS_ACCESS_KEY,
    secretAccessKey: process.env.OSS_ACCESS_SECRET
  },
  forcePathStyle: true,
})


export default async function (ctx: FunctionContext) {
  console.log('storage image')
  const { url } = ctx.body
  if (!url) {
    return { err: "url is empty" }
  }

  let key = ''
  if (url.indexOf('https://cdn.discordapp.com/') == 0) {
    key = url.replace('https://cdn.discordapp.com/', '')
  }
  if (url.indexOf('https://media.discordapp.net/') == 0) {
    key = url.replace('https://media.discordapp.net/', '')
  }
  await uploadImgToMinio(url, key);

  return { data: 'https://<你的云存储bucket>.site.laf.dev/' + key }
}


async function uploadImgToMinio(imgurl, key) {
  const { data } = await axios.get(imgurl, { responseType: 'arraybuffer' });
  const buffer = Buffer.from(data, 'binary');
  await s3Client.putObject({
    Bucket: <你的云存储bucket>,
    Key: key,
    Body: buffer,
    ContentType: 'application/octet-stream'
  });
}

这里将原始的图片路径完全一致的转存到laf云存储中保存,保存成功后我们就可以通过laf云存储的bucket链接地址来访问图片了。

更多玩法等你来挖掘,就讲到这里。

下面是我用laf做的样例,不要在意页面美感,主要做接口实验使用。

示例:传送门文章来源地址https://www.toymoban.com/news/detail-501558.html

到了这里,关于无需魔法,教你Midjourney随意用【内附源码】【示例】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 免费无需魔法会语音聊天的ChatGPT

    今天发现了一个很好的ChatGPT,可以语音聊天,而且免费无需魔法 角色目前包括夏洛克、雷电影等等,对话的声调完全模拟了原角色! 目前只有英文和日语两种对话,我们可以文字输入或者语音输入,中文即可,系统会语音回答,自带翻译。 联系口语交流还是很不错的,目前

    2024年02月01日
    浏览(34)
  • midjourney使用【内附12生肖图】

    之前有过一篇文章介绍如何注册midjourney链接 midjourney就是一个discord的图片生成的服务器,可以通过你给出的提示词生成对应的图片,前几篇博客尝试了stable diffusion【自己部署可以免费使用,但是对资源消耗极大,云服务器也不便宜】的部署和安装以及体验,今天试试用mj【付

    2024年02月09日
    浏览(32)
  • ChatGPT 平替天花板:HuggingFace 版 ChatGPT 来了,无需魔法无需等待直接起飞 ~

    二话不说上链接 https://huggingface.co/chat/ 请直接问中文问题,要是返回英文直接上浏览器翻译同步没毛病。 如果体验过了,且听我分(jiao)说(bian)一下,HuggingFace 版 ChatGPT 如何能当得起 ChatGPT 平替天花板 。 我们先来看看背后的公司HuggingFace 是干啥的? HuggingFace 是一个非常

    2024年02月01日
    浏览(49)
  • AIGPT中文版(无需魔法,直接使用)安装使用教程

    AIGPT是一款非常强大的人工智能技术的语言处理工具软件,它具有AI绘画功能、AI写作、写论文、写代码、哲学探讨、创作等功能,可以说是生活和工作中的好帮手。 我们都知道使用ChatGPT是需要账号以及使用魔法的,其中的每一项对我们初学者来说都是非常不利的,但是AIGP

    2024年02月08日
    浏览(36)
  • armbian折腾之docker搭建chatgptweb指导(无需魔法)

    好久都没有折腾armbian,导致吃了很长时间的灰,今天偶然看到B站UP主 JeeJK007 的搭建视频,便想着能不能在本地搭建一个玩一玩。在此感谢UP主 JeeJK007 的无私奉献! 优势:docker部署没有硬件环境限制,使用第三方API,不用魔法,成本低 使用的工具和资料 ChatGPT-4 Turbo网站搭建

    2024年02月03日
    浏览(34)
  • 小宁ChatGPT智能机器人上线,无需魔法注册即可使用!

    ​大家好,今天我要向大家介绍一款基于人工智能技术的聊天机器人——ChatGPT。ChatGPT可以与用户进行自然语言交互,回答用户的问题、提供服务、进行闲聊等,让聊天变得更有趣。 小宁ChatGPT是对接ChatGPT官方api,实现无需魔法无误差信息同步传输到网站,你只需在小宁Chat

    2024年02月04日
    浏览(33)
  • 这次彻底不需要账号了,无需魔法永久白嫖GPT

    自GPT风靡以来,大家用的是不亦乐乎,你用他去解决过实际问题,你用他去写过代码,你用他去修改过bug,你用他去写过sql,你用他去画过图,你问过他你能想到的任何“刁钻”问题。 你,有点离不开它了! 你由最开始的不会注册账号,不懂得魔法的使用,慢慢的成了gpt使

    2024年02月09日
    浏览(23)
  • Claude 使用教程 AI助手,可平替Chatgpt,无需魔法

    今天来分享下Claude AI工具2023-4月最新使用方法, Claude是Anthropic公司开发的一种 基于大型语言模型的AI助手,类似于ChatGPT 。 背景:Anthropic是一家由OpenAI的前联合创始人Dario Amodei和他的妹妹Daniela Amodei创立的AI研究公司 。他们的目标是创建可靠、可解释和可对齐的AI系统,以解

    2024年02月05日
    浏览(31)
  • 对标ChatGPT3.5,支持手机电脑网页使用,无需魔法

    说到 Claude 是什么,大家可能没听说过。 但是说到 OpenAI,说到 ChatGPT,相信大家一定听说过,玩过。 PS:关于 Claude 网页版的注册教程,我之前已经写过文章了,现在额外介绍如何使用手机App和电脑软件来玩 Claude。 Claude ,这是一支由前 OpenAI 的研究员和工程师组成的团队创建

    2024年02月06日
    浏览(37)
  • 基于GPT-4的 IDEA 神仙插件,无需魔法,亲测好用!

    近日,Intellij IDEA的插件商店,悄然上线了一个新的插件——Bito,据说可以基于GPT-4和ChatGPT来写代码。短短几天,已经有50多K的下载量了。 我帮大家试用了一下,亲测好用! 根据插件介绍显示,Bito有助于开发人员通过将GPT-4和ChatGPT引入IDE来大大提高他们的效率。 Bito使用了

    2023年04月27日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包