ai-video-gen
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVideo Generation (HeyGen API)
视频生成(HeyGen API)
Generate AI videos from text prompts. Supports multiple providers (VEO 3.1, Kling, Sora, Runway, Seedance), configurable aspect ratios, and optional reference images for image-to-video generation.
通过文本提示词生成AI视频。支持多个提供商(VEO 3.1、Kling、Sora、Runway、Seedance)、可配置的宽高比,以及用于图生视频的可选参考图片。
Authentication
认证
All requests require the header. Set the environment variable.
X-Api-KeyHEYGEN_API_KEYbash
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"workflow_type": "GenerateVideoNode", "input": {"prompt": "A drone shot flying over a coastal city at sunset"}}'所有请求都需要携带请求头。请设置环境变量。
X-Api-KeyHEYGEN_API_KEYbash
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"workflow_type": "GenerateVideoNode", "input": {"prompt": "A drone shot flying over a coastal city at sunset"}}'Default Workflow
默认工作流
- Call with
POST /v1/workflows/executionsand your promptworkflow_type: "GenerateVideoNode" - Receive a in the response
execution_id - Poll every 10 seconds until status is
GET /v1/workflows/executions/{id}completed - Use the returned from the output
video_url
- 调用,携带
POST /v1/workflows/executions和你的提示词workflow_type: "GenerateVideoNode" - 在响应中获取
execution_id - 每10秒轮询一次,直到状态变为
GET /v1/workflows/executions/{id}completed - 使用返回结果中的
video_url
Execute Video Generation
执行视频生成
Endpoint
端点
POST https://api.heygen.com/v1/workflows/executionsPOST https://api.heygen.com/v1/workflows/executionsRequest Fields
请求字段
| Field | Type | Req | Description |
|---|---|---|---|
| string | Y | Must be |
| string | Y | Text description of the video to generate |
| string | Video generation provider (default: | |
| string | Aspect ratio (default: | |
| string | Reference image URL for image-to-video generation | |
| string | Tail image URL for last-frame guidance | |
| object | Provider-specific configuration overrides |
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| string | 是 | 必须为 |
| string | 是 | 要生成的视频的文本描述 |
| string | 否 | 视频生成提供商(默认值: |
| string | 否 | 宽高比(默认值: |
| string | 否 | 用于图生视频的参考图片URL |
| string | 否 | 用于最后一帧引导的尾部图片URL |
| object | 否 | 提供商特定的配置覆盖参数 |
Providers
提供商
| Provider | Value | Description |
|---|---|---|
| VEO 3.1 | | Google VEO 3.1 (default, highest quality) |
| VEO 3.1 Fast | | Faster VEO 3.1 variant |
| VEO 3 | | Google VEO 3 |
| VEO 3 Fast | | Faster VEO 3 variant |
| VEO 2 | | Google VEO 2 |
| Kling Pro | | Kling Pro model |
| Kling V2 | | Kling V2 model |
| Sora V2 | | OpenAI Sora V2 |
| Sora V2 Pro | | OpenAI Sora V2 Pro |
| Runway Gen-4 | | Runway Gen-4 |
| Seedance Lite | | Seedance Lite |
| Seedance Pro | | Seedance Pro |
| LTX Distilled | | LTX Distilled (fastest) |
| 提供商 | 值 | 描述 |
|---|---|---|
| VEO 3.1 | | Google VEO 3.1(默认,质量最高) |
| VEO 3.1 Fast | | 更快的VEO 3.1变体 |
| VEO 3 | | Google VEO 3 |
| VEO 3 Fast | | 更快的VEO 3变体 |
| VEO 2 | | Google VEO 2 |
| Kling Pro | | Kling Pro模型 |
| Kling V2 | | Kling V2模型 |
| Sora V2 | | OpenAI Sora V2 |
| Sora V2 Pro | | OpenAI Sora V2 Pro |
| Runway Gen-4 | | Runway Gen-4 |
| Seedance Lite | | Seedance Lite |
| Seedance Pro | | Seedance Pro |
| LTX Distilled | | LTX Distilled(速度最快) |
curl
curl示例
bash
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "A drone shot flying over a coastal city at golden hour, cinematic lighting",
"provider": "veo_3_1",
"aspect_ratio": "16:9"
}
}'bash
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "A drone shot flying over a coastal city at golden hour, cinematic lighting",
"provider": "veo_3_1",
"aspect_ratio": "16:9"
}
}'TypeScript
TypeScript示例
typescript
interface GenerateVideoInput {
prompt: string;
provider?: string;
aspect_ratio?: string;
reference_image_url?: string;
tail_image_url?: string;
config?: Record<string, any>;
}
interface ExecuteResponse {
data: {
execution_id: string;
status: "submitted";
};
}
async function generateVideo(input: GenerateVideoInput): Promise<string> {
const response = await fetch("https://api.heygen.com/v1/workflows/executions", {
method: "POST",
headers: {
"X-Api-Key": process.env.HEYGEN_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
workflow_type: "GenerateVideoNode",
input,
}),
});
const json: ExecuteResponse = await response.json();
return json.data.execution_id;
}typescript
interface GenerateVideoInput {
prompt: string;
provider?: string;
aspect_ratio?: string;
reference_image_url?: string;
tail_image_url?: string;
config?: Record<string, any>;
}
interface ExecuteResponse {
data: {
execution_id: string;
status: "submitted";
};
}
async function generateVideo(input: GenerateVideoInput): Promise<string> {
const response = await fetch("https://api.heygen.com/v1/workflows/executions", {
method: "POST",
headers: {
"X-Api-Key": process.env.HEYGEN_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
workflow_type: "GenerateVideoNode",
input,
}),
});
const json: ExecuteResponse = await response.json();
return json.data.execution_id;
}Python
Python示例
python
import requests
import os
def generate_video(
prompt: str,
provider: str = "veo_3_1",
aspect_ratio: str = "16:9",
reference_image_url: str | None = None,
tail_image_url: str | None = None,
) -> str:
payload = {
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": prompt,
"provider": provider,
"aspect_ratio": aspect_ratio,
},
}
if reference_image_url:
payload["input"]["reference_image_url"] = reference_image_url
if tail_image_url:
payload["input"]["tail_image_url"] = tail_image_url
response = requests.post(
"https://api.heygen.com/v1/workflows/executions",
headers={
"X-Api-Key": os.environ["HEYGEN_API_KEY"],
"Content-Type": "application/json",
},
json=payload,
)
data = response.json()
return data["data"]["execution_id"]python
import requests
import os
def generate_video(
prompt: str,
provider: str = "veo_3_1",
aspect_ratio: str = "16:9",
reference_image_url: str | None = None,
tail_image_url: str | None = None,
) -> str:
payload = {
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": prompt,
"provider": provider,
"aspect_ratio": aspect_ratio,
},
}
if reference_image_url:
payload["input"]["reference_image_url"] = reference_image_url
if tail_image_url:
payload["input"]["tail_image_url"] = tail_image_url
response = requests.post(
"https://api.heygen.com/v1/workflows/executions",
headers={
"X-Api-Key": os.environ["HEYGEN_API_KEY"],
"Content-Type": "application/json",
},
json=payload,
)
data = response.json()
return data["data"]["execution_id"]Response Format
响应格式
json
{
"data": {
"execution_id": "node-gw-v1d2e3o4",
"status": "submitted"
}
}json
{
"data": {
"execution_id": "node-gw-v1d2e3o4",
"status": "submitted"
}
}Check Status
检查状态
Endpoint
端点
GET https://api.heygen.com/v1/workflows/executions/{execution_id}GET https://api.heygen.com/v1/workflows/executions/{execution_id}curl
curl示例
bash
curl -X GET "https://api.heygen.com/v1/workflows/executions/node-gw-v1d2e3o4" \
-H "X-Api-Key: $HEYGEN_API_KEY"bash
curl -X GET "https://api.heygen.com/v1/workflows/executions/node-gw-v1d2e3o4" \
-H "X-Api-Key: $HEYGEN_API_KEY"Response Format (Completed)
完成状态下的响应格式
json
{
"data": {
"execution_id": "node-gw-v1d2e3o4",
"status": "completed",
"output": {
"video": {
"video_url": "https://resource.heygen.ai/generated/video.mp4",
"video_id": "abc123"
},
"asset_id": "asset-xyz789"
}
}
}json
{
"data": {
"execution_id": "node-gw-v1d2e3o4",
"status": "completed",
"output": {
"video": {
"video_url": "https://resource.heygen.ai/generated/video.mp4",
"video_id": "abc123"
},
"asset_id": "asset-xyz789"
}
}
}Polling for Completion
轮询等待完成
typescript
async function generateVideoAndWait(
input: GenerateVideoInput,
maxWaitMs = 600000,
pollIntervalMs = 10000
): Promise<{ video_url: string; video_id: string; asset_id: string }> {
const executionId = await generateVideo(input);
console.log(`Submitted video generation: ${executionId}`);
const startTime = Date.now();
while (Date.now() - startTime < maxWaitMs) {
const response = await fetch(
`https://api.heygen.com/v1/workflows/executions/${executionId}`,
{ headers: { "X-Api-Key": process.env.HEYGEN_API_KEY! } }
);
const { data } = await response.json();
switch (data.status) {
case "completed":
return {
video_url: data.output.video.video_url,
video_id: data.output.video.video_id,
asset_id: data.output.asset_id,
};
case "failed":
throw new Error(data.error?.message || "Video generation failed");
case "not_found":
throw new Error("Workflow not found");
default:
await new Promise((r) => setTimeout(r, pollIntervalMs));
}
}
throw new Error("Video generation timed out");
}typescript
async function generateVideoAndWait(
input: GenerateVideoInput,
maxWaitMs = 600000,
pollIntervalMs = 10000
): Promise<{ video_url: string; video_id: string; asset_id: string }> {
const executionId = await generateVideo(input);
console.log(`Submitted video generation: ${executionId}`);
const startTime = Date.now();
while (Date.now() - startTime < maxWaitMs) {
const response = await fetch(
`https://api.heygen.com/v1/workflows/executions/${executionId}`,
{ headers: { "X-Api-Key": process.env.HEYGEN_API_KEY! } }
);
const { data } = await response.json();
switch (data.status) {
case "completed":
return {
video_url: data.output.video.video_url,
video_id: data.output.video.video_id,
asset_id: data.output.asset_id,
};
case "failed":
throw new Error(data.error?.message || "Video generation failed");
case "not_found":
throw new Error("Workflow not found");
default:
await new Promise((r) => setTimeout(r, pollIntervalMs));
}
}
throw new Error("Video generation timed out");
}Usage Examples
使用示例
Simple Text-to-Video
简单文本转视频
bash
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "A person walking through a sunlit park, shallow depth of field"
}
}'bash
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "A person walking through a sunlit park, shallow depth of field"
}
}'Image-to-Video
图生视频
json
{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "Animate this product photo with a slow zoom and soft particle effects",
"reference_image_url": "https://example.com/product-photo.png",
"provider": "kling_pro"
}
}json
{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "Animate this product photo with a slow zoom and soft particle effects",
"reference_image_url": "https://example.com/product-photo.png",
"provider": "kling_pro"
}
}Vertical Format for Social Media
社交媒体竖版格式
json
{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "A trendy coffee shop interior, camera slowly panning across the counter",
"aspect_ratio": "9:16",
"provider": "veo_3_1"
}
}json
{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "A trendy coffee shop interior, camera slowly panning across the counter",
"aspect_ratio": "9:16",
"provider": "veo_3_1"
}
}Fast Generation with LTX
使用LTX快速生成
json
{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "Abstract colorful shapes morphing and flowing",
"provider": "ltx_distilled"
}
}json
{
"workflow_type": "GenerateVideoNode",
"input": {
"prompt": "Abstract colorful shapes morphing and flowing",
"provider": "ltx_distilled"
}
}Best Practices
最佳实践
- Be descriptive in prompts — include camera movement, lighting, style, and mood details
- Default to VEO 3.1 for highest quality; use or
ltx_distilledwhen speed mattersveo3_fast - Use reference images for image-to-video generation — great for animating product photos or still images
- Video generation is the slowest workflow — allow up to 5 minutes, poll every 10 seconds
- Aspect ratio matters — use for social media stories/reels,
9:16for landscape,16:9for square1:1 - Output includes — use this to reference the generated video in other HeyGen workflows
asset_id - Output URLs are temporary — download or save generated videos promptly
- 提示词要详细 — 包含镜头运动、光线、风格和氛围细节
- 默认使用VEO 3.1以获得最高质量;当注重速度时,使用或
ltx_distilledveo3_fast - 使用参考图片进行图生视频 — 非常适合为产品照片或静态图片添加动画
- 视频生成是最慢的工作流 — 允许最长5分钟的等待时间,每10秒轮询一次
- 宽高比很重要 — 社交媒体故事/短视频使用,横屏使用
9:16,方形使用16:91:1 - 输出包含— 使用该ID在其他HeyGen工作流中引用生成的视频
asset_id - 输出URL是临时的 — 请及时下载或保存生成的视频