n8n工作流实战:从零搭建即梦自动化生图系统

    即梦是我用的最多的 AI 出图软件,像公号的封面图我都是用它制作的。于是我想,能不能让这个流程更自动化一些?于是今天就用 n8n 接入了即梦,刚好也是边学边实践了。我这次不是用的 API 的方式,而是直接使用官方的表单生图地址,只需要提供一个生图提示词,运行工作流后就能将指定分辨率的图片自动下载到本地。虽然目前下载的图片还是带水印的,但暂时不影响我的日常使用。接下来,我就详细分享下整个 n8n 工作流的搭建过程。一、前期准备
    需要的工具:

    • 即梦账号(已登录状态)
    • n8n 自动化平台
    • 浏览器开发者工具(用于抓包)

    工作流整体架构:完整的工作流主要由以下几个部分组成:

    1. 表单提交(输入提示词)
    2. 数据封装与 UUID 生成
    3. 提交即梦生图请求
    4. 循环查询图片生成状态
    5. 提取图片链接
    6. 批量下载图片到本地

    整个流程是一个标准的异步任务处理模式,需要通过轮询的方式来检查图片是否生成完成。

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

    2.3 ) uuid 生成

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

    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 节点

    n8n工作流实战:从零搭建即梦自动化生图系统

    先登录进入即梦的生图页面

    https://jimeng.jianying.com/ai-tool/generate?type=image

    在谷歌浏览器(其它浏览器也可以)中,鼠标右键「检查」或 「F12」进入开发者工具页,切换到「Fetch/XHR」,可查询页面的后端接口请求地址

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统
    n8n工作流实战:从零搭建即梦自动化生图系统

    这个代码,可以通过 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 节点的返回值来判断图片是否创建完成

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统
    n8n工作流实战:从零搭建即梦自动化生图系统

    // 创建一个空数组,用于存放所有最终要输出的 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)下载图片创建完成后,就可以下载了,这里有多张图片,使用循环的方式下载

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

    三、运行与测试完整的工作流搭建完成后,你可以:

    1. 点击工作流主界面的「Execute Workflow」按钮
    2. 在表单中输入提示词,比如:”一只可爱的橘猫,坐在窗台上,阳光洒在身上,温暖的色调,高清摄影”
    3. 提交后,工作流会自动运行
    4. 等待10多秒后,图片就会自动下载到你指定的目录

    常见问题排查:

    • 如果下载失败,检查
      session_id是否过期(需要重新获取)
    • 如果图片一直显示未完成,可以增加 Wait 节点的等待时间
    • 如果保存失败,检查文件路径是否正确,是否有写入权限
    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

    点击「Browse」

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    n8n工作流实战:从零搭建即梦自动化生图系统

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

    © 版权声明

    相关文章