✦FRAMEFLOW模块化可视化视频agent

Node.js 对接 FrameFlow 模型 API

最后更新:2026-10-24

本文介绍如何用 Node.js(18 及以上,自带 fetch)对接 FrameFlow 模型API中转站:生图生视频提交任务后轮询结果,对话用 openai npm 包,base_url 换成 https://yimiagent.cn/v1。

1. 准备 API Key

登录 FrameFlow →「API 接入」→ 创建 API Key(以 ffk_ 开头,只显示一次,请立即保存),建议放进环境变量 FRAMEFLOW_API_KEY。 API Key 只能放在服务器端,不要写进网页或 App 前端代码。

npm install openai
export FRAMEFLOW_API_KEY=ffk_xxxxxxxx

2. 文生图:提交任务并轮询

const BASE = "https://yimiagent.cn/v1";
const H = { Authorization: `Bearer ${process.env.FRAMEFLOW_API_KEY}`, "Content-Type": "application/json" };
let task = await fetch(`${BASE}/images/generations`, {
  method: "POST", headers: { ...H, "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({ model: "Nano-Banana-2", prompt: "极简风格的咖啡店海报", aspect_ratio: "3:4" }),
}).then((r) => r.json());
while (["queued", "running"].includes(task.status)) {
  await new Promise((r) => setTimeout(r, 5000));
  task = await fetch(`${BASE}/tasks/${task.id}`, { headers: H }).then((r) => r.json());
}
console.log(task.status, task.outputs?.map((o) => o.url));

3. 图生视频

const video = await fetch(`${BASE}/videos/generations`, {
  method: "POST", headers: H,
  body: JSON.stringify({ model: "seedance-2.0", prompt: "产品缓慢旋转,柔和棚拍灯光", first_frame_url: "https://example.com/cup.jpg", duration: 5, resolution: "720p" }),
}).then((r) => r.json());
// 轮询方式同上,视频一般 1–5 分钟

4. 对话:openai npm 包

import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://yimiagent.cn/v1", apiKey: process.env.FRAMEFLOW_API_KEY });
const r = await client.chat.completions.create({ model: "qwen3-vl-plus", messages: [{ role: "user", content: "写一句保温杯广告语" }] });
console.log(r.choices[0].message.content);

模型 ID 见 模型API中转站。

5. 限流与错误

每个 Key 默认每分钟 60 次请求、同时 5 个任务;超出返回 HTTP 429,按响应头 Retry-After 等待后重试。错误统一为 {"error":{"code","message"}},完整错误码见 API 文档。

其他教程