无需魔法三分钟上线Midjourney应用,【附源码】【示例】

news2024/12/23 1:49:47

ps:我是标题党,目前还没见过三分钟完成任务的,三分钟只能打通Midjourney接口。我花了一天时间接入应用哈哈哈!

c745f262fef04d5196fa54ff085d44f5.png

首先,我要感谢laf赞助我,让我可以免费使用Midjourney进行开发和测试。来自白嫖党的快乐。

其次,我要感谢白夜、米开朗基杨@sealos.io等大佬的耐心解答和AlexDev大佬很细、全网最细的指导文档,让我更快地借助laf搭建我的项目。

那么,什么是laf呢?它可以帮助开发者像写博客一样写代码,随时随地快速发布上线应用。点击了解一下

最后,别忘了文末的【体验网址】哦。如果不及时体验,说不定哪天接口就挂了。所以,赶紧去试试吧,感受一下laf+mj带来的奇妙体验!

开始

最近laf又在搞事情,有一个快速上手Midjourney《人人都能接入 Midjourney》的活动,具体活动,可以查看laf开发者社区。现在只要注册新账号就送一个月免费试用,因为mj需要魔法,所以国内的laf官网不能体验mj,我们需要注册laf的新加坡环境账号,网址👉🏻laf 云开发。

首先我的思路是,先打通mj接口,再通过上层代码处理mj的数据,不管是mj还是GPT,都是要有底层代码对接api,再去扩展,至于最后要对接什么应用看个人需求。

代码

第一步,你得先添加依赖才能进行后续开发🐶

5b78c86d9aef43158123a16015c833b5.png

添加Midjourney依赖

ac6bf67b81f54916870e752562ef8c8c.png

添加完成后保存并重启

laf可以通过云函数实现api接口,不理解的可以先去了解一下laf云平台快速入门。

laf官方提供了一个云函数对接mj:

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
}

没有账号可以到社区找 米开朗基杨@sealos.io 大佬 要获取方式。

  • 画图

画图首先需要创建绘画任务,比如我的需求就是一只鸡正在打篮球穿着吊带,调用云函数的imagine方法。请求方式都是用post。

{
  "type": "imagine",
  "param": {
    "question": "A chicken is playing basketball, wearing a white shirt and black suspender, with gray white hair in the middle, and leather shoes,He is thin and thin",
    "msg_Id": 1684585158 //自己定义便于按id查询生成的图片,msg_Id 别打错了
  }
}

请求成功会返回true,稍等一会儿就可以调用查询方法查看生成的图片链接

  • 查询

RetrieveMessages方法是查询最近的图片信息,传type就可以了

{
  "type":"RetrieveMessages"
}

如果要根据id查询,可以修改一下云函数里的方法:

// 查询最近消息根据id
async function RetrieveMessagesById(param) {
  console.log("RetrieveMessages")
  const client = new MidjourneyMessage({
    ChannelId: CHANNEL_ID,
    SalaiToken: SALAI_TOKEN,
  });
  const msg = await client.RetrieveMessages();
  const result = msg.find(v=>v.content.includes(param.msg_Id))
  return result
}

这样就可以按id查询了,参数只要多传一个id就行

{
  "param": {
    "msg_Id": "tudou007"
  },
  "type": "RetrieveMessagesById"
}

返回结果就会包含生成的图片链接,url,但是在国内是打不开的,解决办法看个人。这里推荐使用laf云存储,你的免费laf有一定额度的云存储空间,一般测试够用了,具体怎么用,我还在研究哈哈哈。

注意:返回的数据可能会缺少部分属性,不用在意,有可能任务创建失败,有可能在排队出图,或者是正在出图,一般情况下,宽高大于512就成功了。我的处理方案就是,只要拿不到我想要的数据,统一按正在出图中处理。

  • 放大

放大图片就是四张缩略图选一张放大,这里的id就是返回的id,index就是四张图片的下标,question就是你创建绘图任务的prompt,url不用说了。放大之后重新根据id获取就会得到一张大图。

{
  "type": "upscale",
  "param": {
    "id": "dasdasdasdasd23123",
    "question":"chekin",
    "index": 3,
"url":"https://cdn.discordapp.com/attachments/1109368983364313204/1109460469628022915/johnsonmaureen_1684585158_a_chekin_d5b7e35c-0fce-4f7d-b440-35f5602d2f25.png"
  }
}
  • 重绘

可以从四张图中选一张图的风格进行重绘,参数和放大一样的,只是type换了

{
  "type": "variation",
  "param": {
    "id": "1109460470152319086",
    "question": "a chekin",
    "index": 3,
    "url": "https://cdn.discordapp.com/attachments/1109368983364313204/1109460469628022915/johnsonmaureen_1684585158_a_chekin_d5b7e35c-0fce-4f7d-b440-35f5602d2f25.png"
  }
}

完结

完结撒花,第一次在csdn写文章,写的不好多多包涵,

我的公众号有个小彩蛋: 玛卡巴卡和他的猫     

不用找体验地址了,mj体验账号被封了,目前来晚的还想白嫖的同学就等我的应用吧,等我做完会有体验入口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于linux下的高并发服务器开发(第一章)- 静态库和动态库的对比1.9

01 / 程序编译成可执行程序的过程 静态库、动态库区别来自链接阶段如何处理,链接成可执行程序。分别称为静态链接方式和动态链接方式。 02 / 静态库的制作过程 03 / 动态库的制作过程 04 / 静态库的优缺点 05 / 动态库的优缺点

[工具推荐] LICEcap 动图gif录制工具 轻量/开源/免费

先声明:不是广子,单纯分享 LICEcap 之前用Windows时,就用这个软件 后来用mac了,发现它也有mac版的,也支持m1芯片的苹果电脑 这是目前用过最轻量的gif录制软件了, 程序整体都不到1mb 该有的功能都有&a…

『表面』无序点云的快速三角化

1、PCL中的贪婪投影三角化(GreedyProjectionTriangulation)算法 该算法用于将无序点云数据转换为表面三角网络模型的表面重建算法。可以根据点云数据中的几何信息,自动构建出具有连续性和平滑性的三角网络模型。 具体步骤: 预处…

马斯克在与创业公司OpenAI竞争的新竞标中公布了xAI

北京时间7月13日凌晨,马斯克在Twiiter上毫无预警地宣布:“xAI正式成立,去了解现实。”(Announcing formation of xAI to understand reality.)这是马斯克首次官宣xAI的进展。 xAI的Twitter账号中目前还没有多少内容&a…

嵌入式Linux开发实操(四):pinctrl和dt_binding

Linux/pinctrl subsystem,统一了各SOC/MCU厂商的PIN引脚管理了吗? pin命名遵循IC spec上的命名。它是如何实现驱动到硬件的对接的呢?在CPU、Memory等完成初始化加载之后,显然就进入到了嵌入式linux的核心部分,管理对接硬件,这正是pinctrl要完成的工作。 Linuxpinctrl架构…

el-date-picker 日期时间进行限制,精确到时分秒

需求:用户只能选择当时时间或当前时间之前的时间,且精确到时分秒 实现效果:用户只能选择当前时间的时间,如果选择是当天之前的时间,时分秒不做限制,如果选择的是当天时间,就要判断时分秒&#…

Stable Diffusion 丝滑无闪烁AI动画 Temporalkit+Ebsynth+Controlnet

早期的EbSynth制作的AI视频闪烁能闪瞎人的双眼,可以通过【temporalkit+ebsynth+controlnet】让视频变得丝滑不闪烁。 文章目录 插件准备丝滑视频制作插件准备 下载安装 EbSynth官网,这里需要输入email地址。 下载压缩包解压缩到任意位置,这里我放到了ebsynth_utility下。 …

Flowable边界事件-消息边界事件

消息边界事件 消息边界事件一、定义1. 图形标记2. 设置消息 选择消息3. XML标记 二、测试用例2.1 定时边界事件xml文件2.2 消息边界事件测试用例 总结 消息边界事件 一、定义 接收到消息触发事件 1. 图形标记 2. 设置消息 选择消息 3. XML标记 定时边界事件的XML <messag…

【sgWaterfall】Vue实现图文瀑布流布局模式,图片预加载显示占位区域阴影,加载完成后向上浮动动画出现

Vue实现图文瀑布流布局模式&#xff0c;图片预加载显示占位区域阴影&#xff0c;加载完成后向上浮动动画出现 sgWaterfall.vue源码 <template><ul :class"$options.name" :style"waterfallStyle"><li v-for"(a, i) in items "…

业务变革与架构双驱动的多项目管理︱海康威视流程变革咨询顾问张燕飞

海康威视数字技术股份有限公司流程与变革管理部流程变革咨询顾问张燕飞女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;业务变革与架构双驱动的多项目管理。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要…

如何在MySQL中安装示例数据库sakila

就像 SQLServer 示例数据库一样,MySQL 也有示例数据库,比如sakila;Sakila 数据库最初由 MySQL AB 文档团队的前成员 Mike Hillyer 开发,旨在提供一个标准模式,可用于书籍、教程、文章、示例等中的示例,它包含示例视图、存储过程和触发器。 以下是在服务器上安装sakila数…

33个字段,我乏了!

家人们&#xff0c;谁懂啊&#xff1f;&#xff1f;最近两天&#xff0c;一直在测试数据报告&#xff0c;一个页面有30多个字段的那种&#xff0c;从基础表写sql语句&#xff0c;执行&#xff0c;与页面显示的字段值进行对比&#xff0c;一个挨着一个&#xff0c;讲真&#xff…

热更新时:app经常因为HBuilder X的更新提示HTML5+ Runtime版本不匹配的问题

直接暴力解决问题。 "app-plus" : {"compatible": {"ignoreVersion": false,//可选&#xff0c;Boolean类型&#xff0c;是否忽略版本兼容检查提示}, }APP模块等相关配置改变还是需要整包APK更新。 只有热更新改前端代码&#xff0c;推荐直接配置…

驱动 DAY10

platform驱动实现 match-devicetree.c #include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h> #include <linux/gpio.h> #include <linux/of.h> #include <linu…

electron+vue3全家桶+vite项目搭建【21】自定义无边框窗口拖拽移动

文章目录 引入实现思路实现步骤1.主进程监听窗口移动2.通信工具补充ipc调用3.渲染进程封装通用拖拽组件 测试 引入 如果你尝试过透明窗口&#xff0c;并控制透明部分事件击穿&#xff0c;就会发现使用 drag属性样式去控制窗口拖拽会导致点击事件失效&#xff0c;并且带drag属性…

有没有后端程序员想要兼职的?

有一个非常有意思的现象&#xff1a; 后端看不起前端&#xff0c;认为前端是好入门&#xff0c;含金量低&#xff0c;一下就能学会的页面侠&#xff1b; 前端看不起后端&#xff0c;认为后端是每天CRUD、调参、拿来主义的搬砖工&#xff1b; 而实际上&#xff0c;大家都是给老板…

vue生命周期四个阶段(created和mount)

1.四个阶段 1&#xff09;必经阶段 2&#xff09;非必经阶段 提示&#xff1a;主动调用 vm.$destroy() 函数销毁后&#xff0c;可用 vm.$mount("#app") 将断开的 new Vue() 和页面重新建立虚拟 DOM 树&#xff0c;重新绑定起来挂载界面。 2. 生命周期钩子函数&…

【大数据】大数据简介

大数据简介 大数据基础平台架构实际应用关键技术 Hadoop 分布式计算平台Hadoop生态系统Hadoop安装和使用 HDFS分布式文件系统NamenodeSecondary NamenodeDataNodeblock 大数据基础 平台架构 实际应用 关键技术 Hadoop 分布式计算平台 Hadoop生态系统 Hadoop安装和使用 参考htt…

单向链表基本操作

目录 初始化链表 插入 删除 遍历 销毁 清空 初始化链表 代码&#xff1a; struct LinkNode* Init_LinkList() {struct LinkNode* head (struct LinkNode*)malloc(sizeof(struct LinkNode));head->data -1;head->next NULL;// 尾部指针struct LinkNode* pRear …

概率论的学习和整理15: 超几何分布,二项分布,泊松分布是如何趋近收敛的?

目录 1 问题&#xff1a; 2 结论 3 实验1 4 实验2 5 实验3 6 实验4 5 各种规律总结 5.1 1 5.2 2 5.3 3 5.4 4 6 超几何分布&#xff0c;二项分布&#xff0c;泊松分布&#xff0c;三者用EXCEL模拟 6.1 简单的扩展到泊松分布 6.2 比较整体的动态过程&…