n8n 本地图片生成视频教程
适用范围:自部署 n8n 读取本地图片,使用 apizt OpenAI 格式视频接口;n8n Cloud 需改为获取云端图片的 binary 数据。
版本与验证:2026-09-28 核对本文配置项、步骤和资料入口,补齐验证与排错说明。未在真实账号中验证付费模型调用。
配置速查
| 配置项 | 填写内容 | 注意事项 |
|---|---|---|
| 创建请求 | POST https://api.apizt.com/v1/videos | multipart/form-data,不是 JSON。 |
| 鉴权 | Authorization: Bearer <apizt API Key> | 存入 n8n Header Auth 凭据。 |
| input_reference | n8n Binary File / data | 读取文件节点输出的 binary 字段。 |
| model / seconds / size | sora-2 / 4 / 1280x720 | 视频模型;时长与尺寸按接口和模型支持填写。 |
| 查询请求 | GET https://api.apizt.com/v1/videos/{id} | 保留完整 id,编码后放进路径。 |
| 下载请求 | GET https://api.apizt.com/v1/videos/{id}/content | Response Format 选择 File。 |
还没有 API Key?注册获取免费体验额度 · 已注册:进入控制台创建 API Key
为此工具单独创建令牌,并设置合理额度和模型权限。截图中的模型仅作示例,以账号当前可用模型为准;不要公开密钥或上传含密钥的配置文件。
第 1 步:准备图片与执行环境
本文使用自部署 n8n。把参考图放到 n8n 可读取的 /files/reference.png;Docker 部署先挂载目录。图片内容、比例应符合目标视频模型要求。n8n Cloud 请使用 HTTP Request 等节点下载图片并输出 binary,不能直接读你电脑的路径。
第 2 步:读取图片
添加「Read/Write Files from Disk」节点,Operation 选 Read File(s) From Disk,File Selector 填 /files/reference.png,Put Output File in Field 设为 data。执行节点,在输出的 Binary 页签确认字段 data 存在。
第 3 步:创建视频请求
将 HTTP Request 节点命名为「创建视频」。方法 POST,URL 如图;Authentication 选择 Generic Credential Type → Header Auth,凭据名称填写 Authorization,值填写 Bearer 你的apizt令牌。启用 Send Body,Body Content Type 选 Form-Data。
| 字段 | 填写内容 | 说明 |
|---|---|---|
| model | sora-2 | Form Data |
| prompt | 让参考图中的主体自然运动,镜头缓慢推进 | Form Data |
| seconds | 4 | Form Data;本接口示例时长 4 秒 |
| size | 1280x720 | Form Data;参考图需满足模型比例要求 |
| input_reference | data | n8n Binary File;Input Data Field Name 为 data |
不要自行添加 Content-Type,n8n 会生成 multipart boundary。创建节点关闭自动重试;遇到超时先检查是否已创建任务,避免重复计费。
第 4 步:保存任务 ID
执行创建节点,确认响应顶层有非空 id。保存完整值,包括可能出现的前缀、冒号与后缀;后续只查询此任务。创建返回 id 并不代表视频已完成。
第 5 步:设置有限次数的轮询
在创建节点后添加 Code 节点,Mode 选 Run Once for All Items,生成 60 个查询机会:
const id = $('创建视频').first().json.id;
if (typeof id !== 'string' || !id.trim()) {
throw new Error('创建响应没有有效 id,请检查创建节点输出');
}
return Array.from({ length: 60 }, (_, i) => ({
json: { task_id: id, attempt: i + 1 }
}));- 连接 Loop Over Items,Batch Size 设为 1。它的 loop 输出接 Wait 节点,等待 10 秒。
- Wait 接 HTTP Request,命名「查询视频」,方法 GET,使用同一 Header Auth 凭据。URL 切换 Expression,填写下面表达式。
- 查询接 Switch 或 IF:
status === completed接下载;failed / cancelled / error接 Stop And Error,并保留响应错误内容。 queued / pending / in_progress / processing / running接回 Loop Over Items 输入继续下一轮。其他状态先停止并查看原始响应,不默默视为成功。- Loop 的 done 输出表示用尽 60 次查询:输出「仍在生成」和原始任务 id。等待后用该 id 单独查询,不再接创建节点。
{{ 'https://api.apizt.com/v1/videos/' + encodeURIComponent($('创建视频').first().json.id) }}第 6 步:下载并保存结果
任务 completed 后添加 HTTP Request「下载视频」,方法 GET,使用同一凭据,URL 使用下方表达式。Options → Response → Response Format 选择 File,Put Output in Field 填 video。
{{ 'https://api.apizt.com/v1/videos/' + encodeURIComponent($('创建视频').first().json.id) + '/content' }}自部署环境接 Read/Write Files from Disk,Operation 选 Write File to Disk,Input Binary Field 填 video,目标路径如 /files/result.mp4。如查询响应本身提供可访问的 video_url,可按返回地址获取;没有地址时使用 content 下载接口,不虚构公网播放 URL。Cloud 可把 binary 交给网盘或对象存储节点。
第 7 步:验收
- 确认界面上的请求域名均为
api.apizt.com。 - 核对创建、查询、下载使用同一完整 id。
- 打开保存的视频检查画面与时长,记录失败响应或请求 ID用于排查。
相关教程与接口
怎样确认配置已生效
- 读取节点的 Binary 标签中有 data。
- 创建返回非空 id,查询使用同一个完整 id。
- completed 后下载的视频 binary 非空,可保存并播放。
接入失败时逐项检查
| 现象 | 检查与处理 |
|---|---|
| 找不到 /files/reference.png | 自部署容器须挂载文件目录;路径是容器内路径。Cloud 不能读取你电脑的本地路径。 |
| input_reference 缺失 | Form-Data 参数类型选 n8n Binary File,Input Data Field Name 填 data;不要填本地路径字符串。 |
| multipart boundary 错误 | 删除手工 Content-Type,让 n8n 自动生成 multipart boundary。 |
| 一直 queued / processing | 最多轮询 60 次;保留任务 ID 后继续查询,不能重新创建同一任务。 |
| completed 但没有公网 URL | 按 content 下载端点获取文件;不要将任务 ID 拼成未经文档说明的播放链接。 |
资料与下一步
遇到问题时保留软件版本、请求时间、模型 ID、错误码和请求 ID,联系支持时先隐藏 API Key。