用于 AI 图片与视频的 n8n 工作流
在 n8n 中使用内置的 HTTP Request 节点和 PopNow API 生成 AI 图片、视频和音频。包括可导入的工作流 JSON、凭证设置、轮询循环、Webhook,以及常见错误的解决方法。
使用 PopNow 不需要 n8n 社区节点:两个内置的 HTTP Request 节点,加上一个 Wait 和一个 If 节点,就足以创建任务、等待任务完成,并把文件交给工作流的后续步骤。同一种模式适用于所有图片、视频和音频模型,所以你可以把一张提示词表格送进文生图模型,把新的产品照片做成短视频,或者逐行为脚本配音。
本页与 popnow.ai 上的 n8n 页面保持一致,那里可以为你选择的任意模型生成同样的工作流。在自托管的 n8n 上,你还可以安装 PopNow 社区节点:打开 Settings > Community Nodes > Install,输入 n8n-nodes-popnow(npm、GitHub)即可。

你需要准备什么
- n8n 1.x(云版或自托管)。HTTP Request 节点必须为 4 或更高版本。
- 在 API 控制台创建的 PopNow API 密钥。给 n8n 单独建一个密钥,设好每日消费上限,避免循环失控耗尽余额。
- 独立 API 美元余额中的资金,初始为 $0。在 API 账单充值。下方模型每次测试约 $0.01;网站积分不能支付这些调用。
1. 创建凭证
在 n8n 中打开 Credentials → Add credential → Header Auth,然后填写:
| 字段 | 值 |
|---|---|
| Name | PopNow |
| Header name | Authorization |
| Header value | Bearer sk-popnow-…(你的密钥,前面要有单词 Bearer 和一个空格) |
在搭建任何东西之前,可以先在终端里运行下面的命令检查密钥;它只读取余额,不收费:
curl "https://api.popnow.ai/api/v1/chat/credit" \
-H "Authorization: Bearer $POPNOW_API_KEY"availableUsd、heldUsd 和 totalUsd 都是 API 余额的美元十进制字符串。
2. 导入工作流
复制下面的 JSON,在 n8n 画布的空白处点击,然后粘贴。接着打开 Create task 和 Check task,在两个节点里都选择 PopNow 凭证。
工作流的运行顺序是:Start → Create task → Wait 5 s → Check task → Finished?。如果任务仍在运行,它会回到等待节点;任务完成后,File URL 会输出 state、fileUrl 和 error。
各节点的作用:
| 节点 | 设置 | 原因 |
|---|---|---|
| Create task | POST /api/v1/jobs/createTask,JSON 请求体 { "model", "input" } | model 可以是模型页中的任意模型 ID;input 必须符合该模型的 schema |
| Create task | 请求头 Idempotency-Key: {{ $execution.id }} | 如果 n8n 重试这个节点,你拿回的是同一个任务,而不会重复付费。见幂等 |
| Wait 5 s | 5 秒 | 图片通常一两次循环就能完成;视频需要一到三分钟 |
| Check task | GET /api/v1/jobs/recordInfo?taskId=… | 读取任务的 state 和 output |
| Finished? | state 已是终态,且没有文件仍在复制 | succeeded、failed 和 expired 是终态;见任务 |
| File URL | data.output.assets[0].url | 一个签名链接,约 20 分钟内有效。如果需要保留文件,请在下一个节点里下载 |
更换模型或输入
编辑 Create task 的 JSON 请求体即可。每个模型的页面都列出了它的 ID、字段和价格;下面是几个常见的替换:
| 目标 | model | input |
|---|---|---|
| 图片中的文字效果更好 | google/nano-banana-2.1/text-to-image | prompt、aspect_ratio、resolution(1K 为 $0.048) |
| 编辑一张照片 | google/nano-banana-2.1/edit | prompt、image_urls |
| 照片转视频 | minimax/h3/image-to-video | prompt、image_url、duration_seconds(768p 5 秒为 $0.185) |
| 配音 | google/gemini-3.8-flash-tts/text-to-speech | text、voice_id |
如果要使用前面节点的数据,请把请求体切换为表达式,例如:
{{ JSON.stringify({ model: 'alibaba/z-image-turbo/text-to-image', input: { prompt: $json.prompt, aspect_ratio: '16:9' } }) }}来自前面节点的文件需要一个公开的 https 地址,或者先上传;上传与下载页介绍了三个上传接口,它们可以对应到三个 HTTP Request 节点上。
用 Webhook 代替轮询
对于较长的视频任务,让 PopNow 主动通知 n8n,而不是循环查询。在第二个工作流中添加一个 Webhook 触发节点(POST),复制它的生产环境地址,并把它作为 callBackUrl 填入 Create task 的请求体:
{
"model": "minimax/h3/image-to-video",
"input": { "image_url": "https://media.popnow.ai/movie/lighthouse.webp", "prompt": "The waves roll in slowly" },
"callBackUrl": "https://your-n8n.example.com/webhook/popnow"
}Webhook 地址必须是公开的 HTTPS,所以本地的 n8n 需要使用隧道。每次投递都有签名;Webhook页说明了如何在 Code 节点中校验签名,以及为什么要保存 request_id 来忽略重复投递。
n8n 之外的同一个调用
适合在把请求体粘贴进节点之前先做测试。
curl -X POST "https://api.popnow.ai/api/v1/jobs/createTask?wait=60" \
-H "Authorization: Bearer $POPNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"model": "alibaba/z-image-turbo/text-to-image", "input": {"prompt": "A small red fox curled up in a teacup, soft morning light, studio photo", "aspect_ratio": "1:1"}}'import os, uuid, requests
res = requests.post(
"https://api.popnow.ai/api/v1/jobs/createTask",
params={"wait": 60},
headers={"Authorization": f"Bearer {os.environ['POPNOW_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={"model": "alibaba/z-image-turbo/text-to-image", "input": {"prompt": "A small red fox curled up in a teacup, soft morning light, studio photo", "aspect_ratio": "1:1"}},
timeout=90,
).json()
print(res["data"]["state"], res["data"].get("output", {}).get("assets", [{}])[0].get("url"))const res = await fetch('https://api.popnow.ai/api/v1/jobs/createTask?wait=60', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.POPNOW_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({
model: 'alibaba/z-image-turbo/text-to-image',
input: { prompt: 'A small red fox curled up in a teacup, soft morning light, studio photo', aspect_ratio: '1:1' },
}),
});
const { data } = await res.json();
console.log(data.state, data.output?.assets?.[0]?.url);价格
工作流只在 Create task 中花费 API 美元,查询任务免费。失败或过期任务不收费,用同一个 Idempotency-Key 重试节点不会重复扣费。批量运行前,先用 jobs/quote查询模型价格,规则见 API 余额与退款。
常见错误
| n8n 显示 | 原因 | 解决方法 |
|---|---|---|
Create task 返回 401 | 凭证缺失,或值中没有 Bearer | 请求头的值必须是 Bearer sk-popnow-… |
code: 400,msg 中带字段名 | 某个字段不在模型的 schema 中,或值超出范围 | 查看该模型的页面;未知字段会被拒绝 |
code: 40201 | API 美元余额不够冻结这个任务所需的金额 | 在 API 账单充值,或换更便宜的模型或设置 |
code: 40202 | 会超过该密钥的消费上限 | 在 API 控制台中为这个密钥调高上限 |
code: 429 | 请求过于频繁 | 延长等待时间,或减少并行运行的条目数;见速率限制 |
| 循环永远不结束 | 任务仍在运行,或 Finished? 读取了错误的字段 | 视频可能需要几分钟;请确认 Check task 使用的是 Create task 返回的 taskId |
fileUrl 一开始可用,之后返回 403 | 签名链接约 20 分钟后失效 | 在同一次运行中下载文件,或重新读取任务以获取新链接 |
state: failed | 模型无法完成,或拒绝了该内容 | 没有收费;查看 errorCode,并参考错误码 |
PopNow 有官方的 n8n 社区节点吗?
有:n8n-nodes-popnow 已在 npm 上发布,源码开源在 GitHub。在自托管的 n8n 上,打开 Settings > Community Nodes > Install,输入 n8n-nodes-popnow 并确认;如果从命令行安装,请在 ~/.n8n/nodes 中运行 npm install n8n-nodes-popnow,然后重启 n8n。它还不是认证节点,所以 n8n Cloud 无法安装。你不一定需要它:内置的 HTTP Request 节点已能完成 API 的全部功能,在 n8n Cloud 上也能用,而且本页的工作流粘贴一次即可导入。
n8n 能同时运行多个生成任务吗?
可以。每个到达 Create task 的条目都会成为一个独立的任务,它们会并行生成。请留意速率限制,并为密钥设置消费上限。
怎样把生成的文件保存到 Google Drive 或 S3?
在 File URL 之后添加一个 HTTP Request 节点,把 fileUrl 下载为文件(响应格式选 File),然后把它交给 Google Drive、S3 或其他存储节点。

