不用魔法,快速、手摸手上线Midjourney!【附源码】【示例】

首先来一波感谢:
感谢laf提供赞助,目前可以免费使用Midjourney进行开发和测试。
感谢白夜、米开朗基杨@sealos.io的耐心解答,让我对laf有了更多的使用与了解。
什么是laf?来了解下。
文末有【示例】

开始

废话不多说,进入正题。
laf在做一个活动,可以使用快速上手Midjourney《人人都能接入 Midjourney》。具体活动,可以查看论坛。

原理

原理部分不涉及代码,涉及背景介绍,熟悉的同学可以略过。因为midjourney官方没有提供API功能,所以有国外大神将开源了一款模拟请求工具,来请求midjourney,laf将这代码集成到内部的npm包中。如果需要github地址,欢迎留言,我私信给您。
所以laf平台,加上下面的实例代码可以很好的快速接入到系统中。

开始

要现有个laf账号,会有免费1月的试用,本次调用mj(以下代指midjourney),所以要在laf.dev上注册使用,这是运行在新加坡环境上。

代码逻辑

我的核心思想是这样的:先要有个核心与midjourney交互的代码,上层的我们想做的业务逻辑可以自己定义。

代码

laf 是一个云开发平台,可以将代码暴露成api形式,进行调用,一些其他鉴权等,可以在之前我写的文章中找到灵感:腾讯云开发迁移实录

  • 要做一个云函数,处理与midjourney交互,我这里起名云函数mj-send
import cloud from '@lafjs/cloud'
import { Midjourney, MidjourneyMessage } from 'midjourney'
const SERVER_ID = '' // Midjourney 服务 ID
const CHANNEL_ID = '' // Midjourney 频道 ID
const SALAI_TOKEN = '' // Midjourney 服务 Tokenconst Limit = 100
const MaxWait = 3const 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.bodyswitch (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 } = paramconst 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 } = paramconst 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 } = paramconst 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付费账号,没有key?大佬我们做朋友,留言我来告诉你。
发布即可调用,怎么调用?我把curl给你,你看看结构就懂了,该替换的替换。

  • 画图

画图需要一些时间,这里默认使用的fast,但也是会花时间的,所以成图我们要在之后调用查询接口查看。

  • question:就是prompt,这里要输入英文。
  • 关注下参数msg_Id,后面有用
curl --location --request POST 'https://<你的发布地址服务>' \
--header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Content-Type: application/json' \
--data-raw '{"type": "imagine","param": {"question": "a dog","msg_Id": 1684585158}
}'
  • 查询
curl --location --request POST 'https://<你的发布地址服务>' \
--header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Content-Type: application/json' \
--data-raw '{"type":"RetrieveMessages"
}'

如何获取到我刚创建的图呢?先看一下返回的结果。

[{"id": "1109565864640008202","type": 0,"content": "**[1684582132] a dog --seed 8925 --v 5** - <@1013684342851117146> (fast)","channel_id": "1109368983364313204","author": {"id": "936929561302675456","username": "Midjourney Bot","global_name": null,"avatar": "4a79ea7cd151474ff9f6e08339d69380","discriminator": "9282","public_flags": 589824,"bot": true,"avatar_decoration": null},"attachments": [{"id": "1109565863994077215","filename": "johnsonmaureen_1684582132_a_dog_a062b5e2-ab39-40b0-b281-1365695529d5.png","size": 4275948,"url": "https://cdn.discordapp.com/attachments/1109368983364313204/1109565863994077215/johnsonmaureen_1684582132_a_dog_a062b5e2-ab39-40b0-b281-1365695529d5.png","proxy_url": "https://media.discordapp.net/attachments/1109368983364313204/1109565863994077215/johnsonmaureen_1684582132_a_dog_a062b5e2-ab39-40b0-b281-1365695529d5.png","width": 2048,"height": 2048,"content_type": "image/png"}]}**省略其他数据**
]

返回结果为数组,还记得上面的msg_Id吗,在JSON结构中查看content部分,就可以看到
"content": "**[1684582132] a dog --seed 8925 --v 5** - <@1013684342851117146> (fast)", 所以,我们可以用这个字段来进行筛选。$.attachments[0].url就是成图了。

  • 选取生成大图
    如果再返回的四张图有一张看得不错,怎么生成大图呢?先给你个表格,告诉你哪是1,哪是3
12
34

然后来看如何传参

curl --location --request POST 'https://<你的发布地址服务>' \
--header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Content-Type: application/json' \
--data-raw '{"type": "upscale","param": {"id": "1109460470152319086","question":"a dog","index": 3,
"url":"https://cdn.discordapp.com/attachments/1109368983364313204/1109460469628022915/johnsonmaureen_1684585158_a_dog_d5b7e35c-0fce-4f7d-b440-35f5602d2f25.png"}
}'

解释下参数:

  • id: 是查询返回结果体里的id
  • question,是最开始输入进去的prompt
  • index: 你想要的第几张图
  • url:是查询返回结果体里的url,四张图拼一起的那个。

别问我怎么知道的,我都是翻代码看得。

  • 重绘
    当看上这4张图中某一个的风格或者样式之后,可以根据这个风格重绘。
curl --location --request POST 'https://<你的发布地址服务>' \
--header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Content-Type: application/json' \
--data-raw '{"type": "variation","param": {"id": "1109460470152319086","question": "a dog","index": 3,"url": "https://cdn.discordapp.com/attachments/1109368983364313204/1109460469628022915/johnsonmaureen_1684585158_a_dog_d5b7e35c-0fce-4f7d-b440-35f5602d2f25.png"}
}'

参数解释不说了,跟上面类似。

至此教程结束了

赶紧去上手做点什么吧,实践出真知~

作品展示

这次其实是laf在组织活动,想我这种平台级别思考大佬的人,不会去钻到某个应用当中,我来看看大家都画了什么图,所以我做了个简陋的页面,本人前端能力有限,代码实现全靠ChatGPT。
上链接:

laf比赛作品大赏

如果觉得不错打个赏吧,后面是答疑环节

问题

  • 我怎么知道mj的图画完没有呢?
    可以根据$.attachments[0].width的尺寸大小来看,如果小于2048,则没有生成完,没生成完其实应该是512。
  • 怎么让图片结果与请求msg_Id绑定?
    正如上文所说要自己实现一个逻辑去匹配结果,另外还有一个就是用好触发器,他会定时执行你的服务,这样你就可以将数据进行增量处理。

`

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国外大神竟用 ChatGPT 成功打造了一个「虚拟空间传送」系统!

相信大家小时候躺在床上&#xff0c;都曾设想过这么一个场景&#xff1a; 当你闭上眼睛时&#xff0c;感觉身心十分安宁&#xff0c;物理世界慢慢淡出&#xff0c;身体也随着变得飘逸&#xff0c;一切仿佛只剩下呼吸声和心跳声。 一阵微风拂过&#xff0c;你缓缓睁开双眼&#…

国外大神用 ChatGPT 成功打造一个「虚拟空间传送」系统!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 相信大家小时候躺在床上&#xff0c;都曾设想过这么一个场景&#xff1a; 当你闭上眼睛时&#xff0c;感觉身心十分安宁&#xff0c;物理世界慢慢淡出&#xff0c;身体也随着变得飘逸&…

基于认知神经科学的大模型【2023智源大会会议总结】

1. ChatGPT不能做什么? 刘嘉|清华大学脑与智能实验室首席研究员 1.1 演讲内容 图1.1 Sam Altman的签名 图1.2 大模型模仿理性部分、忽略感性部分 图1.3 未来可以为AI加入身体 图1.4 未来为AI赋予社交 图1.5 AGI的演化 1.2 总结 演讲目标&#xff1a;ChatGPT具有很多功…

用数据带你回顾乔丹的职业生涯

乔丹是联盟上下公认的历史第一人&#xff0c;芝加哥公牛在他带领下几乎统治了上世纪90年代NBA整整10年&#xff0c;包括分别在91-93赛季和96-98赛季拿下的两次三连冠&#xff0c;要知道&#xff0c;NBA72年历史上一共只出现过4次三连冠&#xff0c;而乔帮主一人便承包一半。下面…

NBA著名球星介绍

NBA著名球星介绍 迈克尔乔丹 毋庸置疑的篮球之神&#xff0c;六次总冠军&#xff0c;五次常规赛MVP&#xff0c;14次入选全明星他所取得的荣誉是其他任何NBA球员都无法比拟的&#xff0c;甚至从某种程度上说&#xff0c;乔丹代表这篮球这项运动&#xff0c;代表着在这项运动里所…

球星测试软件,2KOL球星测评丨篮球之神,迈克尔.乔丹(96版)

迈克尔.乔丹(96版) 迈克尔乔丹在在1984年NBA选秀中于第1轮第3位被芝加哥公牛队选中。(他的前面两位分别是哈基姆奥拉朱旺和萨姆鲍伊) 91-93赛季&#xff0c;乔丹连续2次荣膺常规赛MVP和3次总决赛FMVP &#xff0c;并率领芝加哥公牛队首夺3连冠。 93年10月6日因父亲被害而宣布退…

论“詹姆斯*哈登”到底是不是球队毒瘤

从林书豪和哈登的合作&#xff0c;到魔登的短暂快乐&#xff0c;再到保罗和安东尼以及威少&#xff0c;哈登漫长的火箭生涯里留下的遗憾可能要比成功多的多&#xff0c;他没有让火箭真正的成为顶级的冲冠球队&#xff0c;或许在那么一瞬间或者某个赛季&#xff0c;曾几何时有人…

NBA球星logo

科比退役信上的新logo镇楼。 该logo已被用于科比的公司&#xff0c;并非个人logo。 1.特雷西麦克格雷迪 由T-Mac中的T和M&#xff0c;以及1号和一个篮筐组成 2.文斯卡特 当年卡特作为耐克shox系列代言人&#xff0c;这个由VC和15组成的log&#xff0c;在每一双shox系列篮球鞋…

数据分析职位需求分析报告-数据来源于Boss直聘网站

数据分析职位需求分析报告-数据来源于Boss直聘网站 1.背景2.目的3.数据说明4.具体内容4.1 学历分析4.2 工作地点分析4.3 经验分析4.4 技能分析4.5 公司规模分析4.6 工资分析 5.结论 1.背景 目前&#xff0c;越来越多的人涌入到数据分析领域的相关工作中。然而&#xff0c;数据分…

招聘革命者:五岁BOSS直聘的慢与快

随着90后、95后成为职场主力军&#xff0c;招聘到了一个爆发的新时代拐点时刻。可以说&#xff0c;年轻人直接和老板谈工作&#xff0c;是眼下“互联网人力资源”最火的话题。 这其中&#xff0c;革命者BOSS直聘成为这一新模式的代表&#xff0c;并在日渐打破原来的招聘格局。…

AP资产 | 量化多岗位招聘(全职+实习)

量化投资与机器学习微信公众号&#xff0c;是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W关注者。 公司介绍 AP资产是一家由数个传统行业家族自有资金发起&#xff0c;逐步…

图数据库 Nebula Graph 在 Boss 直聘的应用

本文首发于 Nebula Graph 官方博客&#xff1a;https://nebula-graph.com.cn/posts/nebula-graph-risk-control-boss-zhipin/ 摘要&#xff1a;在本文中&#xff0c;BOSS 直聘大数据开发工程师主要分享一些他们内部的技术指标和选型&#xff0c;以及很多小伙伴感兴趣的 Dgraph …

Python的boss直聘职位信息数据分析系统

本项目主要利用python技术爬取BOSS直聘网站上的岗位信息&#xff0c;进行对比分析UI设计师与产品经理两个职位的趋势。爬取字段&#xff1a;工作地点&#xff0c;薪资范围&#xff0c;学历要求&#xff0c;工作经验&#xff0c;公司性质等。 模拟登陆BOSS直聘网站&#xff0c;爬…

在线招聘江湖:BOSS直聘向左 猎聘向右

在线招聘行业的“老大之争”还在持续。 作为国内最早互联网化和最早盈利的行业之一&#xff0c;在线招聘行业历经几十年发展&#xff0c;已经跑出了一批具有代表性的玩家。比如瞄准中高端招聘市场的猎聘、凭借营销打法出圈的BOSS直聘&#xff0c;老牌招聘网站前程无忧、智联招…

浅对boss直聘上广州的数据分析岗位发布情况进行分析

1.项目背景 马上就要出去实习了&#xff0c;想对广州各个区数据分析岗位做一个了解&#xff0c;看看自己成为一名数据分析师还需要学习哪些技能还有了解广州各区数据分析岗位薪资如何。 2.研究问题 &#xff08;1&#xff09;广州哪个区的数据分析岗位招的最多&#xff1f; …

python基于大数据的boss直聘数据招聘职位分析系统django

本项目主要利用python技术爬取BOSS直聘网站上的岗位信息&#xff0c;进行对比分析UI设计师与产品经理两个职位的趋势。爬取字段&#xff1a;工作地点&#xff0c;薪资范围&#xff0c;学历要求&#xff0c;工作经验&#xff0c;公司性质等。 模拟登陆BOSS直聘网站&#xff0c;爬…

Boss直聘招聘数据分析岗位小分析

嗨喽! 大家好&#xff0c;我是“流水不争先&#xff0c;争得滔滔不绝”的翀&#xff0c;18双非本科生一枚&#xff0c;正在努力&#xff01;欢迎大家来交流学习&#xff0c;一起学习数据分析&#xff0c;希望我们一起好好学习&#xff0c;天天向上&#xff0c;目前是小社畜一枚…

Boss直聘招聘数据分析-202104月版

西安boss直聘4月招聘信息分析 关于boss直聘数据采集可查看另一篇文章《Boss直聘数据采集及分析》 金三银四&#xff0c;一年里比较火热的招聘季即将结束&#xff0c;那么西安软件开发行业截止目前还剩余的招聘岗位都还有哪些呢&#xff0c;近期在查看boss站点的时候就顺手…

chatgpt赋能python:Python函数拟合:理解、应用和优化

Python函数拟合&#xff1a;理解、应用和优化 Python是一种广泛使用的高级程序设计语言&#xff0c;它具有简单易学、开放源代码、跨平台、扩展性强等特点。在数据科学领域&#xff0c;Python是数据分析和建模的重要工具之一。其中&#xff0c;Python的函数拟合库具有重要的地…

交易猫源码+后台搭建教程

教程&#xff1a;修改数据库账号密码直接使用\n\n程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3