需要的工具:
-
即梦账号(已登录状态)
-
n8n 自动化平台
-
浏览器开发者工具(用于抓包)
工作流整体架构:完整的工作流主要由以下几个部分组成:
-
表单提交(输入提示词)
-
数据封装与 UUID 生成
-
提交即梦生图请求
-
循环查询图片生成状态
-
提取图片链接
-
批量下载图片到本地
整个流程是一个标准的异步任务处理模式,需要通过轮询的方式来检查图片是否生成完成。

二、工作流拆解2.1) 表单节点这是整个工作流的起点,也是一个触发器。我做得相对简单,主要是用于前端输入生图的提示词。

我只填写了一个prompt的元素,类型为多行文本框,其它暂时不需要,如果有需要增加的,可以点击「Add Form Element」按钮增加。

提交表单后,工作流就会自动开始运行。2.2 )Edit Fields(Set) 即梦节点

这个节点用于将表单的数据再重新封装组织下,同时这里还加了 session_id 。这个是后续用于即梦生图时的用户凭证,可以先运行表单节点,然后将字段拖过去就行,不用手动输入。

2.3 ) uuid 生成

使用Code节点, Python 代码生成 UUID,每次生图都需要一个唯一的任务 ID,后续查询图片状态就是通过这个 UUID 来定位的。

importuuid
# 生成一个随机的 UUIDv4
random_uuid = uuid.uuid4()
# 通常我们需要它的字符串形式来使用
uuid_string = str(random_uuid)
# 准备输出数据,这是 n8n Code 节点所要求的格式
output_data = [
{
"json": {
"generatedUUID": uuid_string
}
}
]
returnoutput_data
2.4 )即梦生成上面的准备工作好了之后,我们现在来开发即梦生成的节点,这里使用 Http Request 节点

先登录进入即梦的生图页面
https://jimeng.jianying.com/ai-tool/generate?type=image
在谷歌浏览器(其它浏览器也可以)中,鼠标右键「检查」或 「F12」进入开发者工具页,切换到「Fetch/XHR」,可查询页面的后端接口请求地址

然后我们在即梦中提交生图的操作,找到「generate」这个接口地址。

然后以 CURL 的方式复制到粘贴板中。

打开刚才创建的 Http Request 节点,点击「Import cURL」按钮,粘贴复制的 curl 数据,「Import」 导入

打开「Send Query Parameters」选框,下面将出现 Get 的请求参数。

移到最下面, 找到 Cookies 这个头部,删除生成好的数据,我们只需要一个 session_id 的授权凭证值就行。

下面的 JSON 请求体,暂时只需要更改UUID 和 提示词即可。

2.5) 查询图片状态生图请求提交之后,不会马上就创建成功,需要等待生成完成之后才能进行后续的下载保存操作。这里使用 Wait 节点延迟一定的时间,通过接口查询状态,未完成继续循环,完成之后进入后续的操作。

2.5.1 ) Edit Fields (Set)用于给循环赋初始值, 指定一定的重试次数,防止死循环一直查同时将 UUID 和 Session_id 传给下一节点

2.5.2) 查询生成状态这个和创建的方式是一样的,我们到即梦找到查询的接口地址「get_history_by_ids」,复制 Curl 数据

添加 Http Request 节点,导入 Curl 数据,替换 Session_id 的值

请求体的 ID 值,传递我们工作流最开始创建的 UUID 的值。

2.5.3)Merge 节点这个节点用于将图片查询状态的数据和 Wait 节点的数据做下合并,由于是 2个节点合并,下面的数量选择 2 即可。

2.5.4)检测是否完成使用代码节点,检查图片是否生成完成,根据接口的结构来编写,如果没有生成 ,data 下面是空的,否则就会有数据。


这个代码,可以通过 AI 来直接写constitems = $input.all();
letisValid =false;
/*let retryCount =$input.last().json.retryCount;*/
letuuid_retryCount = items[1].json
letuuid = uuid_retryCount["uuid的值"]
letretryCount = uuid_retryCount["retryCount"]
letsession_id = uuid_retryCount["session_id"]
for(constelementofitems) {
constdataObj = element.json;
// 条件 1:ret === "0"
constretOk = dataObj.ret ==="0";
// 条件 2:data 不为空
constdata = dataObj.data;
constdataOk = data &&Object.keys(data).length >0;
// 条件 3:data 下某个 key 的 item_list 有值
letitemListOk =false;
if(dataOk) {
for(constkeyofObject.keys(data)) {
constitemList = data[key].item_list;
if(Array.isArray(itemList) && itemList.length >0) {
itemListOk =true;
break;
}
}
}
// 如果这一项满足三个条件,就认定整体为真
if(retOk && dataOk && itemListOk) {
isValid =true;
break; // 不用继续检查后面的项
}
}
// 只返回一个结果
return[
{
json: {
valid: isValid,
retryCount: retryCount,
uuid: uuid,
session_id:session_id
}
}
];
2.5.5)IF 节点通过判断上面 Code 节点的返回值来判断图片是否创建完成

2.5.6)Edit Fields Set如果查询图片还没有创建完成,增加循环次数,进入下一次循环,同时传递循环需要的数据。

2.5.7)Code 节点如果创建完成,我们可以从查询节点中,将我们需要的图片链接地址存储起来,后续来下载。

即梦的返回结构有点复杂,这个代码同样可以用 AI 来写,明确我们需要的图片结构,其它不需要。给我写一个的n8n的code节点js代码,我需要取出 item_list下面的cover_url_map下的1080分辨率的图片 。
"""
查询图片状态的json返回值
"""


// 创建一个空数组,用于存放所有最终要输出的 item
constallOutputItems = [];
constitems = $('查询即梦生成结果').all()
// 在 "Run Once for All Items" 模式下,'items' 是一个包含所有输入 item 的数组。
// 我们需要遍历这个数组。
for(constitemofitems) {
// 从当前遍历到的 item 中获取 JSON 数据
constinputData = item.json;
// 'data' 对象中的键是动态的,所以我们通过 Object.values() 来获取其值
consttaskData =Object.values(inputData.data)[0];
// 检查 'item_list' 是否存在且是一个数组
if(taskData &&Array.isArray(taskData.item_list)) {
// 遍历 item_list 数组
for(constlistItemoftaskData.item_list) {
// 使用可选链操作符 (?.) 安全地提取 1080 分辨率的图片 URL
constimageUrl = listItem.common_attr?.cover_url_map?.['1080'];
// 如果成功找到了 URL
if(imageUrl) {
// 创建一个新的 n8n item 对象,并将其添加到我们的总输出数组中
allOutputItems.push({
json: {
image: imageUrl
}
});
}
}
}
}
// 返回包含所有新创建的 item 的数组。
// n8n 会将这个数组中的每个元素作为独立的 item 输出到下一个节点。
returnallOutputItems;
2.6)下载图片创建完成后,就可以下载了,这里有多张图片,使用循环的方式下载

2.6.1)Loop Over Items现在我们已经拿到了所有图片的链接,接下来就是下载到本地了,由于可能有多张图片,我们需要逐个下载。

添加loop 节点, Batch Size 的值改为 4

2.6.2)下载图片增加 Http Request 节点, 选择请求方式为 GET , 将Image的值拖入到URL 的地址框中

2.6.3)下载到本地增加 Read/Write Files from Disk 节点,将图片数据保存到本地

输入本地的图片保存路径和文件规则

三、运行与测试完整的工作流搭建完成后,你可以:
-
点击工作流主界面的「Execute Workflow」按钮
-
在表单中输入提示词,比如:”一只可爱的橘猫,坐在窗台上,阳光洒在身上,温暖的色调,高清摄影”
-
提交后,工作流会自动运行
-
等待10多秒后,图片就会自动下载到你指定的目录
常见问题排查:
-
如果下载失败,检查
session_id是否过期(需要重新获取)
-
如果图片一直显示未完成,可以增加 Wait 节点的等待时间
-
如果保存失败,检查文件路径是否正确,是否有写入权限

四、社区节点如果你觉得手动搭建工作流太复杂,其实剪映的文生图和文生视频功能,已经有社区开发好的节点可以直接使用了。在 n8n 界面中,点击「Settings」,进入社区节点的安装页面,点击「Install」

点击「Browse」

搜索「jimeng」,找到包后,复制包的名字

然后回到安装页面,将包名粘贴过来,选择「Install」

虽然这个工作流看起来步骤挺多,但搭建一次后就可以反复使用,大大提高了工作效率。特别是需要批量生成图片的时候,这个自动化流程就显得特别有价值。如果你在搭建过程中遇到问题,欢迎留言交流。如果觉得这个分享有帮助,也欢迎分享给更多需要的朋友!最后提醒:请合理使用工作流,遵守即梦的使用条款,不要频繁请求导致账号被限制。技术是用来提高效率的,而不是用来滥用的。好了,今天的整个分享就到这里啦,希望你们能喜欢!
© 版权声明
文章版权归作者所有,未经允许请勿转载。