一键导入
text-to-video
基于文本描述生成短视频(5s/10s),适用于电商营销、创意宣传、教育讲解等场景,异步轮询获取结果。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
基于文本描述生成短视频(5s/10s),适用于电商营销、创意宣传、教育讲解等场景,异步轮询获取结果。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Generate short videos from a static image using the Kling AI image-to-video API. Use this skill whenever the user wants to animate an image, create a video from a photo, turn a picture into a video clip, or generate AI video from an uploaded image.
图片生成与编辑(超级版),调用 GPT-Image-2 模型生成和编辑图片。需要 AI 画图、生成图片、编辑图片、多图融合、背景替换、风格转换、电商商品图合成、海报设计、插画创作时优先使用该工具。纯像素操作(文字叠加、加水印、裁剪、缩放)请改用 Pillow,不要触发本工具。
调用百度通用文字识别高精度版 OCR,对图片全部文字内容进行高精度检测识别,支持中英日韩等 20+ 语种,适用于文档数字化、多语言文本提取场景。
根据用户输入的主题自动生成完整 PPT 文件,返回封面图和下载链接;适用于办公汇报、教学课件、产品展示等需要快速生成 PPT 的场景。
识别飞机行程单图片,结构化提取24个字段(乘客、航班、票价、税费等);适用于差旅报销、财务管理、行程记录场景。
百度千帆AI搜索,实时检索全网网页/视频内容,返回结构化引用列表(标题/URL/摘要/日期)。用户需要实时信息、新闻、网页检索时使用。
| name | text-to-video |
| description | 基于文本描述生成短视频(5s/10s),适用于电商营销、创意宣传、教育讲解等场景,异步轮询获取结果。 |
| license | MIT |
通过百度千帆平台 Kling 模型,根据文字提示词自动生成 5 秒或 10 秒的视频内容(不含声音)。
| 项目 | 说明 |
|---|---|
| 认证模式 | platform_managed(密钥由平台注入,无需用户配置) |
| 第三方域名 | qianfan.baidubce.com |
| 支持平台 | Web、MiniProgram |
| 计费 | 原价 ¥130.00 / 折扣价 ¥85.00(仅创建任务接口计费,查询接口不计费) |
接口列表:
| 接口 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 创建文生视频任务 | POST | /beta/video/generations/kling/text2video | 提交生成任务,返回 task_id |
| 查询任务状态 | GET | /beta/video/generations/kling/text2video | 轮询任务状态,成功后返回视频 URL |
工作流:
用户提交 prompt
↓
POST /text2video → 返回 task_id
↓
每 5 秒轮询 GET /text2video?task_id=xxx
↓
task_status == "succeed" → 获取 videos[0].url
↓
将视频 URL 转存至 Supabase Storage(视频链接 30 天后失效)
此 API 为异步接口,需先提交任务获取 task_id,再轮询查询状态直至完成。
详见:
references/submit-api.md(创建文生视频任务)references/query-api.md(查询文生视频生成任务状态)完整异步工作流示例(生成期):
const apiKey = process.env["INTEGRATIONS_API_KEY"]!;
/**
* 创建文生视频任务
* @param prompt - 正向文本提示词,最大 2500 字符
* @param duration - 视频时长(秒),枚举值:5、10,默认 5
* @param modelName - 生成模型,枚举值:kling-v1、kling-v1-6、kling-v2-master、kling-v2-1-master
* @returns task_id
*/
async function submitTextToVideo(
prompt: string,
duration: string = "5",
modelName: string = "kling-v1-6"
): Promise<string> {
const response = await fetch(
"https://api-o9wN672BkyMa@qianfan.baidubce.com/beta/video/generations/kling/text2video",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Gateway-Authorization": `Bearer ${apiKey}`,
},
body: JSON.stringify({ model_name: modelName, prompt, duration }), // model_name 为必填参数
}
);
if (!response.ok) throw new Error(`HTTP error: ${response.status}`);
const json = await response.json();
if (json.code !== 0) throw new Error(`API error ${json.code}: ${json.message}`);
return json.data.task_id;
}
/**
* 查询文生视频任务状态
* @param taskId - 任务 ID
* @returns 任务数据,含 task_status 和 task_result.videos
*/
async function queryTextToVideo(taskId: string): Promise<{
task_id: string;
task_status: string;
task_status_msg?: string;
task_result?: { videos: Array<{ id: string; url: string; duration: string }> };
created_at: number;
updated_at: number;
}> {
const url = new URL(
"https://api-nYWNozBb5qML@qianfan.baidubce.com/beta/video/generations/kling/text2video"
);
url.searchParams.set("task_id", taskId);
const response = await fetch(url.toString(), {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Gateway-Authorization": `Bearer ${apiKey}`,
},
});
if (!response.ok) throw new Error(`HTTP error: ${response.status}`);
const json = await response.json();
if (json.code !== 0) throw new Error(`API error ${json.code}: ${json.message}`);
return json.data;
}
/**
* 提交任务并轮询直至完成,返回视频 URL
* @param prompt - 正向文本提示词
* @param duration - 视频时长(秒),枚举值:5、10
* @param modelName - 生成模型,枚举值:kling-v1、kling-v1-6、kling-v2-master、kling-v2-1-master
* @returns 视频 URL(第三方临时链接,30 天后失效)
*/
async function generateVideoAndWait(
prompt: string,
duration: string = "5",
modelName: string = "kling-v1-6"
): Promise<string> {
const taskId = await submitTextToVideo(prompt, duration, modelName);
const POLL_INTERVAL_MS = 5000;
const TIMEOUT_MS = 10 * 60 * 1000;
const deadline = Date.now() + TIMEOUT_MS;
while (Date.now() < deadline) {
await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
const result = await queryTextToVideo(taskId);
if (result.task_status === "succeed") {
const videoUrl = result.task_result?.videos?.[0]?.url;
if (!videoUrl) throw new Error("Task succeeded but no video URL returned");
return videoUrl;
}
if (result.task_status === "failed") {
throw new Error(`Task failed: ${result.task_status_msg ?? "unknown reason"}`);
}
// submitted / processing → keep polling
}
throw new Error(`Task timed out after 10 minutes`);
}
生成期文件下载(必须执行):
生成接口返回的视频 URL 是 CDN 临时链接(30 天后失效),在生成期(Agent 直接调用场景)获得 URL 后,必须立即使用 Bash 工具将文件下载到本地,以便用户查看结果。
curl -L -o <本地路径> "<视频 URL>"
完整生成期工作流(含下载步骤):
curl -L -o <本地路径> "<url>" 将文件下载到本地注意:上游 CDN 链接有时效性,应在获得 URL 后立即下载,不要延迟。
本 API 为异步接口,Edge Function 设计原则:
task_id 给前端,不在 Edge Function 内部轮询。task_status 为 succeed 或 failed。succeed 时,将 task_result.videos[0].url 转存至 Supabase Storage(原始视频链接 30 天后失效)。平台差异:
| 平台 | 调用方式 | 说明 |
|---|---|---|
| Web | supabase.functions.invoke 或原生 fetch | 标准 JSON 调用 |
| MiniProgram | supabase.functions.invoke | 标准 JSON 调用 |
详见:
references/submit-api.md(创建任务 Edge Function + 前端代码)references/query-api.md(查询任务 Edge Function + 前端轮询代码 + Supabase Storage 转存)